Re: pgsql: pg_logicalinspect: Fix possible crash when passing a directory p

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: David Rowley <dgrowleyml(at)gmail(dot)com>
Cc: Peter Eisentraut <peter(at)eisentraut(dot)org>, Masahiko Sawada <msawada(at)postgresql(dot)org>, pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: Re: pgsql: pg_logicalinspect: Fix possible crash when passing a directory p
Date: 2025-07-16 14:56:20
Message-ID: 1244428.1752677780@sss.pgh.pa.us
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-committers

[ this thread was referenced recently, bringing it back top-of-mind ]

David Rowley <dgrowleyml(at)gmail(dot)com> writes:
> On Thu, 13 Mar 2025 at 21:33, Peter Eisentraut <peter(at)eisentraut(dot)org> wrote:
>> Is there a way to reshuffle those conditionals to make this actually do
>> something useful on MSVC?

> I've just been experimenting with this and it seems the problem isn't
> with pg_unreachable(), it's with the compiler not understanding that
> the particular pg_unreachable() is always reached.

> What's happening is down to the multi-eval protection code for elevel
> in ereport_domain(). Because elevel is assigned to the variable
> "elevel_" the compiler seems to lose its proof that the
> pg_unreachable() is always reached. Adjusting that condition to use
> the elevel parameter directly makes the warning disappear.

Looking again at the code for ereport_domain(), I wondered if
something like this would help MSVC see through it:

#define ereport_domain(elevel, domain, ...) \
do { \
const int elevel_ = (elevel); \
+ const bool is_error_ = (elevel_ >= ERROR); \
pg_prevent_errno_in_scope(); \
if (errstart(elevel_, domain)) \
__VA_ARGS__, errfinish(__FILE__, __LINE__, __func__); \
- if (elevel_ >= ERROR) \
+ if (is_error_) \
pg_unreachable(); \
} while(0)

This preserves single evaluation of the elevel parameter, and
perhaps it'd move the needle on whether the compiler thinks
is_error_ is a compile-time constant. I'm just guessing
though, don't have this compiler to test with.

regards, tom lane

In response to

Responses

Browse pgsql-committers by date

  From Date Subject
Next Message Nathan Bossart 2025-07-16 16:51:40 pgsql: psql: Fix note on project naming in output of \copyright.
Previous Message Michael Paquier 2025-07-16 02:59:43 pgsql: Refactor non-supported compression error message in toast_compre