From 5a302976aa5364da56824765d909c794fec33ad7 Mon Sep 17 00:00:00 2001
From: Yessiest <yessiest@memeware.net>
Date: Fri, 7 Mar 2025 23:58:14 +0000
Subject: [PATCH] properly handling uri emplacement

---
 lib/mmmd/blankshell.rb     | 4 ++--
 lib/mmmd/renderers/html.rb | 1 +
 lib/mmmd/util.rb           | 9 +++++++++
 3 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/lib/mmmd/blankshell.rb b/lib/mmmd/blankshell.rb
index 3628876..ec1c540 100644
--- a/lib/mmmd/blankshell.rb
+++ b/lib/mmmd/blankshell.rb
@@ -178,7 +178,7 @@ module PointBlank
         string = string.gsub(/\\([!"\#$%&'()*+,\-.\/:;<=>?@\[\\\]\^_`{|}~])/,
                              '\\1')
         string = string.gsub("\n", " ")
-        URI.encode_uri_component(
+        MMMD::EntityUtils.encode_uri(
           MMMD::EntityUtils.decode_entities(string)
         )
       end
@@ -1210,7 +1210,7 @@ module PointBlank
         return '<', parts[1..] unless buffer.match?(/^<[\w\-_+]+:[^<>\s]+>$/)
 
         obj = build([buffer[1..-2]])
-        obj.properties[:uri] = buffer[1..-2]
+        obj.properties[:uri] = MMMD::EntityUtils.encode_uri(buffer[1..-2])
         [obj, parts[(cutoff + 1)..]]
       end
     end
diff --git a/lib/mmmd/renderers/html.rb b/lib/mmmd/renderers/html.rb
index 281f35e..fc768b5 100644
--- a/lib/mmmd/renderers/html.rb
+++ b/lib/mmmd/renderers/html.rb
@@ -315,6 +315,7 @@ module MMMD
 
       def read_title(element)
         title = element.properties[:title]
+        title = ::MMMD::EntityUtils.encode_entities(title)
         title.inspect
       end
 
diff --git a/lib/mmmd/util.rb b/lib/mmmd/util.rb
index f9efe09..483f362 100644
--- a/lib/mmmd/util.rb
+++ b/lib/mmmd/util.rb
@@ -48,5 +48,14 @@ module MMMD
             .gsub('"', "&quot;")
             .gsub("'", "&#39;")
     end
+
+    # Encode uri components that may break HTML syntax
+    # @param string [String]
+    # @return [String]
+    def self.encode_uri(string)
+      string.gsub('"', "%22")
+            .gsub("'", "%27")
+            .gsub(" ", "%20")
+    end
   end
 end