Fix memory leaks if random salt generation fails.

In the backend, this is just to silence coverity warnings, but in the
frontend, it's a genuine leak, even if extremely rare.

Spotted by Coverity, patch by Michael Paquier.
This commit is contained in:
Heikki Linnakangas 2017-05-07 19:58:21 +03:00
parent a54d5875fe
commit 0186ded546
2 changed files with 6 additions and 0 deletions

View File

@ -411,6 +411,8 @@ pg_be_scram_build_verifier(const char *password)
ereport(LOG, ereport(LOG,
(errcode(ERRCODE_INTERNAL_ERROR), (errcode(ERRCODE_INTERNAL_ERROR),
errmsg("could not generate random salt"))); errmsg("could not generate random salt")));
if (prep_password)
pfree(prep_password);
return NULL; return NULL;
} }

View File

@ -638,7 +638,11 @@ pg_fe_scram_build_verifier(const char *password)
/* Generate a random salt */ /* Generate a random salt */
if (!pg_frontend_random(saltbuf, SCRAM_DEFAULT_SALT_LEN)) if (!pg_frontend_random(saltbuf, SCRAM_DEFAULT_SALT_LEN))
{
if (prep_password)
free(prep_password);
return NULL; return NULL;
}
result = scram_build_verifier(saltbuf, SCRAM_DEFAULT_SALT_LEN, result = scram_build_verifier(saltbuf, SCRAM_DEFAULT_SALT_LEN,
SCRAM_DEFAULT_ITERATIONS, password); SCRAM_DEFAULT_ITERATIONS, password);