From f167c8bb435e7d7a69d95930917d90243f07117b Mon Sep 17 00:00:00 2001
From: Peter Smith <peter.b.smith@fujitsu.com>
Date: Mon, 19 Jul 2021 13:34:03 +1000
Subject: [PATCH v1] Fix potential buffer overruns.

Prevent potential buffer overruns when using strcpy to gid buffer.
Exposed by Coverity. Reported by Tom Lane [1].

[1] https://www.postgresql.org/message-id/161029.1626639923%40sss.pgh.pa.us
---
 src/backend/replication/logical/proto.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/backend/replication/logical/proto.c b/src/backend/replication/logical/proto.c
index 13c8c3b..0a48c4d 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), GIDSIZE);
 }
 
 /*
@@ -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), GIDSIZE);
 }
 
 /*
@@ -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), GIDSIZE);
 }
 
 /*
@@ -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), GIDSIZE);
 }
 
 /*
-- 
1.8.3.1

