aboutsummaryrefslogtreecommitdiff
path: root/rss.c
diff options
context:
space:
mode:
Diffstat (limited to 'rss.c')
-rw-r--r--rss.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/rss.c b/rss.c
index 6e77205..dc26071 100644
--- a/rss.c
+++ b/rss.c
@@ -1,5 +1,5 @@
/* snac - A simple, minimalistic ActivityPub instance */
-/* copyright (c) 2025 grunfink et al. / MIT license */
+/* copyright (c) 2025 - 2026 grunfink et al. / MIT license */
#include "xs.h"
#include "xs_html.h"
@@ -10,6 +10,7 @@
#include "xs_openssl.h"
#include "xs_json.h"
#include "xs_http.h"
+#include "xs_unicode.h"
#include "snac.h"
@@ -59,7 +60,7 @@ xs_str *rss_from_timeline(snac *user, const xs_list *timeline,
const char *content = xs_dict_get(msg, "content");
const char *published = xs_dict_get(msg, "published");
- if (user && !xs_startswith(id, user->actor))
+ if (user && !is_msg_mine(user, id))
continue;
if (!id || !content || !published)
@@ -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';