diff --git a/CHANGELOG.md b/CHANGELOG.md index e0d6a05..2e08c4a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,9 @@ _None_ ### Bug Fixes -_None_ +- Fix for crashing range indexes when variable length is 1. + [Ɓukasz Kuczborski](https://github.com/lkuczborski) + [#306](https://github.com/stencilproject/Stencil/pull/306) ### Internal Changes diff --git a/Sources/Variable.swift b/Sources/Variable.swift index 2da56d9..122fa4a 100644 --- a/Sources/Variable.swift +++ b/Sources/Variable.swift @@ -48,7 +48,7 @@ public struct Variable: Equatable, Resolvable { /// Resolve the variable in the given context public func resolve(_ context: Context) throws -> Any? { - if (variable.hasPrefix("'") && variable.hasSuffix("'")) || (variable.hasPrefix("\"") && variable.hasSuffix("\"")) { + if variable.count > 1 && ((variable.hasPrefix("'") && variable.hasSuffix("'")) || (variable.hasPrefix("\"") && variable.hasSuffix("\""))) { // String literal return String(variable[variable.index(after: variable.startIndex) ..< variable.index(before: variable.endIndex)]) } diff --git a/Tests/StencilTests/VariableSpec.swift b/Tests/StencilTests/VariableSpec.swift index 6445deb..e25da2e 100644 --- a/Tests/StencilTests/VariableSpec.swift +++ b/Tests/StencilTests/VariableSpec.swift @@ -63,13 +63,25 @@ final class VariableTests: XCTestCase { let result = try variable.resolve(self.context) as? String try expect(result) == "name" } + + it("can resolve a string literal with one double quote") { + let variable = Variable("\"") + let result = try variable.resolve(self.context) as? String + try expect(result).to.beNil() + } it("can resolve a string literal with single quotes") { let variable = Variable("'name'") let result = try variable.resolve(self.context) as? String try expect(result) == "name" } - + + it("can resolve a string literal with one single quote") { + let variable = Variable("'") + let result = try variable.resolve(self.context) as? String + try expect(result).to.beNil() + } + it("can resolve an integer literal") { let variable = Variable("5") let result = try variable.resolve(self.context) as? Int