From 747cf5e859cd0f26c140c7687dca227f1e316781 Mon Sep 17 00:00:00 2001 From: John-Mark Bell Date: Mon, 23 May 2022 23:02:26 +0100 Subject: Parse/MQ: reject forbidden media-type identifiers "and" / "not" / "only" / "or" are forbidden, so must be rejected Add tests for these scenarios --- test/data/parse2/INDEX | 1 + test/data/parse2/dodgy-media-block.dat | 2 +- test/data/parse2/eof.dat | 30 ++++++++-------- test/data/parse2/mq.dat | 62 ++++++++++++++++++++++++++++++++++ test/dump.h | 4 ++- 5 files changed, 82 insertions(+), 17 deletions(-) create mode 100644 test/data/parse2/mq.dat (limited to 'test') diff --git a/test/data/parse2/INDEX b/test/data/parse2/INDEX index 331cf5c..e4a369c 100644 --- a/test/data/parse2/INDEX +++ b/test/data/parse2/INDEX @@ -16,6 +16,7 @@ border.dat Border property tests font.dat Font property tests list.dat List property tests margin.dat Margin property tests +mq.dat Media queries outline.dat Outline property tests overflow.dat Overflow property tests padding.dat Padding property tests diff --git a/test/data/parse2/dodgy-media-block.dat b/test/data/parse2/dodgy-media-block.dat index 61179c3..4b6c220 100644 --- a/test/data/parse2/dodgy-media-block.dat +++ b/test/data/parse2/dodgy-media-block.dat @@ -2,7 +2,7 @@ @media only screen { dodgy } .outer { top: 0px } #errors #expected -| @media +| @media 040 | dodgy | .outer | top: 0px diff --git a/test/data/parse2/eof.dat b/test/data/parse2/eof.dat index 2f238d7..7fc4ab7 100644 --- a/test/data/parse2/eof.dat +++ b/test/data/parse2/eof.dat @@ -180,49 +180,49 @@ f{clear:both} @media screen #errors #expected -| @media +| @media 040 #reset #data @media screen #errors #expected -| @media +| @media 040 #reset #data @media screen{ #errors #expected -| @media +| @media 040 #reset #data @media screen{ #errors #expected -| @media +| @media 040 #reset #data @media screen{{ #errors #expected -| @media +| @media 040 #reset #data @media screen{; #errors #expected -| @media +| @media 040 #reset #data @media screen{f #errors #expected -| @media +| @media 040 | f #reset @@ -230,7 +230,7 @@ f{clear:both} @media screen{f{ #errors #expected -| @media +| @media 040 | f #reset @@ -238,7 +238,7 @@ f{clear:both} @media screen{f{color #errors #expected -| @media +| @media 040 | f #reset @@ -246,7 +246,7 @@ f{clear:both} @media screen{f{color: #errors #expected -| @media +| @media 040 | f #reset @@ -254,7 +254,7 @@ f{clear:both} @media screen{f{color:blue #errors #expected -| @media +| @media 040 | f | color: #ff0000ff #reset @@ -263,7 +263,7 @@ f{clear:both} @media screen{f{color:blue; #errors #expected -| @media +| @media 040 | f | color: #ff0000ff #reset @@ -272,7 +272,7 @@ f{clear:both} @media screen{f{color:blue} #errors #expected -| @media +| @media 040 | f | color: #ff0000ff #reset @@ -281,7 +281,7 @@ f{clear:both} @media screen{f{color:blue;} #errors #expected -| @media +| @media 040 | f | color: #ff0000ff #reset @@ -290,7 +290,7 @@ f{clear:both} @media screen{f{color:blue;}} #errors #expected -| @media +| @media 040 | f | color: #ff0000ff #reset diff --git a/test/data/parse2/mq.dat b/test/data/parse2/mq.dat new file mode 100644 index 0000000..56f0833 --- /dev/null +++ b/test/data/parse2/mq.dat @@ -0,0 +1,62 @@ +#data +@media not +#errors +#expected +| @media not 3ff +#reset + +#data +@media and +#errors +#expected +| @media not 3ff +#reset + +#data +@media or +#errors +#expected +| @media not 3ff +#reset + +#data +@media only +#errors +#expected +| @media not 3ff +#reset + +#data +@media only not +#errors +#expected +| @media not 3ff +#reset + +#data +@media only only +#errors +#expected +| @media not 3ff +#reset + +#data +@media not not +#errors +#expected +| @media not 3ff +#reset + +#data +@media not only +#errors +#expected +| @media not 3ff +#reset + +#data +@media screen +#errors +#expected +| @media 040 +#reset diff --git a/test/dump.h b/test/dump.h index 79819e0..acfd8b0 100644 --- a/test/dump.h +++ b/test/dump.h @@ -131,7 +131,9 @@ void dump_rule_media(css_rule_media *s, char **buf, size_t *buflen) char *ptr = *buf; css_rule *rule; - ptr += sprintf(ptr, "| @media "); + ptr += sprintf(ptr, "| @media %s%03lx", + s->media->negate_type ? "not " : "", + s->media->type); /* \todo media list */ -- cgit v1.2.1