Fix memory leaks in pg_combinebackup/reconstruct.c.
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 22 Oct 2025 17:38:37 +0000 (13:38 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 22 Oct 2025 17:38:40 +0000 (13:38 -0400)
One code path forgot to free the separately-malloc'd filename
part of a struct rfile.  Another place freed the filename but
forgot the struct rfile itself.  These seem worth fixing because
with a large backup we could be dealing with many files.

Coverity found the bug in make_rfile().  I found the other one
by manual inspection.

src/bin/pg_combinebackup/reconstruct.c

index 8acaa54ff38b46abef60cbec3556dbafcdac94b7..38d8e8a2dc9aff4b0549ec9088e9e66b396eb6cd 100644 (file)
@@ -370,6 +370,7 @@ reconstruct_from_incremental_file(char *input_filename,
                if (s->relative_block_numbers != NULL)
                        pfree(s->relative_block_numbers);
                pg_free(s->filename);
+               pg_free(s);
        }
        pfree(sourcemap);
        pfree(offsetmap);
@@ -517,6 +518,7 @@ make_rfile(char *filename, bool missing_ok)
        {
                if (missing_ok && errno == ENOENT)
                {
+                       pg_free(rf->filename);
                        pg_free(rf);
                        return NULL;
                }