From 6afe200ceea818c82e3a1a754c5043e7df1efa10 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Fri, 31 Jan 2014 20:19:53 -0500 Subject: [PATCH] chkpass: check for NULL return value from crypt() Report from Jozef Mlich using Coverity --- contrib/chkpass/chkpass.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/contrib/chkpass/chkpass.c b/contrib/chkpass/chkpass.c index 0c9fec0e67..dc66075f98 100644 --- a/contrib/chkpass/chkpass.c +++ b/contrib/chkpass/chkpass.c @@ -70,6 +70,7 @@ chkpass_in(PG_FUNCTION_ARGS) char *str = PG_GETARG_CSTRING(0); chkpass *result; char mysalt[4]; + char *crypt_output; static char salt_chars[] = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; @@ -92,7 +93,13 @@ chkpass_in(PG_FUNCTION_ARGS) mysalt[1] = salt_chars[random() & 0x3f]; mysalt[2] = 0; /* technically the terminator is not necessary * but I like to play safe */ - strcpy(result->password, crypt(str, mysalt)); + + if ((crypt_output = crypt(str, mysalt)) == NULL) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("crypt() failed"))); + strcpy(result->password, crypt_output); + PG_RETURN_POINTER(result); } -- 2.40.0