From: Peter Eisentraut Date: Fri, 16 Mar 2012 17:55:41 +0000 (+0200) Subject: pg_dump: Fix crash with invalid pg_cast row X-Git-Tag: REL9_2_BETA1~268 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=359dea2859c63e73c8f3f4d769e5cf1eda2a428d;p=postgresql pg_dump: Fix crash with invalid pg_cast row An invalid combination of pg_cast.castfunc and pg_cast.castmethod would result in a segmentation fault. Now it prints a warning. found by Coverity --- diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index 86d8a09062..2b0a5ff81a 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -9477,18 +9477,21 @@ dumpCast(Archive *fout, CastInfo *cast) appendPQExpBuffer(defqry, "WITH INOUT"); break; case COERCION_METHOD_FUNCTION: - { - char *fsig = format_function_signature(fout, funcInfo, true); + if (funcInfo) + { + char *fsig = format_function_signature(fout, funcInfo, true); - /* - * Always qualify the function name, in case it is not in - * pg_catalog schema (format_function_signature won't qualify it). - */ - appendPQExpBuffer(defqry, "WITH FUNCTION %s.%s", - fmtId(funcInfo->dobj.namespace->dobj.name), fsig); - free(fsig); + /* + * Always qualify the function name, in case it is not in + * pg_catalog schema (format_function_signature won't qualify it). + */ + appendPQExpBuffer(defqry, "WITH FUNCTION %s.%s", + fmtId(funcInfo->dobj.namespace->dobj.name), fsig); + free(fsig); + } + else + write_msg(NULL, "WARNING: bogus value in pg_cast.castfunc or pg_cast.castmethod field\n"); break; - } default: write_msg(NULL, "WARNING: bogus value in pg_cast.castmethod field\n"); }