aboutsummaryrefslogtreecommitdiffstats
path: root/FICS
diff options
context:
space:
mode:
authorMarkus Uhlin <markus@nifty-networks.net>2025-03-25 00:37:53 +0100
committerMarkus Uhlin <markus@nifty-networks.net>2025-03-25 00:37:53 +0100
commit9d38fb6a704ba503c8a69dce8e26d51d2dcb1c18 (patch)
treea65cc71d64156bceebba609ef91b927ca25731c9 /FICS
parent9b6e720abce1a7c0b0c79e9caffff697abd44824 (diff)
com_unalias: fixed overflowed array index read/write
Diffstat (limited to 'FICS')
-rw-r--r--FICS/comproc.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/FICS/comproc.c b/FICS/comproc.c
index 4f33d4c..7017aa0 100644
--- a/FICS/comproc.c
+++ b/FICS/comproc.c
@@ -1639,14 +1639,32 @@ com_unalias(int p, param_list param)
pprintf(p, "You have no alias named '%s'.\n",
param[0].val.word);
} else {
+ bool removed = false;
+ const int sz = (int) ARRAY_SIZE(parray[0].alias_list);
+
rfree(parray[p].alias_list[al].comm_name);
rfree(parray[p].alias_list[al].alias);
+ parray[p].alias_list[al].comm_name = NULL;
+ parray[p].alias_list[al].alias = NULL;
+
for (int i = al; i < parray[p].numAlias; i++) {
+ if (i >= sz || i + 1 >= sz) {
+ warnx("%s: overflowed array index read/write",
+ __func__);
+ break;
+ }
+
parray[p].alias_list[i].comm_name =
parray[p].alias_list[i + 1].comm_name;
parray[p].alias_list[i].alias =
parray[p].alias_list[i + 1].alias;
+ removed = true;
+ }
+
+ if (!removed) {
+ pprintf(p, "Remove error.\n");
+ return COM_FAILED;
}
parray[p].numAlias--;