glcpp: Fix segfault when validating macro redefinitions
authorChad Versace <chad.versace@intel.com>
Tue, 11 Jan 2011 00:55:17 +0000 (16:55 -0800)
committerChad Versace <chad.versace@intel.com>
Tue, 11 Jan 2011 01:28:24 +0000 (17:28 -0800)
In _token_list_equal_ignoring_space(token_list_t*, token_list_t*), add
a guard that prevents dereferncing a null token list.

This fixes test src/glsl/glcpp/tests/092-redefine-macro-error-2.c and
Bugzilla #32695.

src/glsl/glcpp/glcpp-parse.y

index 558ad0acacc3bcbb2a6ca746f0d1ea1c61b79d2c..148b0ffc7b45e0049f1e067cca2ae372416f2ace 100644 (file)
@@ -824,11 +824,32 @@ _token_list_trim_trailing_space (token_list_t *list)
        }
 }
 
+int
+_token_list_is_empty_ignoring_space (token_list_t *l)
+{
+       token_node_t *n;
+
+       if (l == NULL)
+               return 1;
+
+       n = l->head;
+       while (n != NULL && n->token->type == SPACE)
+               n = n->next;
+
+       return n == NULL;
+}
+
 int
 _token_list_equal_ignoring_space (token_list_t *a, token_list_t *b)
 {
        token_node_t *node_a, *node_b;
 
+       if (a == NULL || b == NULL) {
+               int a_empty = _token_list_is_empty_ignoring_space(a);
+               int b_empty = _token_list_is_empty_ignoring_space(b);
+               return a_empty == b_empty;
+       }
+
        node_a = a->head;
        node_b = b->head;