summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/parse/parse.c16
-rw-r--r--test/data/parse2/INDEX1
-rw-r--r--test/data/parse2/eof.dat304
3 files changed, 319 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;
diff --git a/test/data/parse2/INDEX b/test/data/parse2/INDEX
index 49d6e21..9b2c5a5 100644
--- a/test/data/parse2/INDEX
+++ b/test/data/parse2/INDEX
@@ -3,6 +3,7 @@
# Test Description
tests1.dat Basic tests
+eof.dat Unexpected EOF tests
comments.dat Comment tests
illegal-values.dat Illegal value tests
malformed-declarations.dat Malformed declaration tests
diff --git a/test/data/parse2/eof.dat b/test/data/parse2/eof.dat
new file mode 100644
index 0000000..e2c8e6b
--- /dev/null
+++ b/test/data/parse2/eof.dat
@@ -0,0 +1,304 @@
+#data
+
+#errors
+#expected
+#reset
+
+#data
+<!--
+#errors
+#expected
+#reset
+
+#data
+-->
+#errors
+#expected
+#reset
+
+#data
+f
+#errors
+#expected
+#reset
+
+#data
+f
+#errors
+#expected
+#reset
+
+#data
+f{
+#errors
+#expected
+| f
+#reset
+
+#data
+f{
+#errors
+#expected
+| f
+#reset
+
+#data
+f{;
+#errors
+#expected
+| f
+#reset
+
+#data
+f{ ;
+#errors
+#expected
+| f
+#reset
+
+#data
+f{;
+#errors
+#expected
+| f
+#reset
+
+#data
+f{g
+#errors
+#expected
+| f
+#reset
+
+#data
+f{g
+#errors
+#expected
+| f
+#reset
+
+#data
+f{g:
+#errors
+#expected
+| f
+#reset
+
+#data
+f{g :
+#errors
+#expected
+| f
+#reset
+
+#data
+f{g:
+#errors
+#expected
+| f
+#reset
+
+#data
+f{g:h
+#errors
+#expected
+| f
+#reset
+
+#data
+f{clear:both;
+#errors
+#expected
+| f
+| clear: both
+#reset
+
+#data
+f{clear:both}
+#errors
+#expected
+| f
+| clear: both
+#reset
+
+#data
+@f
+#errors
+#expected
+#reset
+
+#data
+@f
+#errors
+#expected
+#reset
+
+#data
+@f{
+#errors
+#expected
+#reset
+
+#data
+@f{
+#errors
+#expected
+#reset
+
+#data
+@f{{
+#errors
+#expected
+#reset
+
+#data
+@f{@g
+#errors
+#expected
+#reset
+
+#data
+@f{;
+#errors
+#expected
+#reset
+
+#data
+@f{}
+#errors
+#expected
+#reset
+
+#data
+@f;
+#errors
+#expected
+#reset
+
+#data
+l(
+#errors
+#expected
+#reset
+
+#data
+l (
+#errors
+#expected
+#reset
+
+#data
+l(
+#errors
+#expected
+#reset
+
+#data
+l(m
+#errors
+#expected
+#reset
+
+#data
+l(m
+#errors
+#expected
+#reset
+
+#data
+l(m)
+#errors
+#expected
+#reset
+
+#data
+l(m)
+#errors
+#expected
+#reset
+
+#data
+(
+#errors
+#expected
+#reset
+
+#data
+(
+#errors
+#expected
+#reset
+
+#data
+(
+#errors
+#expected
+#reset
+
+#data
+(m
+#errors
+#expected
+#reset
+
+#data
+( m
+#errors
+#expected
+#reset
+
+#data
+(m
+#errors
+#expected
+#reset
+
+#data
+(m)
+#errors
+#expected
+#reset
+
+#data
+[
+#errors
+#expected
+#reset
+
+#data
+[
+#errors
+#expected
+#reset
+
+#data
+[
+#errors
+#expected
+#reset
+
+#data
+[m
+#errors
+#expected
+#reset
+
+#data
+[ m
+#errors
+#expected
+#reset
+
+#data
+[m
+#errors
+#expected
+#reset
+
+#data
+[m]
+#errors
+#expected
+#reset
+
+