about summary refs log tree commit diff stats
path: root/src/css/cssparser.nim
diff options
context:
space:
mode:
authorbptato <nincsnevem662@gmail.com>2024-10-25 18:23:44 +0200
committerbptato <nincsnevem662@gmail.com>2024-10-25 18:27:00 +0200
commit28bf2922a33dd987a0a3095bc461589ef23ad37d (patch)
tree78a1e29d853d89205fba67fe99ec3177b9a1e104 /src/css/cssparser.nim
parent8b46e95183c3605432589efcc67844ff2d1dda45 (diff)
downloadchawan-28bf2922a33dd987a0a3095bc461589ef23ad37d.tar.gz
cssparser: do not accept invalid rules
This isn't exactly clear from the standard's wording, but e.g. *display:
inline must be discarded (because it incorrectly starts with a delim
token).
Diffstat (limited to 'src/css/cssparser.nim')
-rw-r--r--src/css/cssparser.nim5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/css/cssparser.nim b/src/css/cssparser.nim
index 8ed54bf2..ec14960e 100644
--- a/src/css/cssparser.nim
+++ b/src/css/cssparser.nim
@@ -647,6 +647,7 @@ proc consumeDeclarations(state: var CSSParseState): seq[CSSParsedItem] =
         discard state.consumeComponentValue()
 
 proc consumeDeclarations2(state: var CSSParseState): seq[CSSDeclaration] =
+  result = @[]
   while state.has():
     let t = state.consume()
     if t == cttWhitespace or t == cttSemicolon:
@@ -655,7 +656,7 @@ proc consumeDeclarations2(state: var CSSParseState): seq[CSSDeclaration] =
       state.reconsume()
       discard state.consumeAtRule()
     elif t == cttIdent:
-      var tempList: seq[CSSParsedItem]
+      var tempList: seq[CSSParsedItem] = @[]
       let tok = CSSToken(t)
       tempList.add(tok)
       while state.has() and state.peek() != cttSemicolon:
@@ -666,7 +667,7 @@ proc consumeDeclarations2(state: var CSSParseState): seq[CSSDeclaration] =
         result.add(decl.get)
     else:
       state.reconsume()
-      if state.peek() != cttSemicolon:
+      while state.has() and state.peek() != cttSemicolon:
         discard state.consumeComponentValue()
 
 proc consumeListOfRules(state: var CSSParseState; topLevel = false):