Fix memory leak in pg_restore with zstd-compressed data.
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 18 Dec 2024 03:31:26 +0000 (22:31 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 18 Dec 2024 03:31:26 +0000 (22:31 -0500)
EndCompressorZstd() neglected to free everything.  This was
most visible with a lot of large objects in the dump.

Per report from Tomasz Szypowski.  Back-patch to v16
where this code came in.

Discussion: https://postgr.es/m/DU0PR04MB94193D038A128EF989F922D199042@DU0PR04MB9419.eurprd04.prod.outlook.com

src/bin/pg_dump/compress_zstd.c

index aa5aff2fee32db4160cc58309af147118288de15..02987d6b0ba5b34d91e8707f2af182576c167880 100644 (file)
@@ -137,9 +137,10 @@ EndCompressorZstd(ArchiveHandle *AH, CompressorState *cs)
                Assert(zstdcs->dstream == NULL);
                _ZstdWriteCommon(AH, cs, true);
                ZSTD_freeCStream(zstdcs->cstream);
-               pg_free(zstdcs->output.dst);
        }
 
+       /* output buffer may be allocated in either mode */
+       pg_free(zstdcs->output.dst);
        pg_free(zstdcs);
 }