Hi hackers!

SerializeLibraryState() writes 1 byte too much into the buffer pointed to by start_address. This is the very last '\0' it writes after the loop. Attached is a patch that fixes the problem by accounting for that extra byte in EstimateLibraryStateSpace()

--
David Geier
(ServiceNow)
From d0ddfe09e4264f449ac75cd95d6312b44240cfbb Mon Sep 17 00:00:00 2001
From: David Geier <geidav...@gmail.com>
Date: Tue, 10 Jun 2025 14:54:25 +0200
Subject: [PATCH] Fix buffer overflow in SerializeLibraryState()

---
 src/backend/utils/fmgr/dfmgr.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/backend/utils/fmgr/dfmgr.c b/src/backend/utils/fmgr/dfmgr.c
index 4bb84ff7087..e3901a63b41 100644
--- a/src/backend/utils/fmgr/dfmgr.c
+++ b/src/backend/utils/fmgr/dfmgr.c
@@ -702,7 +702,7 @@ EstimateLibraryStateSpace(void)
                 file_scanner = file_scanner->next)
                size = add_size(size, strlen(file_scanner->filename) + 1);
 
-       return size;
+       return size + 1; /* Additional byte for final \0 byte */
 }
 
 /*
-- 
2.34.1

Reply via email to