diff options
author | John Mark Bell <jmb@netsurf-browser.org> | 2009-01-22 00:18:32 +0000 |
---|---|---|
committer | John Mark Bell <jmb@netsurf-browser.org> | 2009-01-22 00:18:32 +0000 |
commit | 5a5f84496e16117e8b5b992dcb07e51e637890cb (patch) | |
tree | 5d9639cc12796fea8f7e1e8510cdff733d68b30f /src | |
parent | b44aba0e3e85a414c0b5244270b069829d971a5b (diff) | |
download | libcss-5a5f84496e16117e8b5b992dcb07e51e637890cb.tar.gz libcss-5a5f84496e16117e8b5b992dcb07e51e637890cb.tar.bz2 |
Test data for EOF in strange places.
Fix EOF handling in the core parser.
svn path=/trunk/libcss/; revision=6164
Diffstat (limited to 'src')
-rw-r--r-- | src/parse/parse.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/parse/parse.c b/src/parse/parse.c index ac62f64..825f019 100644 --- a/src/parse/parse.c +++ b/src/parse/parse.c @@ -759,8 +759,9 @@ css_error parseStylesheet(css_parser *parser) css_error error; /* stylesheet -> CDO ws stylesheet - * CDC ws stylesheet - * statement ws stylesheet + * -> CDC ws stylesheet + * -> statement ws stylesheet + * -> */ while (1) { @@ -970,6 +971,9 @@ css_error parseRulesetEnd(css_parser *parser) if (error != CSS_OK) return error; + if (token->type == CSS_TOKEN_EOF) + break; + if (token->type != CSS_TOKEN_CHAR || token->ilower->len != 1 || token->ilower->data[0] != '}') { /* This should never happen, as FOLLOW(decl-list) @@ -1445,6 +1449,9 @@ css_error parseDeclList(css_parser *parser) if (error != CSS_OK) return error; + if (token->type == CSS_TOKEN_EOF) + return done(parser); + if (token->type != CSS_TOKEN_CHAR || token->ilower->len != 1) { /* Should never happen */ assert(0 && "Expected ; or }"); @@ -1596,6 +1603,8 @@ css_error parseValue1(css_parser *parser) return transition(parser, to, subsequent); } case AfterValue: + if (parser->parseError) + return done(parser); break; } @@ -1641,6 +1650,9 @@ css_error parseValue0(css_parser *parser) return transition(parser, to, subsequent); } case AfterValue: + if (parser->parseError) + return done(parser); + state->substate = Initial; break; |