diff options
author | Daniel Gustafsson <dgustafsson@postgresql.org> | 2024-05-14 10:41:32 +0200 |
---|---|---|
committer | Daniel Gustafsson <dgustafsson@postgresql.org> | 2024-05-14 10:41:32 +0200 |
commit | b362d14816699ed05c47355dcb20bbe46f350b86 (patch) | |
tree | 8950ae0154081277caa1a393b36fef9ca9eecb75 | |
parent | ab4d7a38c36dba3997e9b585448837ccf6384aed (diff) | |
download | postgresql-b362d14816699ed05c47355dcb20bbe46f350b86.tar.gz postgresql-b362d14816699ed05c47355dcb20bbe46f350b86.zip |
Fix memory leaks in error reporting with LOG level
When loglevel is set to LOG, allocated strings used in the error
message would leak. Fix by explicitly pfreeing them.
Author: Ranier Vilela <ranier.vf@gmail.com>
Reviewed-by: Daniel Gustafsson <daniel@yesql.se>
Reviewed-by: Michael Paquier <michael@paquier.xyz>
Discussion: https://postgr.es/m/CAEudQAqMeE0AHcOsOzZx51Z0eiFJAjhBPRFt+Bxi3ETXWen7ig@mail.gmail.com
-rw-r--r-- | src/backend/archive/shell_archive.c | 2 | ||||
-rw-r--r-- | src/backend/libpq/be-secure-common.c | 6 |
2 files changed, 7 insertions, 1 deletions
diff --git a/src/backend/archive/shell_archive.c b/src/backend/archive/shell_archive.c index 0925348bfee..506c5a30ad2 100644 --- a/src/backend/archive/shell_archive.c +++ b/src/backend/archive/shell_archive.c @@ -125,9 +125,11 @@ shell_archive_file(ArchiveModuleState *state, const char *file, errdetail("The failed archive command was: %s", xlogarchcmd))); } + pfree(xlogarchcmd); return false; } + pfree(xlogarchcmd); elog(DEBUG1, "archived write-ahead log file \"%s\"", file); return true; diff --git a/src/backend/libpq/be-secure-common.c b/src/backend/libpq/be-secure-common.c index 05826061929..0cb201acb1e 100644 --- a/src/backend/libpq/be-secure-common.c +++ b/src/backend/libpq/be-secure-common.c @@ -85,12 +85,16 @@ run_ssl_passphrase_command(const char *prompt, bool is_server_start, char *buf, } else if (pclose_rc != 0) { + char *reason; + explicit_bzero(buf, size); + reason = wait_result_to_str(pclose_rc); ereport(loglevel, (errcode_for_file_access(), errmsg("command \"%s\" failed", command), - errdetail_internal("%s", wait_result_to_str(pclose_rc)))); + errdetail_internal("%s", reason))); + pfree(reason); goto error; } |