aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Gustafsson <dgustafsson@postgresql.org>2024-05-14 10:41:32 +0200
committerDaniel Gustafsson <dgustafsson@postgresql.org>2024-05-14 10:41:32 +0200
commitb362d14816699ed05c47355dcb20bbe46f350b86 (patch)
tree8950ae0154081277caa1a393b36fef9ca9eecb75
parentab4d7a38c36dba3997e9b585448837ccf6384aed (diff)
downloadpostgresql-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.c2
-rw-r--r--src/backend/libpq/be-secure-common.c6
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;
}