Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Fix potential buffer overruns in proto.c.
authorAmit Kapila <akapila@postgresql.org>
Tue, 20 Jul 2021 02:45:01 +0000 (08:15 +0530)
committerAmit Kapila <akapila@postgresql.org>
Tue, 20 Jul 2021 02:45:01 +0000 (08:15 +0530)
Prevent potential buffer overruns when using strcpy to gid buffer. This
has been introduced by commit a8fd13cab0.

Reported-by: Tom Lane as per coverity
Author: Peter Smith
Reviewed-by: Amit Kapila
Discussion: https://www.postgresql.org/message-id/161029.1626639923%40sss.pgh.pa.us

src/backend/replication/logical/proto.c

index 13c8c3bd5bbdf58e75cc45a58e2e1fcd0a7088d7..a2452525299b06899469724b0b127c20fa839c65 100644 (file)
@@ -141,7 +141,7 @@ logicalrep_read_begin_prepare(StringInfo in, LogicalRepPreparedTxnData *begin_da
    begin_data->xid = pq_getmsgint(in, 4);
 
    /* read gid (copy it into a pre-allocated buffer) */
-   strcpy(begin_data->gid, pq_getmsgstring(in));
+   strlcpy(begin_data->gid, pq_getmsgstring(in), sizeof(begin_data->gid));
 }
 
 /*
@@ -198,7 +198,7 @@ logicalrep_read_prepare(StringInfo in, LogicalRepPreparedTxnData *prepare_data)
    prepare_data->xid = pq_getmsgint(in, 4);
 
    /* read gid (copy it into a pre-allocated buffer) */
-   strcpy(prepare_data->gid, pq_getmsgstring(in));
+   strlcpy(prepare_data->gid, pq_getmsgstring(in), sizeof(prepare_data->gid));
 }
 
 /*
@@ -254,7 +254,7 @@ logicalrep_read_commit_prepared(StringInfo in, LogicalRepCommitPreparedTxnData *
    prepare_data->xid = pq_getmsgint(in, 4);
 
    /* read gid (copy it into a pre-allocated buffer) */
-   strcpy(prepare_data->gid, pq_getmsgstring(in));
+   strlcpy(prepare_data->gid, pq_getmsgstring(in), sizeof(prepare_data->gid));
 }
 
 /*
@@ -314,7 +314,7 @@ logicalrep_read_rollback_prepared(StringInfo in,
    rollback_data->xid = pq_getmsgint(in, 4);
 
    /* read gid (copy it into a pre-allocated buffer) */
-   strcpy(rollback_data->gid, pq_getmsgstring(in));
+   strlcpy(rollback_data->gid, pq_getmsgstring(in), sizeof(rollback_data->gid));
 }
 
 /*