aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2021-03-18 22:21:58 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2021-03-18 22:22:47 -0400
commit9bacdf9f536a3720976ae258238cb46c691ce9b2 (patch)
treee1ff00d0333358f5bfb02d55125840c1e6c86af0 /src
parent377b7a83007d277d32ef19f7c7590c8668d504cb (diff)
downloadpostgresql-9bacdf9f536a3720976ae258238cb46c691ce9b2.tar.gz
postgresql-9bacdf9f536a3720976ae258238cb46c691ce9b2.zip
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
Diffstat (limited to 'src')
-rw-r--r--src/backend/replication/libpqwalreceiver/libpqwalreceiver.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c b/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c
index f74378110a0..021c1b36f3e 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);
}