pg_dump: fix crash on error

Started by Neil Conwayabout 21 years ago5 messagespatches
Jump to latest
#1Neil Conway
neilc@samurai.com

If pg_dump fails to connect to Postgres, it attempts to print an error
message in ConnectDatabase():

/* check to see that the backend connection was successfully made */
if (PQstatus(AH->connection) == CONNECTION_BAD)
die_horribly(AH, modulename,
"connection to database \"%s\" failed: %s",
dbname, PQerrorMessage(AH->connection));

But if no database is explicitly specified, `dbname' is NULL, and libc
is entitled to crash if you pass a NULL pointer to it for a %s
formatting sequence (it actually does crash on Solaris, for example --
per report from Omar Kilani).

Attached is a patch that fixes this by just removing `dbname' from the
error message, as PQerrorMessage() should provide enough information.

Barring any objections, I'll apply this to HEAD and back branches within
24 hours.

-Neil

Attachments:

pg_dump_null_pointer_printf-1.patchtext/x-patch; name=pg_dump_null_pointer_printf-1.patchDownload+4-4
#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Neil Conway (#1)
Re: pg_dump: fix crash on error

Neil Conway <neilc@samurai.com> writes:

If pg_dump fails to connect to Postgres, it attempts to print an error
message in ConnectDatabase():
...
But if no database is explicitly specified, `dbname' is NULL, and libc
is entitled to crash if you pass a NULL pointer to it for a %s
formatting sequence (it actually does crash on Solaris, for example --
per report from Omar Kilani).

[ scratches head... ] Did this code change recently? It's a tad hard
to believe that such a thing could have gone unnoticed for long.

regards, tom lane

#3Neil Conway
neilc@samurai.com
In reply to: Tom Lane (#2)
Re: pg_dump: fix crash on error

Tom Lane wrote:

[ scratches head... ] Did this code change recently? It's a tad hard
to believe that such a thing could have gone unnoticed for long.

Seems the problem was introduced here:

http://developer.postgresql.org/cvsweb.cgi/pgsql/src/bin/pg_dump/pg_backup_db.c.diff?r1=1.58;r2=1.59

(I could just revert the code to using PQdb(), but I don't think there's
a need to mention the database in the error message ourselves --
PQerrorMessage() should include that information if appropriate.)

-Neil

#4Tom Lane
tgl@sss.pgh.pa.us
In reply to: Neil Conway (#3)
Re: pg_dump: fix crash on error

Neil Conway <neilc@samurai.com> writes:

Tom Lane wrote:

[ scratches head... ] Did this code change recently? It's a tad hard
to believe that such a thing could have gone unnoticed for long.

Seems the problem was introduced here:
http://developer.postgresql.org/cvsweb.cgi/pgsql/src/bin/pg_dump/pg_backup_db.c.diff?r1=1.58;r2=1.59

Oh dear, that makes it my fault :-(

(I could just revert the code to using PQdb(), but I don't think there's
a need to mention the database in the error message ourselves --
PQerrorMessage() should include that information if appropriate.)

I'd go with reverting it to using PQdb, myself. Looks like I got bit by
the perennial mantra: premature optimization is the root of all evil.

regards, tom lane

#5Neil Conway
neilc@samurai.com
In reply to: Tom Lane (#4)
Re: pg_dump: fix crash on error

Tom Lane wrote:

I'd go with reverting it to using PQdb, myself.

Fair enough; reverted to using PQdb(), and applied to HEAD and
REL8_0_STABLE.

-Neil