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 */