Просмотр исходного кода

truncate rss title at utf8 char boundary

Advance a whole utf8 char at a time while looking for where to
truncate the title.
Alexandre Oliva 7 месяцев назад
Родитель
Сommit
89053095eb
2 измененных файлов с 11 добавлено и 1 удалено
  1. 2 0
      RELEASE_NOTES.md
  2. 9 1
      rss.c

+ 2 - 0
RELEASE_NOTES.md

@@ -2,6 +2,8 @@
 
 ## UNRELEASED
 
+Truncate RSS titles at UTF-8 character boundaries (contributed by lxo).
+
 Link contacts to single-user people pages. Also, user's posts are shown (contributed by lxo).
 
 Added emoji reactions (contributed by violette).

+ 9 - 1
rss.c

@@ -10,6 +10,7 @@
 #include "xs_openssl.h"
 #include "xs_json.h"
 #include "xs_http.h"
+#include "xs_unicode.h"
 
 #include "snac.h"
 
@@ -74,7 +75,14 @@ xs_str *rss_from_timeline(snac *user, const xs_list *timeline,
         title = xs_regex_replace_i(title, "&[^;]+;", " ");
         int i;
 
-        for (i = 0; title[i] && title[i] != '\n' && i < 50; i++);
+        for (i = 0; title[i] && title[i] != '\n' && i < 50; ) {
+            const char *p = &title[i];
+            unsigned int cp = xs_utf8_dec(&p);
+            int n = p - title;
+            if (cp == 0xfffd || n > 50)
+                break;
+            i = n;
+        }
 
         if (title[i] != '\0') {
             title[i] = '\0';