Skip to content

Commit fdde764

Browse files
committed
Syntax errors in jinja
1 parent 25555a8 commit fdde764

File tree

2 files changed

+37
-4
lines changed

2 files changed

+37
-4
lines changed

html5lib/html5parser.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ def mainLoop(self):
176176
for token in self.normalizedTokens():
177177
new_token = token
178178
while new_token is not None:
179+
log.debug(u"Token {} Phase = {}".format(new_token, self.phase))
179180
currentNode = self.tree.openElements[-1] if self.tree.openElements else None
180181
currentNodeNamespace = currentNode.namespace if currentNode else None
181182
currentNodeName = currentNode.name if currentNode else None
@@ -421,6 +422,7 @@ def resetInsertionMode(self):
421422
new_phase = self.phases["inBody"]
422423
break
423424

425+
log.debug(u"Changing phase to {}".format(new_phase))
424426
self.phase = new_phase
425427

426428
def parseRCDataRawtext(self, token, contentType):
@@ -438,6 +440,7 @@ def parseRCDataRawtext(self, token, contentType):
438440

439441
self.originalPhase = self.phase
440442

443+
log.debug(u"Changing phase to text")
441444
self.phase = self.phases["text"]
442445

443446

@@ -825,6 +828,8 @@ def startTagOther(self, token):
825828
def endTagHead(self, token):
826829
node = self.parser.tree.openElements.pop()
827830
assert node.name == "head", "Expected head got %s" % node.name
831+
log = logging.getLogger(u"html5lib")
832+
log.debug(u"Switching phase to afterHead")
828833
self.parser.phase = self.parser.phases["afterHead"]
829834

830835
def endTagHtmlBodyBr(self, token):
@@ -835,6 +840,8 @@ def endTagOther(self, token):
835840
self.parser.parseError("unexpected-end-tag", {"name": token["name"]})
836841

837842
def anythingElse(self):
843+
log = logging.getLogger(u"html5lib")
844+
log.debug(u"Implied end head tag")
838845
self.endTagHead(impliedTagToken("head"))
839846

840847
# XXX If we implement a parser for which scripting is disabled we need to
@@ -905,6 +912,8 @@ def endTagOther(self, token):
905912

906913
def anythingElse(self):
907914
self.tree.insertElement(impliedTagToken("body", "StartTag"))
915+
log = logging.getLogger(u"html5lib")
916+
log.debug(u"Changing phase to body")
908917
self.parser.phase = self.parser.phases["inBody"]
909918
self.parser.framesetOK = True
910919

html5lib/tokenizer.py

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,17 @@ def jinjaStatementEndState(self):
324324
"selfClosing": False
325325
})
326326
self.state = self.dataState
327+
elif data is EOF:
328+
self.tokenQueue.append({"type": tokenTypes["ParseError"], "data":
329+
"expected-jinja-statement-closing-tag-but-got-eof",
330+
"datavars": {"data": data}})
331+
self.state = self.dataState
332+
else:
333+
self.tokenQueue.append({"type": tokenTypes["ParseError"], "data":
334+
"expected-jinja-statement-closing-tag-but-got-char",
335+
"datavars": {"data": data}})
336+
self.stream.unget(data)
337+
self.state = self.bogusCommentState
327338

328339
#self.state = self.dataState
329340
return True
@@ -339,6 +350,17 @@ def jinjaVariableEndState(self):
339350
"selfClosing": False
340351
})
341352
self.state = self.dataState
353+
elif data is EOF:
354+
self.tokenQueue.append({"type": tokenTypes["ParseError"], "data":
355+
"expected-jinja-variable-closing-tag-but-got-eof",
356+
"datavars": {"data": data}})
357+
self.state = self.dataState
358+
else:
359+
self.tokenQueue.append({"type": tokenTypes["ParseError"], "data":
360+
"expected-jinja-variable-closing-tag-but-got-char",
361+
"datavars": {"data": data}})
362+
self.stream.unget(data)
363+
self.state = self.bogusCommentState
342364

343365
#self.state = self.dataState
344366
return True
@@ -349,8 +371,9 @@ def jinjaStatementState(self):
349371
if data == "%":
350372
self.state = self.jinjaStatementEndState
351373
elif data is EOF:
352-
# Tokenization ends.
353-
return False
374+
self.tokenQueue.append({"type": tokenTypes["ParseError"], "data":
375+
"eof-in-jinja-statement"})
376+
self.state = self.dataState
354377
else:
355378
chars = self.stream.charsUntil(("%", "\u0000"))
356379
self.tokenQueue.append({"type": tokenTypes["JinjaStatementTag"], "data":
@@ -364,8 +387,9 @@ def jinjaVariableState(self):
364387
if data == "}":
365388
self.state = self.jinjaVariableEndState
366389
elif data is EOF:
367-
# Tokenization ends.
368-
return False
390+
self.tokenQueue.append({"type": tokenTypes["ParseError"], "data":
391+
"eof-in-jinja-variable"})
392+
self.state = self.dataState
369393
else:
370394
chars = self.stream.charsUntil(("}", "\u0000"))
371395
self.tokenQueue.append({"type": tokenTypes["JinjaVariableTag"], "data":

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy