From d86ad7f7aac25ae74d58b3a18a885bcd4be43b97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?= <grubba@grubba.org> Date: Tue, 9 Dec 2014 18:20:11 +0100 Subject: [PATCH] Compiler: Fixed some NULL-dereferences. expr4 nonterminals can be NULL for eg undeclared variables. Thanks to Jakub Krajewski <jkrajewski@opera.com> for the report. Fixes [Pike mailinglist 14323]. --- src/language.yacc | 10 +++++----- src/las.c | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/language.yacc b/src/language.yacc index 168d758823..c33df314e5 100644 --- a/src/language.yacc +++ b/src/language.yacc @@ -3589,14 +3589,14 @@ expr4: string | expr4 TOK_SAFE_START_INDEX line_number_info expr0 ']' { /* A[?X] to ((tmp=A) && tmp[X]) */ - if( $1->token == F_LOCAL ) + if( $1 && ($1->token == F_LOCAL) ) { $$=mknode(F_LAND, copy_node($1), mknode(F_INDEX, $1, $4)); } else { fix_type_field( $1 ); - if( $1->type ) + if( $1 && $1->type ) { int temporary; $1->type->refs++; @@ -3621,14 +3621,14 @@ expr4: string { /* A[?X..Y] to ((tmp=A) && tmp[X..Y]) */ node *range = mknode(':',$4,$6); - if( $1->token == F_LOCAL ) + if( $1 && ($1->token == F_LOCAL ) ) { $$ = mknode( F_LAND, copy_node($1), mknode(F_RANGE, $1, range) ); } else { fix_type_field( $1 ); - if( $1->type ) + if( $1 && $1->type ) { int temporary; $1->type->refs++; @@ -3735,7 +3735,7 @@ expr4: string { /* A?->B to ((tmp=A) && tmp->B) */ int temporary; - if( $1->token == F_LOCAL ) + if( $1 && ($1->token == F_LOCAL) ) { $$=mknode(F_LAND, copy_node($1), mknode(F_ARROW, $1, $4)); } diff --git a/src/las.c b/src/las.c index c17889f13f..ea284d53d5 100644 --- a/src/las.c +++ b/src/las.c @@ -3167,7 +3167,7 @@ void fix_type_field(node *n) struct pike_type *type_a, *type_b; struct pike_type *old_type; - if (n->type && !(n->node_info & OPT_TYPE_NOT_FIXED)) + if (!n || (n->type && !(n->node_info & OPT_TYPE_NOT_FIXED))) return; /* assume it is correct */ old_type = n->type; -- GitLab