diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index 86d8a090624b24916df443275b763e936317313c..2b0a5ff81ad0be7984837d40792a2a1910b7ea41 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");
 	}