summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Mark Bell <jmb@netsurf-browser.org>2009-01-22 00:18:32 +0000
committerJohn Mark Bell <jmb@netsurf-browser.org>2009-01-22 00:18:32 +0000
commit5a5f84496e16117e8b5b992dcb07e51e637890cb (patch)
tree5d9639cc12796fea8f7e1e8510cdff733d68b30f /src
parentb44aba0e3e85a414c0b5244270b069829d971a5b (diff)
downloadlibcss-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.c16
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;