Fix memory leaks in pg_combinebackup/reconstruct.c. master github/master
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;
        }