summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTest_User <hax@andrewyu.org>2023-08-09 01:04:52 -0400
committerTest_User <hax@andrewyu.org>2023-08-09 01:04:52 -0400
commit0b913b75fd6eee2b7e8a6920de2fc1591ecb8396 (patch)
tree0c04bcb0f7fbf2350eaf2ced03fc6d02f197eab9
parent530d8cd8a6c2d28c1f358dc369613eb9e0e10a71 (diff)
downloadcoupserv-0b913b75fd6eee2b7e8a6920de2fc1591ecb8396.tar.gz
coupserv-0b913b75fd6eee2b7e8a6920de2fc1591ecb8396.zip
Don't implode if protocol gets violated like this
-rw-r--r--server_network.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/server_network.c b/server_network.c
index b7694b1..055e86d 100644
--- a/server_network.c
+++ b/server_network.c
@@ -584,6 +584,12 @@ int squit_handler(struct string sender, uint64_t argc, struct string *argv) {
return 1;
}
+ struct server_info *server = remove_table_index(&server_list, argv[0]);
+ if (!server) {
+ WRITES(2, STRING("Invalid SQUIT received! (Unknown server)\n"));
+ return 1;
+ }
+
for (uint64_t i = 0; i < user_list.len;) {
struct user_info *info = user_list.array[i].ptr;
if (argv[0].len == info->server.len && memcmp(argv[0].data, info->server.data, argv[0].len) == 0) {
@@ -593,7 +599,6 @@ int squit_handler(struct string sender, uint64_t argc, struct string *argv) {
}
}
- struct server_info *server = remove_table_index(&server_list, argv[0]);
free(server->name.data);
free(server->address.data);
if (server->via.data != 0)