fixed crash with unclosed string literal
authorMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Wed, 12 Dec 2007 15:05:44 +0000 (15:05 +0000)
committerMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Wed, 12 Dec 2007 15:05:44 +0000 (15:05 +0000)
[r18710]

parser.c
parsetest/shouldfail/unclosed_string.c [new file with mode: 0644]

index fdc2839..1550ee7 100644 (file)
--- a/parser.c
+++ b/parser.c
@@ -1264,6 +1264,10 @@ static initializer_t *parse_initializer(type_t *type)
 
        if(token.type != '{') {
                expression_t  *expression  = parse_assignment_expression();
+               if (expression->base.datatype == NULL) {
+                       /* something bad happens, don't produce further errors */
+                       return NULL;
+               }
                initializer_t *initializer = initializer_from_expression(type, expression);
                if(initializer == NULL) {
                        errorf(HERE,
@@ -2929,10 +2933,15 @@ static expression_t *create_invalid_expression(void)
        return expression;
 }
 
+/**
+ * Prints an error message if an expression was expected but not read
+ */
 static expression_t *expected_expression_error(void)
 {
-       errorf(HERE, "expected expression, got token '%K'", &token);
-
+       /* skip the error message if the error token was read */
+       if (token.type != T_ERROR) {
+               errorf(HERE, "expected expression, got token '%K'", &token);
+       }
        next_token();
 
        return create_invalid_expression();
diff --git a/parsetest/shouldfail/unclosed_string.c b/parsetest/shouldfail/unclosed_string.c
new file mode 100644 (file)
index 0000000..9ccb169
--- /dev/null
@@ -0,0 +1 @@
+char s[] = "unclosed string