From 584ed916abcc1e7b51382128c0218d025a710d5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Zab=C5=82ocki?= Date: Wed, 17 May 2017 22:03:43 +0200 Subject: [PATCH] fix(lexer): Prevent deadlock with unclosed tag --- Sources/Lexer.swift | 1 + Tests/StencilTests/LexerSpec.swift | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/Sources/Lexer.swift b/Sources/Lexer.swift index e7fcd7c..8e3fa33 100644 --- a/Sources/Lexer.swift +++ b/Sources/Lexer.swift @@ -90,6 +90,7 @@ class Scanner { index = content.index(after: index) } + content = "" return "" } diff --git a/Tests/StencilTests/LexerSpec.swift b/Tests/StencilTests/LexerSpec.swift index 8cb83c0..66667ba 100644 --- a/Tests/StencilTests/LexerSpec.swift +++ b/Tests/StencilTests/LexerSpec.swift @@ -16,7 +16,7 @@ func testLexer() { let lexer = Lexer(templateString: "{# Comment #}") let tokens = lexer.tokenize() - try expect(tokens.count) == (1) + try expect(tokens.count) == 1 try expect(tokens.first) == .comment(value: "Comment") } @@ -28,6 +28,14 @@ func testLexer() { try expect(tokens.first) == .variable(value: "Variable") } + $0.it("can tokenize unclosed tag by ignoring it") { + let lexer = Lexer(templateString: "{{ thing") + let tokens = lexer.tokenize() + + try expect(tokens.count) == 1 + try expect(tokens.first) == .text(value: "") + } + $0.it("can tokenize a mixture of content") { let lexer = Lexer(templateString: "My name is {{ name }}.") let tokens = lexer.tokenize()