Open pacu opened 11 months ago
When using a CharacterSet inside a parser, any character that is not in the set will crash the process.
CharacterSet
Version:
{ "identity" : "swift-parsing", "kind" : "remoteSourceControl", "location" : "https://github.com/pointfreeco/swift-parsing", "state" : { "revision" : "a0e7d73f462c1c38c59dc40a3969ac40cea42950", "version" : "0.13.0" } }
Proof of Concept:
Run the following test:
extension CharacterSet { static let naiveSet = CharacterSet(charactersIn: "abc") } let naiveParser = Parse { CharacterSet.naiveSet } final class LameTest: XCTestCase { func testNaiveSetWorks() { let validInput = "abacabb"[...] let result = naiveParser.parse(validInput) XCTAssertEqual(result, validInput) let invalidInput = "abacad"[...] let unresult = naiveParser.parse(invalidInput) XCTAssertEqual(unresult, invalidInput) } }
The parse() should throw and compiler must err if not called with a try statement, and then actually throw an error.
parse()
try
The function crashes. The compiler does not let parse() be called with a try since it considers it "not throwing"
Workaround:
let naiveParser = Parse { CharacterSet.naiveSet.eraseToAnyParser() }
When using a
CharacterSet
inside a parser, any character that is not in the set will crash the process.Version:
Proof of Concept:
Run the following test:
Expected
The
parse()
should throw and compiler must err if not called with atry
statement, and then actually throw an error.Result
The function crashes. The compiler does not let
parse()
be called with atry
since it considers it "not throwing"Workaround: