summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBryan Henderson1996-11-24 05:58:57 +0000
committerBryan Henderson1996-11-24 05:58:57 +0000
commit02db1f58cbd154527c2418e7b480dd887c09d307 (patch)
tree58ff6a945fd773a423be42b33b06f8f6aabac738
parent9602150a04f64d0ea0d687c5693bf6b7ca3c759e (diff)
Fix access through null pointer info->rule_action. Thanks Darren King.
-rw-r--r--src/backend/rewrite/rewriteHandler.c79
1 files changed, 38 insertions, 41 deletions
diff --git a/src/backend/rewrite/rewriteHandler.c b/src/backend/rewrite/rewriteHandler.c
index ee61d293deb..e4a52992217 100644
--- a/src/backend/rewrite/rewriteHandler.c
+++ b/src/backend/rewrite/rewriteHandler.c
@@ -6,7 +6,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteHandler.c,v 1.1.1.1 1996/07/09 06:21:51 scrappy Exp $
+ * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteHandler.c,v 1.2 1996/11/24 05:58:57 bryanh Exp $
*
*-------------------------------------------------------------------------
*/
@@ -57,50 +57,47 @@ gatherRewriteMeta(Query *parsetree,
info->rt_index = rt_index;
info->event = event;
info->instead_flag = *instead_flag;
-/* info->rule_action = rule_action; this needs to be a copy here, I think! - jolly*/
info->rule_action = (Query*)copyObject(rule_action);
info->rule_qual = (Node*)copyObject(rule_qual);
- info->nothing = FALSE;
- info->action = info->rule_action->commandType;
if (info->rule_action == NULL) info->nothing = TRUE;
- if (info->nothing)
- return info;
-
- info->current_varno = rt_index;
- info->rt = parsetree->rtable;
- rt_length = length(info->rt);
- info->rt = append(info->rt, info->rule_action->rtable);
-
-
- info->new_varno = PRS2_NEW_VARNO + rt_length;
- OffsetVarNodes(info->rule_action->qual, rt_length);
- OffsetVarNodes((Node*)info->rule_action->targetList, rt_length);
- OffsetVarNodes(info->rule_qual, rt_length);
- ChangeVarNodes((Node*)info->rule_action->qual,
- PRS2_CURRENT_VARNO+rt_length, rt_index);
- ChangeVarNodes((Node*)info->rule_action->targetList,
- PRS2_CURRENT_VARNO+rt_length, rt_index);
- ChangeVarNodes(info->rule_qual, PRS2_CURRENT_VARNO+rt_length, rt_index);
-
- /*
- * bug here about replace CURRENT -- sort of
- * replace current is deprecated now so this code shouldn't really
- * need to be so clutzy but.....
- */
- if (info->action != CMD_SELECT) { /* i.e update XXXXX */
- int new_result_reln = 0;
- result_reln = info->rule_action->resultRelation;
- switch (result_reln) {
- case PRS2_CURRENT_VARNO: new_result_reln = rt_index;
- break;
- case PRS2_NEW_VARNO: /* XXX */
- default:
- new_result_reln = result_reln + rt_length;
- break;
- }
- info->rule_action->resultRelation = new_result_reln;
+ else {
+ info->nothing = FALSE;
+ info->action = info->rule_action->commandType;
+ info->current_varno = rt_index;
+ info->rt = parsetree->rtable;
+ rt_length = length(info->rt);
+ info->rt = append(info->rt, info->rule_action->rtable);
+
+ info->new_varno = PRS2_NEW_VARNO + rt_length;
+ OffsetVarNodes(info->rule_action->qual, rt_length);
+ OffsetVarNodes((Node*)info->rule_action->targetList, rt_length);
+ OffsetVarNodes(info->rule_qual, rt_length);
+ ChangeVarNodes((Node*)info->rule_action->qual,
+ PRS2_CURRENT_VARNO+rt_length, rt_index);
+ ChangeVarNodes((Node*)info->rule_action->targetList,
+ PRS2_CURRENT_VARNO+rt_length, rt_index);
+ ChangeVarNodes(info->rule_qual,
+ PRS2_CURRENT_VARNO+rt_length, rt_index);
+
+ /*
+ * bug here about replace CURRENT -- sort of
+ * replace current is deprecated now so this code shouldn't really
+ * need to be so clutzy but.....
+ */
+ if (info->action != CMD_SELECT) { /* i.e update XXXXX */
+ int new_result_reln = 0;
+ result_reln = info->rule_action->resultRelation;
+ switch (result_reln) {
+ case PRS2_CURRENT_VARNO: new_result_reln = rt_index;
+ break;
+ case PRS2_NEW_VARNO: /* XXX */
+ default:
+ new_result_reln = result_reln + rt_length;
+ break;
+ }
+ info->rule_action->resultRelation = new_result_reln;
+ }
}
-
return info;
}