diff --git a/src/language.yacc b/src/language.yacc index 168d7588237b7d1d274da9ddb37a97b145b66779..c33df314e5a1dbb8c247c0c54e5c15a51ec8e2e4 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 c17889f13ff10a00d5d1b9ed8587bf3944ae164b..ea284d53d564a01d64d8954cdf7e7d345069cc16 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;