]> granicus.if.org Git - postgresql/commitdiff
Don't trash input list structure in does_not_exist_skipping().
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 8 Nov 2012 16:34:32 +0000 (11:34 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 8 Nov 2012 16:34:32 +0000 (11:34 -0500)
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.

src/backend/commands/dropcmds.c

index 25c127b252ae55f41b41308da1a3c51853a8c0b8..e4c17bd2bc72f850705d158badcc35451ce9fde2 100644 (file)
@@ -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: