From edaf88e0ff43eb88d8517a9e5538f6052eda92c6 Mon Sep 17 00:00:00 2001 From: Teja Mupparti Date: Mon, 21 Nov 2022 16:58:06 -0800 Subject: [PATCH] Fix the dangling pointer bug in get_merged_argument_list() --- src/backend/distributed/deparser/ruleutils_14.c | 3 ++- src/backend/distributed/deparser/ruleutils_15.c | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/backend/distributed/deparser/ruleutils_14.c b/src/backend/distributed/deparser/ruleutils_14.c index 08615e61c..79fae9ac0 100644 --- a/src/backend/distributed/deparser/ruleutils_14.c +++ b/src/backend/distributed/deparser/ruleutils_14.c @@ -482,7 +482,7 @@ get_merged_argument_list(CallStmt *stmt, List **mergedNamedArgList, Oid functionOid = stmt->funcexpr->funcid; List *namedArgList = NIL; List *finalArgumentList = NIL; - Oid finalArgTypes[FUNC_MAX_ARGS]; + Oid *finalArgTypes; Oid *argTypes = NULL; char *argModes = NULL; char **argNames = NULL; @@ -519,6 +519,7 @@ get_merged_argument_list(CallStmt *stmt, List **mergedNamedArgList, /* Remove the duplicate INOUT counting */ numberOfArgs = numberOfArgs - totalInoutArgs; + finalArgTypes = palloc0(sizeof(Oid) * numberOfArgs); ListCell *inArgCell = list_head(stmt->funcexpr->args); ListCell *outArgCell = list_head(stmt->outargs); diff --git a/src/backend/distributed/deparser/ruleutils_15.c b/src/backend/distributed/deparser/ruleutils_15.c index 103c515bd..1dae9f27d 100644 --- a/src/backend/distributed/deparser/ruleutils_15.c +++ b/src/backend/distributed/deparser/ruleutils_15.c @@ -491,7 +491,7 @@ get_merged_argument_list(CallStmt *stmt, List **mergedNamedArgList, Oid functionOid = stmt->funcexpr->funcid; List *namedArgList = NIL; List *finalArgumentList = NIL; - Oid finalArgTypes[FUNC_MAX_ARGS]; + Oid *finalArgTypes; Oid *argTypes = NULL; char *argModes = NULL; char **argNames = NULL; @@ -528,6 +528,7 @@ get_merged_argument_list(CallStmt *stmt, List **mergedNamedArgList, /* Remove the duplicate INOUT counting */ numberOfArgs = numberOfArgs - totalInoutArgs; + finalArgTypes = palloc0(sizeof(Oid) * numberOfArgs); ListCell *inArgCell = list_head(stmt->funcexpr->args); ListCell *outArgCell = list_head(stmt->outargs); @@ -610,6 +611,7 @@ get_merged_argument_list(CallStmt *stmt, List **mergedNamedArgList, return true; } + /* * pg_get_rule_expr deparses an expression and returns the result as a string. */