commit 205774f684fedb2330929f840c04423146309db0
parent 0af8646fd52cbf6646557e8049ee380915f72c99
Author: Pablo Fernandez <pfer@me.com>
Date:   Tue, 27 Dec 2022 19:11:54 +0700
Fix when calling parse_hex_char out of bounds
Closes: #158
Changelog-Fixed: Fix crash with @ sign in some posts
Diffstat:
2 files changed, 14 insertions(+), 0 deletions(-)
diff --git 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
@@ -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)