From: Antonio Terceiro <terceiro@debian.org>
Date: Thu, 24 Oct 2024 11:52:47 -0300
Subject: ANSI::BBCode.ansi_to_bbcode: don't crash when finding a unmatched
 reset ANSI code

---
 lib/ansi/bbcode.rb  | 9 ++++++---
 test/case_bbcode.rb | 5 +++++
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/lib/ansi/bbcode.rb b/lib/ansi/bbcode.rb
index 294f267..045ed8f 100644
--- a/lib/ansi/bbcode.rb
+++ b/lib/ansi/bbcode.rb
@@ -117,8 +117,11 @@ module ANSI
                 ## Pop last tag and form closing tag
                 if ansiname == "reset"
                     lasttag = tagstack.pop
-                    bbname = "/" + String.new( lasttag.split("=")[0] )
-
+                    if lasttag
+                        bbname = "/" + String.new( lasttag.split("=")[0] )
+                    else
+                        bbname = nil
+                    end
                 ## Get corresponding BBCode tag + Push to stack
                 else
                     bbname   = ANSINAME2BBCODE[ansiname]
@@ -126,7 +129,7 @@ module ANSI
                 end
 
                 ## Replace ansi sequence by BBCode tag
-                replace = sprintf("[%s]", bbname)
+                replace = bbname && sprintf("[%s]", bbname) || ""
                 line.sub!(seq, replace)
             end
 
diff --git a/test/case_bbcode.rb b/test/case_bbcode.rb
index 995dddf..0355559 100644
--- a/test/case_bbcode.rb
+++ b/test/case_bbcode.rb
@@ -26,6 +26,11 @@ testcase ANSI::BBCode do
       out = ANSI::BBCode.ansi_to_bbcode(str)
       out.assert == expected
     end
+
+    test "just the reset code" do
+      out = ANSI::BBCode.ansi_to_bbcode("\e[0m")
+      out.assert == "\n"
+    end
   end
 
   class_method :ansi_to_html do
