Re: [PATCH] Fix incorrect fprintf usage in log_error FRONTEND path
Bryan Green <dbryan.green@gmail.com>
From: Bryan Green <dbryan.green@gmail.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: pgsql-hackers@postgresql.org
Date: 2025-10-13T18:24:06Z
Lists: pgsql-hackers
On 10/13/25 13:16, Bryan Green wrote:
> On 10/13/25 13:01, Tom Lane wrote:
>> Bryan Green <dbryan.green@gmail.com> writes:
>>> On 10/13/25 10:48, Tom Lane wrote:
>>>> Huh, that certainly appears broken, but isn't the non-FRONTEND
>>>> case equally broken? write_stderr() doesn't expect a va_list
>>>> either. I wonder if this code is ever reached at all.
>>
>>> I found two instances of write_stderr(), one in elog.c and another in
>>> pg_ctl.c.
>>> They both use functions that correctly handle the va_list-- either
>>> vsnprintf or vfprintf.
>>
>> It's the one in elog.c that the non-FRONTEND case is going to invoke.
>> But I think you're mistaken that it'll "just work". write_stderr()
>> is creating its own va_list.
>>
>> We probably need to invent vwrite_stderr().
>>
>> regards, tom lane
> Oh, yes, I see it now. I will create the vwrite_stderr()-- probably
> something like below, and then create a new patch.
>
> void
> vwrite_stderr(const char *fmt, va_list ap)
> {
> #ifdef WIN32
> char errbuf[2048];
> #endif
> fmt = _(fmt);
>
> #ifndef WIN32
> vfprintf(stderr, fmt, ap);
> fflush(stderr);
> #else
> vsnprintf(errbuf, sizeof(errbuf), fmt, ap);
> if (pgwin32_is_service())
> write_eventlog(ERROR, errbuf, strlen(errbuf));
> else
> {
> write_console(errbuf, strlen(errbuf));
> fflush(stderr);
> }
> #endif
> }
>
> Thanks,
> Bryan Green
I mistakenly just hit reply instead of reply all. Apologies for the
clutter.
Commits
-
Fix incorrect message-printing in win32security.c.
- f91666c836dd 15.15 landed
- e91eb4ad66c9 14.20 landed
- b48ae226e6c3 18.1 landed
- 9883e3cd1c61 16.11 landed
- 75a555d61b3b 13.23 landed
- 4c53519e15da 17.7 landed
- 03bf7a12c5a4 19 (unreleased) landed