From 359dea2859c63e73c8f3f4d769e5cf1eda2a428d Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Fri, 16 Mar 2012 19:55:41 +0200 Subject: [PATCH] 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 --- src/bin/pg_dump/pg_dump.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) 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"); }