postgres.git / summary / log / commit / refs

commit    4dbe1969079672064777e71c3fc981abbf55e207
Author:   Tom Lane <tgl@sss.pgh.pa.us>
Date:     Sun Feb 10 00:45:38 2019 +0000
First released in: 12.0, 9.4.21, 9.5.16, 9.6.12, 10.7, 11.2

    Repair unsafe/unportable snprintf usage in pg_restore.
    
    warn_or_exit_horribly() was blithely passing a potentially-NULL
    string pointer to a %s format specifier.  That works (at least
    to the extent of not crashing) on some platforms, but not all,
    and since we switched to our own snprintf.c it doesn't work
    for us anywhere.
    
    Of the three string fields being handled this way here, I think
    that only "owner" is supposed to be nullable ... but considering
    that this is error-reporting code, it has very little business
    assuming anything, so put in defenses for all three.
    
    Per a crash observed on buildfarm member crake and then
    reproduced here.  Because of the portability aspect,
    back-patch to all supported versions.


src/bin/pg_dump/pg_backup_archiver.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c index a015c664598..8b55f5952c3 100644 --- a/src/bin/pg_dump/pg_backup_archiver.c +++ b/src/bin/pg_dump/pg_backup_archiver.c @@ -1793,8 +1793,11 @@ warn_or_exit_horribly(ArchiveHandle *AH, { write_msg(modulename, "Error from TOC entry %d; %u %u %s %s %s\n", AH->currentTE->dumpId, - AH->currentTE->catalogId.tableoid, AH->currentTE->catalogId.oid, - AH->currentTE->desc, AH->currentTE->tag, AH->currentTE->owner); + AH->currentTE->catalogId.tableoid, + AH->currentTE->catalogId.oid, + AH->currentTE->desc ? AH->currentTE->desc : "(no desc)", + AH->currentTE->tag ? AH->currentTE->tag : "(no tag)", + AH->currentTE->owner ? AH->currentTE->owner : "(no owner)"); } AH->lastErrorStage = AH->stage; AH->lastErrorTE = AH->currentTE; [parent: a391ff3c3d41]