Open
Description
When using a CharacterSet
inside a parser, any character that is not in the set will crash the process.
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)
}
}
Expected
The parse()
should throw and compiler must err if not called with a try
statement, and then actually throw an error.
Result
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()
}
Metadata
Metadata
Assignees
Labels
No labels