diff --git a/damus/Util/Parser.swift b/damus/Util/Parser.swift index 318824d4..0be32d6d 100644 --- a/damus/Util/Parser.swift +++ b/damus/Util/Parser.swift @@ -97,6 +97,12 @@ func parse_digit(_ p: Parser) -> Int? { func parse_hex_char(_ p: Parser) -> Character? { let ind = p.str.index(p.str.startIndex, offsetBy: p.pos) + // Check that we're within the bounds of p.str's length + if p.pos >= p.str.count { + return nil + } + + if let c = p.str[ind].unicodeScalars.first { // hex chars let d = c.value diff --git a/damusTests/ReplyTests.swift b/damusTests/ReplyTests.swift index cba280bb..f627fd67 100644 --- a/damusTests/ReplyTests.swift +++ b/damusTests/ReplyTests.swift @@ -53,6 +53,14 @@ class ReplyTests: XCTestCase { XCTAssertEqual(blocks[0].is_text, content) } + func testAtAtEnd() { + let content = "what @" + let blocks = parse_post_blocks(content: content) + + XCTAssertEqual(blocks.count, 1) + XCTAssertEqual(blocks[0].is_text, "what @") + } + func testHashtagsInQuote() { let content = "This is my \"#awesome post\"" let blocks = parse_post_blocks(content: content)