From: Tom Lane Date: Sun, 20 Dec 2020 17:38:32 +0000 (-0500) Subject: Avoid memcpy() with same source and destination in pgstat_recv_replslot. X-Git-Tag: REL_14_BETA1~1108 X-Git-Url: http://git.postgresql.org/gitweb/?a=commitdiff_plain;h=ed6329cfa975a13c58c44676464585cda5d317b3;p=postgresql.git Avoid memcpy() with same source and destination in pgstat_recv_replslot. Same type of issue as in commit 53d4f5fef and earlier fixes; also found by apparently-more-picky-than-the-buildfarm valgrind testing. This one is an oversight in commit 986816750. Since that's new in HEAD, no need for a back-patch. --- diff --git a/src/backend/postmaster/pgstat.c b/src/backend/postmaster/pgstat.c index 6b60f293e94..d87d9d06ee2 100644 --- a/src/backend/postmaster/pgstat.c +++ b/src/backend/postmaster/pgstat.c @@ -6916,15 +6916,15 @@ pgstat_recv_replslot(PgStat_MsgReplSlot *msg, int len) return; /* it must be a valid replication slot index */ - Assert(idx >= 0 && idx < max_replication_slots); + Assert(idx < nReplSlotStats); if (msg->m_drop) { /* Remove the replication slot statistics with the given name */ - memcpy(&replSlotStats[idx], &replSlotStats[nReplSlotStats - 1], - sizeof(PgStat_ReplSlotStats)); + if (idx < nReplSlotStats - 1) + memcpy(&replSlotStats[idx], &replSlotStats[nReplSlotStats - 1], + sizeof(PgStat_ReplSlotStats)); nReplSlotStats--; - Assert(nReplSlotStats >= 0); } else {