postgres.git / summary / log / commit / refs

commit    ef9bf359369b4dfaceb859941c3898b5ce1decf6
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 e4060124fbb..1b4046d9667 100644 --- a/src/bin/pg_dump/pg_backup_archiver.c +++ b/src/bin/pg_dump/pg_backup_archiver.c @@ -1784,8 +1784,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: 027b5a300a9e]