]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Undo thinko in commit e78d1d6d4.
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 10 Jun 2026 21:01:45 +0000 (17:01 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 10 Jun 2026 21:01:45 +0000 (17:01 -0400)
In pursuit of removing a Valgrind-detected leak, I inserted
"pfree(pq_mq_handle);" into mq_putmessage's recursion-trouble-recovery
code path, failing to notice that shm_mq_detach would have pfree'd
that block just before (i.e., this particular code path did not leak).
So now that was a double pfree.  We didn't notice because the
recursion scenario isn't exercised in our regression tests, but
Alexander Lakhin found it via code fuzzing.

Reported-by: Alexander Lakhin <exclusion@gmail.com>
Author: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://postgr.es/m/b8b40954-e155-41b3-9af8-ad4f261a1b64@gmail.com

src/backend/libpq/pqmq.c

index 21ce180c78ddff0c5b17f1db187863ca6a0f40e3..d038a9da515e2ffce38f7913e8a003f04373baeb 100644 (file)
@@ -140,7 +140,6 @@ mq_putmessage(char msgtype, const char *s, size_t len)
                if (pq_mq_handle != NULL)
                {
                        shm_mq_detach(pq_mq_handle);
-                       pfree(pq_mq_handle);
                        pq_mq_handle = NULL;
                }
                return EOF;