Hello hackers, Using Svace* I think I've found a little bug in src/backend/utils/mmgr/dsa.c. This bug is presented in REL_12_STABLE, REL_13_STABLE, REL_14_STABLE, REL_15_STABLE, REL_16_STABLE and master. I see that it was introduced together with dynamic shared memory areas in the commit 13df76a537cca3b8884911d8fdf7c89a457a8dd3. I also see that at least two people have encountered this fprintf output. (https://postgrespro.com/list/thread-id/2419512, https://www.postgresql.org/message-id/15e9501170d.e4b5a3858707.3339083113985275726%40zohocorp.com)
fprintf(stderr, " segment bin %zu (at least %d contiguous pages free):\n", i, 1 << (i - 1)); In case i equals zero user will get "at least -2147483648 contiguous pages free". I believe that this is a mistake, and fprintf should print "at least 0 contiguous pages free" in case i equals zero. The patch that has a fix of this is attached. * - https://svace.pages.ispras.ru/svace-website/en/ Kind regards, Ian Ilyasov. Juniour Software Developer at Postgres Professional
Subject: [PATCH] Integer underflow fix in fprintf in dsa.c. --- Index: src/backend/utils/mmgr/dsa.c <+>UTF-8 =================================================================== diff --git a/src/backend/utils/mmgr/dsa.c b/src/backend/utils/mmgr/dsa.c --- a/src/backend/utils/mmgr/dsa.c (revision b78fa8547d02fc72ace679fb4d5289dccdbfc781) +++ b/src/backend/utils/mmgr/dsa.c (date 1708426298001) @@ -1107,7 +1107,7 @@ fprintf(stderr, " segment bin %zu (at least %d contiguous pages free):\n", - i, 1 << (i - 1)); + i, i != 0 ? 1 << (i - 1) : 0); segment_index = area->control->segment_bins[i]; while (segment_index != DSA_SEGMENT_INDEX_NONE) {