Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 02db1f5

Browse files
author
Bryan Henderson
committed
Fix access through null pointer info->rule_action. Thanks Darren King.
1 parent 9602150 commit 02db1f5

File tree

1 file changed

+38
-41
lines changed

1 file changed

+38
-41
lines changed

src/backend/rewrite/rewriteHandler.c

Lines changed: 38 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*
77
*
88
* IDENTIFICATION
9-
* $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteHandler.c,v 1.1.1.1 1996/07/09 06:21:51 scrappy Exp $
9+
* $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteHandler.c,v 1.2 1996/11/24 05:58:57 bryanh Exp $
1010
*
1111
*-------------------------------------------------------------------------
1212
*/
@@ -57,50 +57,47 @@ gatherRewriteMeta(Query *parsetree,
5757
info->rt_index = rt_index;
5858
info->event = event;
5959
info->instead_flag = *instead_flag;
60-
/* info->rule_action = rule_action; this needs to be a copy here, I think! - jolly*/
6160
info->rule_action = (Query*)copyObject(rule_action);
6261
info->rule_qual = (Node*)copyObject(rule_qual);
63-
info->nothing = FALSE;
64-
info->action = info->rule_action->commandType;
6562
if (info->rule_action == NULL) info->nothing = TRUE;
66-
if (info->nothing)
67-
return info;
68-
69-
info->current_varno = rt_index;
70-
info->rt = parsetree->rtable;
71-
rt_length = length(info->rt);
72-
info->rt = append(info->rt, info->rule_action->rtable);
73-
74-
75-
info->new_varno = PRS2_NEW_VARNO + rt_length;
76-
OffsetVarNodes(info->rule_action->qual, rt_length);
77-
OffsetVarNodes((Node*)info->rule_action->targetList, rt_length);
78-
OffsetVarNodes(info->rule_qual, rt_length);
79-
ChangeVarNodes((Node*)info->rule_action->qual,
80-
PRS2_CURRENT_VARNO+rt_length, rt_index);
81-
ChangeVarNodes((Node*)info->rule_action->targetList,
82-
PRS2_CURRENT_VARNO+rt_length, rt_index);
83-
ChangeVarNodes(info->rule_qual, PRS2_CURRENT_VARNO+rt_length, rt_index);
84-
85-
/*
86-
* bug here about replace CURRENT -- sort of
87-
* replace current is deprecated now so this code shouldn't really
88-
* need to be so clutzy but.....
89-
*/
90-
if (info->action != CMD_SELECT) { /* i.e update XXXXX */
91-
int new_result_reln = 0;
92-
result_reln = info->rule_action->resultRelation;
93-
switch (result_reln) {
94-
case PRS2_CURRENT_VARNO: new_result_reln = rt_index;
95-
break;
96-
case PRS2_NEW_VARNO: /* XXX */
97-
default:
98-
new_result_reln = result_reln + rt_length;
99-
break;
100-
}
101-
info->rule_action->resultRelation = new_result_reln;
63+
else {
64+
info->nothing = FALSE;
65+
info->action = info->rule_action->commandType;
66+
info->current_varno = rt_index;
67+
info->rt = parsetree->rtable;
68+
rt_length = length(info->rt);
69+
info->rt = append(info->rt, info->rule_action->rtable);
70+
71+
info->new_varno = PRS2_NEW_VARNO + rt_length;
72+
OffsetVarNodes(info->rule_action->qual, rt_length);
73+
OffsetVarNodes((Node*)info->rule_action->targetList, rt_length);
74+
OffsetVarNodes(info->rule_qual, rt_length);
75+
ChangeVarNodes((Node*)info->rule_action->qual,
76+
PRS2_CURRENT_VARNO+rt_length, rt_index);
77+
ChangeVarNodes((Node*)info->rule_action->targetList,
78+
PRS2_CURRENT_VARNO+rt_length, rt_index);
79+
ChangeVarNodes(info->rule_qual,
80+
PRS2_CURRENT_VARNO+rt_length, rt_index);
81+
82+
/*
83+
* bug here about replace CURRENT -- sort of
84+
* replace current is deprecated now so this code shouldn't really
85+
* need to be so clutzy but.....
86+
*/
87+
if (info->action != CMD_SELECT) { /* i.e update XXXXX */
88+
int new_result_reln = 0;
89+
result_reln = info->rule_action->resultRelation;
90+
switch (result_reln) {
91+
case PRS2_CURRENT_VARNO: new_result_reln = rt_index;
92+
break;
93+
case PRS2_NEW_VARNO: /* XXX */
94+
default:
95+
new_result_reln = result_reln + rt_length;
96+
break;
97+
}
98+
info->rule_action->resultRelation = new_result_reln;
99+
}
102100
}
103-
104101
return info;
105102
}
106103

0 commit comments

Comments
 (0)