Re: BUG #17098: Assert failed on composing an error message when adding a type to an extension being dropped
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: exclusion@gmail.com
Cc: pgsql-bugs@lists.postgresql.org
Date: 2021-07-11T15:28:58Z
Lists: pgsql-bugs, pgsql-hackers
PG Bug reporting form <noreply@postgresql.org> writes: > When trying to add to an extension a type that is already exists in the > extension while the extension is being dropped I get a failed assertion with > the following stack: I think that the root issue here is that ExecAlterExtensionContentsStmt fails to acquire any sort of lock on the extension. Considering that it *does* lock the object to be added/dropped, that's a rather glaring oversight. Fortunately it seems easily fixable ... though I wonder how many other similar oversights we have. However, that root issue is converted from a relatively minor bug into a server crash because snprintf.c treats a NULL pointer passed to %s as a crash-worthy error. I have advocated for that behavior in the past, but I'm starting to wonder if it wouldn't be wiser to change over to the glibc-ish behavior of printing "(null)" or the like. It seems like we've long since found all the interesting bugs that the assert-or-crash behavior could reveal, and now we're down to weird corner cases where its main effect is to weaken our robustness. Thoughts? regards, tom lane
Commits
-
Make printf("%s", NULL) print "(null)" instead of crashing.
- c0a6f83deba9 13.4 landed
- 9329b923542f 11.13 landed
- 89ad14cd7870 14.0 landed
- 7e09b504d023 9.6.23 landed
- 5a435289d1a8 10.18 landed
- 4c8a14e8d993 12.8 landed
- 3779ac62d709 15.0 landed
-
Lock the extension during ALTER EXTENSION ADD/DROP.
- 92340ba5a795 12.8 landed
- 734be249d2c8 9.6.23 landed
- 6bd9ae173d37 11.13 landed
- 69dfc36fd54d 14.0 landed
- 626731db26ae 15.0 landed
- 1d49c888755b 10.18 landed
- 1c612bc98ec3 13.4 landed
-
Add an assertion that we don't pass NULL to snprintf("%s").
- 0c62356cc877 11.0 cited
-
Fix broken logic for reporting PL/Python function names in errcontext.
- e748e902def4 11.0 cited