Re: Integer undeflow in fprintf in dsa.c

Daniel Gustafsson <daniel@yesql.se>

From: Daniel Gustafsson <daniel@yesql.se>
To: Ильясов Ян <ianilyasov@outlook.com>
Cc: PostgreSQL Hackers <pgsql-hackers@postgresql.org>
Date: 2024-02-20T12:00:19Z
Lists: pgsql-hackers
> On 20 Feb 2024, at 12:28, Ильясов Ян <ianilyasov@outlook.com> wrote:

> ​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".

That does indeed seem like an oversight.

> I believe that this is a mistake, and fprintf​ should print "at least 0 contiguous pages free"
> in case i​ equals zero.

The message "at least 0 contiguous pages free" reads a bit nonsensical though,
wouldn't it be preferrable to check for i being zero and print a custom message
for that case? Something like the below untested sketch?

+                       if (i == 0)
+                               fprintf(stderr,
+                                               "    segment bin %zu (no contiguous free pages):\n", i);
+                       else
+                               fprintf(stderr,
+                                               "    segment bin %zu (at least %d contiguous pages free):\n",
+                                               i, 1 << (i - 1));

--
Daniel Gustafsson




Commits

  1. Fix integer underflow in shared memory debugging

  2. Introduce dynamic shared memory areas.