Clean up recent Coverity complaints.
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 23 Jan 2022 17:51:38 +0000 (12:51 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 23 Jan 2022 17:51:38 +0000 (12:51 -0500)
Commit 5c649fe15 introduced a memory leak into pg_basebackup's
parse_compress_options.  (I simplified nearby code while at it.)

Commit 9a974cbcb introduced a memory leak into pg_dump's
binary_upgrade_set_pg_class_oids.

Coverity also complained about a call of SnapBuildProcessChange that
ignored the result, unlike every other call of that function.  This
is evidently intentional, so add a (void) cast to indicate that.
(It's also old, dating to b89e15105; I suppose the reason it showed
up now is 7a5f6b474's recent rearrangement of nearby code.)

src/backend/replication/logical/decode.c
src/bin/pg_basebackup/pg_basebackup.c
src/bin/pg_dump/pg_dump.c

index 9b450c9f90e2ab5c74a641489e9f96704fcda0dc..3fb5a92a1a108ceea4c1db829433db4a884254f7 100644 (file)
@@ -498,7 +498,7 @@ heap_decode(LogicalDecodingContext *ctx, XLogRecordBuffer *buf)
            if (!TransactionIdIsValid(xid))
                break;
 
-           SnapBuildProcessChange(builder, xid, buf->origptr);
+           (void) SnapBuildProcessChange(builder, xid, buf->origptr);
            ReorderBufferXidSetCatalogChanges(ctx->reorder, xid, buf->origptr);
            break;
 
index d5b0ade10d5e661b301c931af0835f911e54f0fa..7a56ebb2c9228aff4a078d26b2e86ceab8bcf72e 100644 (file)
@@ -948,7 +948,7 @@ parse_compress_options(char *src, WalCompressionMethod *methodres,
 {
    char       *sep;
    int         firstlen;
-   char       *firstpart = NULL;
+   char       *firstpart;
 
    /* check if the option is split in two */
    sep = strchr(src, ':');
@@ -959,7 +959,7 @@ parse_compress_options(char *src, WalCompressionMethod *methodres,
     */
    firstlen = (sep != NULL) ? (sep - src) : strlen(src);
    firstpart = pg_malloc(firstlen + 1);
-   strncpy(firstpart, src, firstlen);
+   memcpy(firstpart, src, firstlen);
    firstpart[firstlen] = '\0';
 
    /*
@@ -983,6 +983,8 @@ parse_compress_options(char *src, WalCompressionMethod *methodres,
 
        *methodres = (*levelres > 0) ?
            COMPRESSION_GZIP : COMPRESSION_NONE;
+
+       free(firstpart);
        return;
    }
 
@@ -992,6 +994,7 @@ parse_compress_options(char *src, WalCompressionMethod *methodres,
         * The caller specified a method without a colon separator, so let any
         * subsequent checks assign a default level.
         */
+       free(firstpart);
        return;
    }
 
@@ -1010,6 +1013,8 @@ parse_compress_options(char *src, WalCompressionMethod *methodres,
    if (!option_parse_int(sep, "-Z/--compress", 0, INT_MAX,
                          levelres))
        exit(1);
+
+   free(firstpart);
 }
 
 /*
index 7c2f1d3044721e714ebc50789d8079f17dabb1a1..7c0e396ce13cebdfde9b79214e2a89b6f90b642b 100644 (file)
@@ -4714,7 +4714,6 @@ binary_upgrade_set_pg_class_oids(Archive *fout,
        }
 
        PQclear(upgrade_res);
-       destroyPQExpBuffer(upgrade_query);
    }
    else
    {
@@ -4728,6 +4727,8 @@ binary_upgrade_set_pg_class_oids(Archive *fout,
    }
 
    appendPQExpBufferChar(upgrade_buffer, '\n');
+
+   destroyPQExpBuffer(upgrade_query);
 }
 
 /*