From 198efe774b0d2065d828cf7822376a2871c671fc Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Fri, 17 Apr 2020 10:45:08 +0900 Subject: [PATCH] Fix minor memory leak in pg_basebackup and pg_receivewal The result of the query used to retrieve the WAL segment size from the backend was not getting freed in two code paths. Both pg_basebackup and pg_receivewal exit immediately if a failure happened on this query, so this was not an actual problem, but it could be an issue if this code gets used for other tools in different ways, be they future tools in this code tree or external, existing, ones. Oversight in commit fc49e24, so backpatch down to 11. Author: Jie Zhang Discussion: https://postgr.es/m/970ad9508461469b9450b64027842331@G08CNEXMBPEKD06.g08.fujitsu.local Backpatch-through: 11 --- src/bin/pg_basebackup/streamutil.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/bin/pg_basebackup/streamutil.c b/src/bin/pg_basebackup/streamutil.c index 1b9005722a..410116492e 100644 --- a/src/bin/pg_basebackup/streamutil.c +++ b/src/bin/pg_basebackup/streamutil.c @@ -313,9 +313,12 @@ RetrieveWalSegSize(PGconn *conn) if (sscanf(PQgetvalue(res, 0, 0), "%d%s", &xlog_val, xlog_unit) != 2) { pg_log_error("WAL segment size could not be parsed"); + PQclear(res); return false; } + PQclear(res); + /* set the multiplier based on unit to convert xlog_val to bytes */ if (strcmp(xlog_unit, "MB") == 0) multiplier = 1024 * 1024; @@ -334,7 +337,6 @@ RetrieveWalSegSize(PGconn *conn) return false; } - PQclear(res); return true; }