From 12354839e874c1f6ebc5e1e5ebc1c6b5519eeea0 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 18 Mar 2021 22:21:58 -0400 Subject: [PATCH] Don't leak malloc'd error string in libpqrcv_check_conninfo(). We leaked the error report from PQconninfoParse, when there was one. It seems unlikely that real usage patterns would repeat the failure often enough to create serious bloat, but let's back-patch anyway to keep the code similar in all branches. Found via valgrind testing. Back-patch to v10 where this code was added. Discussion: https://postgr.es/m/3816764.1616104288@sss.pgh.pa.us --- .../replication/libpqwalreceiver/libpqwalreceiver.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c b/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c index 80725fe913..98b01647b7 100644 --- a/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c +++ b/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c @@ -246,9 +246,15 @@ libpqrcv_check_conninfo(const char *conninfo) opts = PQconninfoParse(conninfo, &err); if (opts == NULL) + { + /* The error string is malloc'd, so we must free it explicitly */ + char *errcopy = err ? pstrdup(err) : "out of memory"; + + PQfreemem(err); ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("invalid connection string syntax: %s", err))); + errmsg("invalid connection string syntax: %s", errcopy))); + } PQconninfoFree(opts); }