Skip to content

Commit a1d68bb

Browse files
committed
Validate values
1 parent fba338e commit a1d68bb

File tree

1 file changed

+16
-1
lines changed

1 file changed

+16
-1
lines changed

files/metadata2.c

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,19 @@ module
4949
#define STR_FAIL_LIMIT_REACHED ":%s FAIL METADATA LIMIT_REACHED %s :metadata limit reached"
5050
#define STR_FAIL_RATE_LIMITED ":%s FAIL METADATA RATE_LIMITED %s :rate limited"
5151
#define STR_FAIL_TOO_MANY_SUBS ":%s FAIL METADATA TOO_MANY_SUBS %s :too many subscriptions"
52+
#define STR_FAIL_INVALID_VALUE_UTF8 ":%s FAIL METADATA INVALID_VALUE :value contains invalid UTF8"
53+
#define STR_FAIL_INVALID_VALUE_SIZE ":%s FAIL METADATA INVALID_VALUE :value is too long"
5254

5355
/* actual METADATA code */
5456

5557
/* get or set for perms */
5658
#define MODE_SET 0
5759
#define MODE_GET 1
5860

61+
/* TODO: pick a less arbitrary value; to allow it to be as large as possible without
62+
* overflowing IRC line length */
63+
#define MAX_VALUE_BYTES 300
64+
5965
#define MYCONF "metadata2"
6066

6167
#define CHECKPARAMSCNT_OR_DIE(count, return) \
@@ -449,7 +455,7 @@ MOD_UNLOAD() {
449455
const char *metadata_cap_param(Client *client)
450456
{
451457
static char buf[20];
452-
ircsnprintf(buf, sizeof(buf), "maxsub=%d", metadata_settings.max_subscriptions);
458+
ircsnprintf(buf, sizeof(buf), "max-sub=%d,max-value-bytes=%d", metadata_settings.max_subscriptions, MAX_VALUE_BYTES);
453459
return buf;
454460
}
455461

@@ -1163,6 +1169,15 @@ CMD_FUNC(cmd_metadata_local)
11631169
return;
11641170
}
11651171

1172+
if (!unrl_utf8_validate(value, NULL)) {
1173+
sendto_one(client, NULL, STR_FAIL_INVALID_VALUE_UTF8, me.name);
1174+
return;
1175+
}
1176+
if (strlen(value) > MAX_VALUE_BYTES) {
1177+
sendto_one(client, NULL, STR_FAIL_INVALID_VALUE_SIZE, me.name);
1178+
return;
1179+
}
1180+
11661181
if (channel)
11671182
metadata_set_channel(channel, key, value, client);
11681183
else

0 commit comments

Comments
 (0)