From 43222b8e53f49f2cf0849947a02c6fbd74899332 Mon Sep 17 00:00:00 2001 From: Melanie Plageman Date: Mon, 6 Apr 2026 18:41:17 -0400 Subject: [PATCH] Assert no duplicate keys in shm_toc_insert() shm_toc_insert() silently accepts duplicate keys. Since shm_toc_lookup() returns the first matching entry, any later entry with the same key would be unreachable. Add an assertion to catch this. Author: Melanie Plageman Discussion: https://postgr.es/m/flat/a177a6dd-240b-455a-8f25-aca0b1c08c6e%40vondra.me --- src/backend/storage/ipc/shm_toc.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/backend/storage/ipc/shm_toc.c b/src/backend/storage/ipc/shm_toc.c index e74a0b97ac0..2f9fbb0a519 100644 --- a/src/backend/storage/ipc/shm_toc.c +++ b/src/backend/storage/ipc/shm_toc.c @@ -186,6 +186,13 @@ shm_toc_insert(shm_toc *toc, uint64 key, void *address) total_bytes = vtoc->toc_total_bytes; allocated_bytes = vtoc->toc_allocated_bytes; nentry = vtoc->toc_nentry; + +#ifdef USE_ASSERT_CHECKING + /* Verify no duplicate keys */ + for (Size i = 0; i < nentry; i++) + Assert(vtoc->toc_entry[i].key != key); +#endif + toc_bytes = offsetof(shm_toc, toc_entry) + nentry * sizeof(shm_toc_entry) + allocated_bytes;