Jelajahi Sumber

Sanitize XML to remove invalid characters

Fixes #268
Zed 5 tahun lalu
induk
melakukan
d358912790
2 mengubah file dengan 6 tambahan dan 2 penghapusan
  1. 4 0
      src/formatters.nim
  2. 2 2
      src/views/rss.nimf

+ 4 - 0
src/formatters.nim

@@ -14,6 +14,7 @@ const
   manifestRegex = re"(.+(.ts|.m3u8|.vmap))"
   userpicRegex = re"_(normal|bigger|mini|200x200|400x400)(\.[A-z]+)$"
   extRegex = re"(\.[A-z]+)$"
+  illegalXmlRegex = re"[^\x09\x0A\x0D\x20-\uD7FF\uE000-\uFFFD\u10000-\u10FFFF]"
 
   twitter = parseUri("https://twitter.com")
 
@@ -26,6 +27,9 @@ proc stripHtml*(text: string): string =
       el[0].text = link
   html.innerText()
 
+proc sanitizeXml*(text: string): string =
+  text.replace(illegalXmlRegex, "")
+
 proc shortLink*(text: string; length=28): string =
   result = text.replace(wwwRegex, "")
   if result.len > length:

+ 2 - 2
src/views/rss.nimf

@@ -69,7 +69,7 @@
 #var title = profile.fullname
 #if not multi: title &= " / " & user
 #end if
-#title = xmltree.escape(title)
+#title = xmltree.escape(title).sanitizeXml
 <?xml version="1.0" encoding="UTF-8"?>
 <rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
   <channel>
@@ -86,7 +86,7 @@
       <width>128</width>
       <height>128</height>
     </image>
-    # if timeline.content.len > 0:
+    #if timeline.content.len > 0:
     ${renderRssTweets(timeline.content, prefs, hostname)}
     #end if
   </channel>