From 9a43cbb2b9b458e0f950cdab7ae557aa8f914be9 Mon Sep 17 00:00:00 2001
From: Jakub Wartak <jakub.wartak@enterprisedb.com>
Date: Wed, 27 Sep 2023 10:13:39 +0200
Subject: [PATCH v2] Cast MemoryContextAllocHuge() calculations in
 pg_stat_get_activity() SQL function to size_t.

This prevents integer overflow for MemoryContextAllocHuge() in pg_stat_get_activity()
SQL function when it is being called on system with high values of
max_connections and high pgstat_track_activity_query_size (e.g. 1MB):

    postgres=# select * from pg_stat_get_activity(NULL);
    ERROR:  invalid memory alloc request size 18446744072590721024
---
 src/backend/utils/activity/backend_status.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/backend/utils/activity/backend_status.c b/src/backend/utils/activity/backend_status.c
index 722c5acf38..e6d1397db2 100644
--- a/src/backend/utils/activity/backend_status.c
+++ b/src/backend/utils/activity/backend_status.c
@@ -765,7 +765,7 @@ pgstat_read_current_status(void)
 						   NAMEDATALEN * NumBackendStatSlots);
 	localactivity = (char *)
 		MemoryContextAllocHuge(backendStatusSnapContext,
-							   pgstat_track_activity_query_size * NumBackendStatSlots);
+							   (size_t)pgstat_track_activity_query_size * (size_t)NumBackendStatSlots);
 #ifdef USE_SSL
 	localsslstatus = (PgBackendSSLStatus *)
 		MemoryContextAlloc(backendStatusSnapContext,
-- 
2.30.2

