commit e66b3ff

default  ·  2023-06-01 15:14:50 +0000 UTC
parent af88b78
Disallow empty or repeated options in msg_question().
1 files changed,  +21, -10
+21, -10
 1@@ -1057,6 +1057,7 @@ xs_dict *msg_question(snac *user, const char *content, xs_list *attach,
 2     xs *ntid     = tid(0);
 3     xs_dict *msg = msg_note(user, content, NULL, NULL, attach, 0);
 4     int max      = 8;
 5+    xs_set seen;
 6 
 7     msg = xs_dict_set(msg, "type", "Question");
 8 
 9@@ -1068,20 +1069,30 @@ xs_dict *msg_question(snac *user, const char *content, xs_list *attach,
10     xs_str *v;
11     xs *replies = xs_json_loads("{\"type\":\"Collection\",\"totalItems\":0}");
12 
13-    while (max-- && xs_list_iter(&p, &v)) {
14-        xs *v2 = xs_dup(v);
15-        xs *d  = xs_dict_new();
16+    xs_set_init(&seen);
17 
18-        if (strlen(v2) > 60) {
19-            v2[60] = '\0';
20-            v2 = xs_str_cat(v2, "...");
21-        }
22+    while (max && xs_list_iter(&p, &v)) {
23+        if (*v) {
24+            xs *v2 = xs_dup(v);
25+            xs *d  = xs_dict_new();
26+
27+            if (strlen(v2) > 60) {
28+                v2[60] = '\0';
29+                v2 = xs_str_cat(v2, "...");
30+            }
31+
32+            if (xs_set_add(&seen, v2) == 1) {
33+                d = xs_dict_append(d, "name",    v2);
34+                d = xs_dict_append(d, "replies", replies);
35+                o = xs_list_append(o, d);
36 
37-        d = xs_dict_append(d, "name",    v2);
38-        d = xs_dict_append(d, "replies", replies);
39-        o = xs_list_append(o, d);
40+                max--;
41+            }
42+        }
43     }
44 
45+    xs_set_free(&seen);
46+
47     msg = xs_dict_append(msg, multiple ? "anyOf" : "oneOf", o);
48 
49     /* set the end time */