Skip to content

CharacterSet Parser throws EXC_BREAKPOINT #333

Open
@pacu

Description

@pacu

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"

image

Workaround:

let naiveParser = Parse {
    CharacterSet.naiveSet.eraseToAnyParser()
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions