diff --git a/Sources/HTMLStreamer/AttributedStringConverter.swift b/Sources/HTMLStreamer/AttributedStringConverter.swift
index 7dd826f..5375086 100644
--- a/Sources/HTMLStreamer/AttributedStringConverter.swift
+++ b/Sources/HTMLStreamer/AttributedStringConverter.swift
@@ -75,10 +75,12 @@ public struct AttributedStringConverter {
case .endTag(let name):
handleEndTag(name)
// if we have a non-default action for the current element, the run finishes here
- if actionStack.last != .default {
- finishRun()
+ if let action = actionStack.last {
+ if action != .default {
+ finishRun()
+ }
+ actionStack.removeLast()
}
- actionStack.removeLast()
case .doctype:
// ignored
continue
diff --git a/Sources/HTMLStreamer/TextConverter.swift b/Sources/HTMLStreamer/TextConverter.swift
index b302582..8271aa6 100644
--- a/Sources/HTMLStreamer/TextConverter.swift
+++ b/Sources/HTMLStreamer/TextConverter.swift
@@ -55,10 +55,12 @@ public struct TextConverter {
handleStartTag(name, selfClosing: selfClosing, attributes: attributes)
case .endTag(let name):
handleEndTag(name)
- if actionStack.last != .default {
- finishRun()
+ if let action = actionStack.last {
+ if action != .default {
+ finishRun()
+ }
+ actionStack.removeLast()
}
- actionStack.removeLast()
case .comment, .doctype:
break
}
diff --git a/Tests/HTMLStreamerTests/AttributedStringConverterTests.swift b/Tests/HTMLStreamerTests/AttributedStringConverterTests.swift
index e574a31..6df0da9 100644
--- a/Tests/HTMLStreamerTests/AttributedStringConverterTests.swift
+++ b/Tests/HTMLStreamerTests/AttributedStringConverterTests.swift
@@ -352,4 +352,8 @@ final class AttributedStringConverterTests: XCTestCase {
XCTAssertEqual(convert(#"https://example.com"#, callbacks: Callbacks.self), result)
}
+ func testMalformedOnlyClosingTag() {
+ XCTAssertEqual(convert(""), .init())
+ }
+
}
diff --git a/Tests/HTMLStreamerTests/TextConverterTests.swift b/Tests/HTMLStreamerTests/TextConverterTests.swift
index 09858f9..0ad8ff1 100644
--- a/Tests/HTMLStreamerTests/TextConverterTests.swift
+++ b/Tests/HTMLStreamerTests/TextConverterTests.swift
@@ -83,4 +83,8 @@ final class TextConverterTests: XCTestCase {
XCTAssertEqual(convert(#"https://example.com"#, callbacks: Callbacks.self), "example.com")
}
+ func testMalformedOnlyClosingTag() {
+ XCTAssertEqual(convert(""), "")
+ }
+
}