postgres.git / summary / log / commit / refs

commit    d398119c19ef4d19e1d87d19e2cbbd67c4e63556
Author:   Tom Lane <tgl@sss.pgh.pa.us>
Date:     Thu Dec 06 20:08:44 2018 +0000

    Improve our response to invalid format strings, and detect more cases.
    
    Places that are testing for *printf failure ought to include the format
    string in their error reports, since bad-format-string is one of the
    more likely causes of such failure.  This both makes it easier to find
    and repair the mistake, and provides at least some useful info to the
    user who stumbles across such a problem.
    
    Also, tighten snprintf.c to report EINVAL for an invalid flag or
    final character in a format %-spec (including the case where the
    %-spec is missing a final character altogether).  This seems like
    better project policy, and it also allows removing an instruction
    or two from the hot code path.
    
    Back-patch the error reporting change in pvsnprintf, since it should be
    harmless and may be helpful; but not the snprintf.c change.
    
    Per discussion of bug #15511 from Ertuğrul Kahveci, which reported an
    invalid translated format string.  These changes don't fix that error,
    but they should improve matters next time we make such a mistake.
    
    Discussion: https://postgr.es/m/15511-1d8b6a0bc874112f@postgresql.org


src/common/psprintf.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/common/psprintf.c b/src/common/psprintf.c index 8ca6f9cea87..53cee23fa9f 100644 --- a/src/common/psprintf.c +++ b/src/common/psprintf.c @@ -129,9 +129,9 @@ pvsnprintf(char *buf, size_t len, const char *fmt, va_list args) if (nprinted < 0 && errno != 0 && errno != ENOMEM) { #ifndef FRONTEND - elog(ERROR, "vsnprintf failed: %m"); + elog(ERROR, "vsnprintf failed: %m with format string \"%s\"", fmt); #else - fprintf(stderr, "vsnprintf failed: %s\n", strerror(errno)); + fprintf(stderr, "vsnprintf failed: %m with format string \"%s\"\n", fmt); exit(EXIT_FAILURE); #endif } [parent: 4173a6180a16]