postgres.git / summary / log / commit / refs

commit    73668c590cf5c5719ac0d0481201fd4fd79454bb
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 a2e2f96986a..8f318ae4044 100644 --- a/src/bin/pg_dump/pg_backup_archiver.c +++ b/src/bin/pg_dump/pg_backup_archiver.c @@ -1796,8 +1796,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: dc0eb137fec2]