summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane2025-04-06 15:57:22 +0000
committerTom Lane2025-04-06 15:57:22 +0000
commit8ab6ef2bb8d9a00d205742932eb0b6daf62b34e0 (patch)
tree3e422de931e6fdd4e2c94cd81f92b5ae48cc130c
parent2e4ccf1b4508cc337bb4d0afff1e32a049d549fc (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.
-rw-r--r--contrib/pgcrypto/crypt-sha.c16
-rw-r--r--src/tools/pgindent/typedefs.list1
2 files changed, 9 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),
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index 1a30437ad96..d42b943ef94 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -1825,6 +1825,7 @@ PGAlignedBlock
PGAlignedXLogBlock
PGAsyncStatusType
PGCALL2
+PGCRYPTO_SHA_t
PGChecksummablePage
PGContextVisibility
PGErrorVerbosity