aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2012-11-08 11:34:32 -0500
committerTom Lane <tgl@sss.pgh.pa.us>2012-11-08 11:34:32 -0500
commit75af5ae9c017d70531bd49178adfd3103cd40a76 (patch)
treeac0cec9cbc556d0d8f72fe78c4ca231a80849289
parenta9dad56441e4bc5d20c34bd56daf8e72df1b22d3 (diff)
downloadpostgresql-75af5ae9c017d70531bd49178adfd3103cd40a76.tar.gz
postgresql-75af5ae9c017d70531bd49178adfd3103cd40a76.zip
Don't trash input list structure in does_not_exist_skipping().
The trigger and rule cases need to split up the input name list, but they mustn't corrupt the passed-in data structure, since it could be part of a cached utility-statement parsetree. Per bug #7641.
-rw-r--r--src/backend/commands/dropcmds.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/backend/commands/dropcmds.c b/src/backend/commands/dropcmds.c
index 25c127b252a..e4c17bd2bc7 100644
--- a/src/backend/commands/dropcmds.c
+++ b/src/backend/commands/dropcmds.c
@@ -203,7 +203,7 @@ does_not_exist_skipping(ObjectType objtype, List *objname, List *objargs)
case OBJECT_TRIGGER:
msg = gettext_noop("trigger \"%s\" for table \"%s\" does not exist, skipping");
name = strVal(llast(objname));
- args = NameListToString(list_truncate(objname,
+ args = NameListToString(list_truncate(list_copy(objname),
list_length(objname) - 1));
break;
case OBJECT_EVENT_TRIGGER:
@@ -213,7 +213,7 @@ does_not_exist_skipping(ObjectType objtype, List *objname, List *objargs)
case OBJECT_RULE:
msg = gettext_noop("rule \"%s\" for relation \"%s\" does not exist, skipping");
name = strVal(llast(objname));
- args = NameListToString(list_truncate(objname,
+ args = NameListToString(list_truncate(list_copy(objname),
list_length(objname) - 1));
break;
case OBJECT_FDW: