Re: printf %s with NULL pointer (was Re: BUG #17098: Assert failed on composing an error message when adding a type to an extension being dropped)

Peter Eisentraut <peter.eisentraut@enterprisedb.com>

From: Peter Eisentraut <peter.eisentraut@enterprisedb.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Ranier Vilela <ranier.vf@gmail.com>, Laurenz Albe <laurenz.albe@cybertec.at>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2021-07-22T06:20:28Z
Lists: pgsql-bugs, pgsql-hackers
On 14.07.21 18:26, Tom Lane wrote:
> Peter Eisentraut <peter.eisentraut@enterprisedb.com> writes:
>> In this particular case, I would for example be quite curious how those
>> alternative minimal C libraries such as musl-libc handle this.
> 
> Interesting question, so I took a look:
> 
> https://git.musl-libc.org/cgit/musl/tree/src/stdio/vfprintf.c#n593
> 
>                      case 's':
> 			a = arg.p ? arg.p : "(null)";
> 			...
> 
> Any others you'd like to consider?

Similar here: 
https://github.com/ensc/dietlibc/blob/master/lib/__v_printf.c#L188

I think unless we get counterexamples, this is all good.



Commits

  1. Make printf("%s", NULL) print "(null)" instead of crashing.

  2. Lock the extension during ALTER EXTENSION ADD/DROP.

  3. Add an assertion that we don't pass NULL to snprintf("%s").

  4. Fix broken logic for reporting PL/Python function names in errcontext.