aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2022-04-18 20:04:55 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2022-04-18 20:04:55 -0400
commit587de223f03e6086d511dab16b17406eb21277ce (patch)
tree6ec6e21845b962e6fc8a5da9a9c6201e10ff79b7 /src
parent36d4efe779bfc7190ea1c1cf8deb0d945b726663 (diff)
downloadpostgresql-587de223f03e6086d511dab16b17406eb21277ce.tar.gz
postgresql-587de223f03e6086d511dab16b17406eb21277ce.zip
Add missing error handling in pg_md5_hash().
It failed to provide an error string as expected for the admittedly-unlikely case of OOM in pg_cryptohash_create(). Also, make it initialize *errstr to NULL for success, as pg_md5_binary() does. Also add missing comments. Readers should not have to reverse-engineer the API spec for a publicly visible routine.
Diffstat (limited to 'src')
-rw-r--r--src/common/md5_common.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/common/md5_common.c b/src/common/md5_common.c
index edc935eeb8d..472a1032c0c 100644
--- a/src/common/md5_common.c
+++ b/src/common/md5_common.c
@@ -57,6 +57,9 @@ bytesToHex(uint8 b[16], char *s)
* characters. you thus need to provide an array
* of 33 characters, including the trailing '\0'.
*
+ * errstr filled with a constant-string error message
+ * on failure return; NULL on success.
+ *
* RETURNS false on failure (out of memory for internal buffers
* or MD5 computation failure) or true on success.
*
@@ -72,9 +75,13 @@ pg_md5_hash(const void *buff, size_t len, char *hexsum, const char **errstr)
uint8 sum[MD5_DIGEST_LENGTH];
pg_cryptohash_ctx *ctx;
+ *errstr = NULL;
ctx = pg_cryptohash_create(PG_MD5);
if (ctx == NULL)
+ {
+ *errstr = pg_cryptohash_error(NULL); /* returns OOM */
return false;
+ }
if (pg_cryptohash_init(ctx) < 0 ||
pg_cryptohash_update(ctx, buff, len) < 0 ||
@@ -90,6 +97,12 @@ pg_md5_hash(const void *buff, size_t len, char *hexsum, const char **errstr)
return true;
}
+/*
+ * pg_md5_binary
+ *
+ * As above, except that the MD5 digest is returned as a binary string
+ * (of size MD5_DIGEST_LENGTH) rather than being converted to ASCII hex.
+ */
bool
pg_md5_binary(const void *buff, size_t len, void *outbuf, const char **errstr)
{