From: Amit Kapila Date: Tue, 20 Jul 2021 02:45:01 +0000 (+0530) Subject: Fix potential buffer overruns in proto.c. X-Git-Tag: REL_15_BETA1~1845 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=01c3adcdd85f1507ef49bdf5430c59925d08de6f;p=thirdparty%2Fpostgresql.git Fix potential buffer overruns in proto.c. 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 --- diff --git a/src/backend/replication/logical/proto.c b/src/backend/replication/logical/proto.c index 13c8c3bd5bb..a2452525299 100644 --- a/src/backend/replication/logical/proto.c +++ b/src/backend/replication/logical/proto.c @@ -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)); } /*