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);
 }
 
 /*