]> granicus.if.org Git - postgresql/commitdiff
Copy the relation name for error reporting in WCOs
authorStephen Frost <sfrost@snowman.net>
Fri, 24 Apr 2015 13:38:10 +0000 (09:38 -0400)
committerStephen Frost <sfrost@snowman.net>
Fri, 24 Apr 2015 13:38:10 +0000 (09:38 -0400)
In get_row_security_policies(), we need to make a copy of the relation
name when building the WithCheckOptions structure, since
RelationGetRelationName just returns a pointer into the local Relation
structure.  The relation name in the WCO structure is only used for
error reporting.

Pointed out by Robert and Christian Ullrich, who noted that the
buildfarm members with -DCLOBBER_CACHE_ALWAYS were failing.

src/backend/rewrite/rowsecurity.c

index bad166ac3ad1af202ff1db28b5206de8dedff27b..e060353bff8aa4b37481ba2a3e97e8d5fb527c23 100644 (file)
@@ -259,7 +259,7 @@ get_row_security_policies(Query* root, RangeTblEntry* rte, int rt_index,
                        WithCheckOption    *wco;
 
                        wco = (WithCheckOption *) makeNode(WithCheckOption);
-                       wco->viewname = RelationGetRelationName(rel);
+                       wco->viewname = pstrdup(RelationGetRelationName(rel));
                        wco->qual = (Node *) hook_with_check_expr_restrictive;
                        wco->cascaded = false;
                        *withCheckOptions = lappend(*withCheckOptions, wco);
@@ -274,7 +274,7 @@ get_row_security_policies(Query* root, RangeTblEntry* rte, int rt_index,
                        WithCheckOption    *wco;
 
                        wco = (WithCheckOption *) makeNode(WithCheckOption);
-                       wco->viewname = RelationGetRelationName(rel);
+                       wco->viewname = pstrdup(RelationGetRelationName(rel));
                        wco->qual = (Node *) rowsec_with_check_expr;
                        wco->cascaded = false;
                        *withCheckOptions = lappend(*withCheckOptions, wco);
@@ -285,7 +285,7 @@ get_row_security_policies(Query* root, RangeTblEntry* rte, int rt_index,
                        WithCheckOption    *wco;
 
                        wco = (WithCheckOption *) makeNode(WithCheckOption);
-                       wco->viewname = RelationGetRelationName(rel);
+                       wco->viewname = pstrdup(RelationGetRelationName(rel));
                        wco->qual = (Node *) hook_with_check_expr_permissive;
                        wco->cascaded = false;
                        *withCheckOptions = lappend(*withCheckOptions, wco);
@@ -303,7 +303,7 @@ get_row_security_policies(Query* root, RangeTblEntry* rte, int rt_index,
                        combined_qual_eval = makeBoolExpr(OR_EXPR, combined_quals, -1);
 
                        wco = (WithCheckOption *) makeNode(WithCheckOption);
-                       wco->viewname = RelationGetRelationName(rel);
+                       wco->viewname = pstrdup(RelationGetRelationName(rel));
                        wco->qual = (Node *) combined_qual_eval;
                        wco->cascaded = false;
                        *withCheckOptions = lappend(*withCheckOptions, wco);