diff --git a/Sources/TOMLDecoder/Parsing/Parser.swift b/Sources/TOMLDecoder/Parsing/Parser.swift index dab1648..3375973 100644 --- a/Sources/TOMLDecoder/Parsing/Parser.swift +++ b/Sources/TOMLDecoder/Parsing/Parser.swift @@ -1249,6 +1249,9 @@ extension Token { } let quoteChar = bytes[text.lowerBound] + if quoteChar != CodeUnits.doubleQuote, quoteChar != CodeUnits.singleQuote { + throw TOMLError(.typeMismatch(context: context, lineNumber: lineNumber, expected: "string")) + } var index = text.lowerBound var endIndex = text.upperBound diff --git a/Tests/TOMLDecoderTests/TOMLTableKeyMembershipTests.swift b/Tests/TOMLDecoderTests/TOMLTableKeyMembershipTests.swift index ee9484b..d6464b3 100644 --- a/Tests/TOMLDecoderTests/TOMLTableKeyMembershipTests.swift +++ b/Tests/TOMLDecoderTests/TOMLTableKeyMembershipTests.swift @@ -35,4 +35,14 @@ struct TOMLTableKeyMembershipTests { #expect(table.contains(key: "c")) #expect(!table.contains(key: "d")) } + + @Test + func stringAccessorMismatchInInlineTableThrowsWithoutTrapping() throws { + let table = try TOMLTable(source: "foo_bar = { x = 1 }\n") + let inlineTable = try table.table(forKey: "foo_bar") + + #expect(throws: TOMLError.self) { + try inlineTable.string(forKey: "x") + } + } }