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

html.c: Fix non-list tag object for external custom emoji

Signed-off-by: Yonle <yonle@lecturify.net>
Yonle 3 лет назад
Родитель
Сommit
b2a274df76
1 измененных файлов с 26 добавлено и 2 удалено
  1. 26 2
      html.c

+ 26 - 2
html.c

@@ -56,8 +56,20 @@ xs_str *actor_name(xs_dict *actor)
 
     /* replace the :shortnames: */
     if (!xs_is_null(p = xs_dict_get(actor, "tag"))) {
+        xs *tag = NULL;
+        if (xs_type(p) == XSTYPE_DICT) {
+            /* not a list */
+            tag = xs_list_new();
+            tag = xs_list_append(tag, p);
+        } else {
+            /* is a list */
+            tag = xs_dup(p);
+        }
+
+        xs_list *tags = tag;
+
         /* iterate the tags */
-        while (xs_list_iter(&p, &v)) {
+        while (xs_list_iter(&tags, &v)) {
             char *t = xs_dict_get(v, "type");
 
             if (t && strcmp(t, "Emoji") == 0) {
@@ -1031,8 +1043,20 @@ xs_str *html_entry(snac *snac, xs_str *os, const xs_dict *msg, int local,
 
         /* replace the :shortnames: */
         if (!xs_is_null(p = xs_dict_get(msg, "tag"))) {
+            xs *tag = NULL;
+            if (xs_type(p) == XSTYPE_DICT) {
+                /* not a list */
+                tag = xs_list_new();
+                tag = xs_list_append(tag, p);
+            } else {
+                /* is a list */
+                tag = xs_dup(p);
+            }
+
+            xs_list *tags = tag;
+
             /* iterate the tags */
-            while (xs_list_iter(&p, &v)) {
+            while (xs_list_iter(&tags, &v)) {
                 char *t = xs_dict_get(v, "type");
 
                 if (t && strcmp(t, "Emoji") == 0) {