diff options
author | Markus Uhlin <markus@nifty-networks.net> | 2025-03-25 00:37:53 +0100 |
---|---|---|
committer | Markus Uhlin <markus@nifty-networks.net> | 2025-03-25 00:37:53 +0100 |
commit | 9d38fb6a704ba503c8a69dce8e26d51d2dcb1c18 (patch) | |
tree | a65cc71d64156bceebba609ef91b927ca25731c9 /FICS | |
parent | 9b6e720abce1a7c0b0c79e9caffff697abd44824 (diff) |
com_unalias: fixed overflowed array index read/write
Diffstat (limited to 'FICS')
-rw-r--r-- | FICS/comproc.c | 18 |
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--; |