Re: C99 compliance for src/port/snprintf.c
Andres Freund <andres@anarazel.de>
From: Andres Freund <andres@anarazel.de>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Alvaro Herrera <alvherre@2ndquadrant.com>, Robert Haas <robertmhaas@gmail.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2018-08-15T21:52:17Z
Lists: pgsql-hackers
On 2018-08-15 14:05:29 -0400, Tom Lane wrote: > I wrote: > > Meh --- the hazards of back-patching seem to me to be more hypothetical > > than the benefits. Still, I seem to be in the minority, so I withdraw > > the proposal to back-patch. > > Actually, after digging around a bit, I'm excited about this again. > There are only a couple dozen places in our tree that pay any attention > to the result of (v)snprintf, but with the exception of psnprintf, > appendPQExpBufferVA, and one or two other places, *they're all assuming > C99 semantics*, and will fail to detect buffer overflow with the pre-C99 > behavior. > > Probably a lot of these are not live bugs because buffer overrun is > not ever going to occur in practice. But at least pg_upgrade and > pg_regress are constructing command strings including externally > supplied paths, so overrun doesn't seem impossible. If it happened, > they'd merrily proceed to execute a truncated command. > > If we don't backpatch the snprintf change, we're morally obliged to > back-patch some other fix for these places. At least one of them, > in plperl's pport.h, is not our code and so changing it seems like > a bad idea. > > Still want to argue for no backpatch? > > regards, tom lane > > PS: I also found a couple of places that are just wrong regardless > of semantics: they're checking overflow by "result > bufsize", not > "result >= bufsize". Will fix those in any case. I'm a bit confused. Why did you just backpatch this ~two hours after people objected to the idea? Even if it were during my current work hours, I don't even read mail that often if I'm hacking on something complicated. Greetings, Andres Freund
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Remove test for VA_ARGS, implied by C99.
- 8ecdefc261ab 12.0 landed
-
Introduce minimal C99 usage to verify compiler support.
- 143290efd079 12.0 landed
-
Require C99 (and thus MSCV 2013 upwards).
- d9dd406fe281 12.0 landed
-
Require a C99-compliant snprintf(), and remove related workarounds.
- e1d19c902e59 12.0 landed
-
Try to enable C99 in configure, but do not rely on it (yet).
- 86d78ef50e01 12.0 landed
-
Make snprintf.c follow the C99 standard for snprintf's result value.
- c2a2e331da17 9.6.11 landed
- 1811900b933c 10.6 landed
- 36147ec9f1e2 11.0 landed
- a57a6faf6011 9.3.25 landed
- 27c4b0899c0e 9.4.20 landed
- 8e9f229d2bf6 9.5.15 landed
- 805889d7d23f 12.0 landed
-
Clean up assorted misuses of snprintf()'s result value.
- d7ed4eea539d 11.0 landed
- d371efb39c33 9.4.20 landed
- c81062e8e12f 9.5.15 landed
- c182c1e0b895 9.6.11 landed
- 6101bc2f459c 10.6 landed
- 3531365de5e8 9.3.25 landed
- cc4f6b778618 12.0 landed