diff options
author | Tom Lane | 2025-04-06 15:57:22 +0000 |
---|---|---|
committer | Tom Lane | 2025-04-06 15:57:22 +0000 |
commit | 8ab6ef2bb8d9a00d205742932eb0b6daf62b34e0 (patch) | |
tree | 3e422de931e6fdd4e2c94cd81f92b5ae48cc130c /contrib/pgcrypto/crypt-sha.c | |
parent | 2e4ccf1b4508cc337bb4d0afff1e32a049d549fc (diff) |
Fix memory leaks in px_crypt_shacrypt().
Per Coverity. I don't think these are of any actual significance
since the function ought to be invoked in a short-lived context.
Still, if it's trying to be neat it should get it right.
Also const-ify a constant and fix up typedef formatting.
Diffstat (limited to 'contrib/pgcrypto/crypt-sha.c')
-rw-r--r-- | contrib/pgcrypto/crypt-sha.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/contrib/pgcrypto/crypt-sha.c b/contrib/pgcrypto/crypt-sha.c index 862f3fb9a68..7e9440ca784 100644 --- a/contrib/pgcrypto/crypt-sha.c +++ b/contrib/pgcrypto/crypt-sha.c @@ -56,7 +56,7 @@ typedef enum PGCRYPTO_SHA256CRYPT = 0, PGCRYPTO_SHA512CRYPT = 1, PGCRYPTO_SHA_UNKOWN -} PGCRYPTO_SHA_t; +} PGCRYPTO_SHA_t; static unsigned char _crypt_itoa64[64 + 1] = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; @@ -68,7 +68,7 @@ char * px_crypt_shacrypt(const char *pw, const char *salt, char *passwd, unsigned dstlen) { static const char rounds_prefix[] = "rounds="; - static char *magic_bytes[2] = {"$5$", "$6$"}; + static const char *magic_bytes[2] = {"$5$", "$6$"}; /* Used to create the password hash string */ StringInfo out_buf = NULL; @@ -96,10 +96,6 @@ px_crypt_shacrypt(const char *pw, const char *salt, char *passwd, unsigned dstle unsigned int len, salt_len = 0; - /* Init result buffer */ - out_buf = makeStringInfoExt(PX_SHACRYPT_BUF_LEN); - decoded_salt = makeStringInfoExt(PX_SHACRYPT_SALT_MAX_LEN); - /* Sanity checks */ if (!passwd) return NULL; @@ -116,6 +112,10 @@ px_crypt_shacrypt(const char *pw, const char *salt, char *passwd, unsigned dstle if (dstlen < PX_SHACRYPT_BUF_LEN) elog(ERROR, "insufficient result buffer size to encrypt password"); + /* Init result buffer */ + out_buf = makeStringInfoExt(PX_SHACRYPT_BUF_LEN); + decoded_salt = makeStringInfoExt(PX_SHACRYPT_SALT_MAX_LEN); + /* Init contents of buffers properly */ memset(&sha_buf, '\0', sizeof(sha_buf)); memset(&sha_buf_tmp, '\0', sizeof(sha_buf_tmp)); @@ -630,8 +630,8 @@ error: if (digestB != NULL) px_md_free(digestB); - if (out_buf != NULL) - destroyStringInfo(out_buf); + destroyStringInfo(out_buf); + destroyStringInfo(decoded_salt); ereport(ERROR, errcode(ERRCODE_INTERNAL_ERROR), |