diff options
author | Bardur Arantsson <bardur@scientician.net> | 2016-02-05 19:22:46 +0100 |
---|---|---|
committer | Bardur Arantsson <bardur@scientician.net> | 2016-02-05 19:22:46 +0100 |
commit | 8f967e4cfcd5710c82a26e878397afac81c6af64 (patch) | |
tree | db688e25ac102805477667c4bf1316dff2d9b796 /src/cmd4.cc | |
parent | 9baafaff5ead3056dbd3ae531d1560faf02e50b7 (diff) |
Fix multiple potential underflows in plural_aux
Diffstat (limited to 'src/cmd4.cc')
-rw-r--r-- | src/cmd4.cc | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/cmd4.cc b/src/cmd4.cc index 48fc279b..ab9e4281 100644 --- a/src/cmd4.cc +++ b/src/cmd4.cc @@ -3422,29 +3422,29 @@ static void plural_aux(char *name) } /* Broken plurals are, well, broken */ - else if (name[name_len - 1] == 'y') + else if (name_len >= 1 && name[name_len - 1] == 'y') { strcpy(&name[name_len - 1], "ies"); } - else if (streq(&name[name_len - 4], "ouse")) + else if (name_len >= 4 && streq(&name[name_len - 4], "ouse")) { strcpy(&name[name_len - 4], "ice"); } - else if (streq(&name[name_len - 6], "kelman")) + else if (name_len >= 6 && streq(&name[name_len - 6], "kelman")) { strcpy(&name[name_len - 6], "kelmen"); } - else if (streq(&name[name_len - 2], "ex")) + else if (name_len >= 2 && streq(&name[name_len - 2], "ex")) { strcpy(&name[name_len - 2], "ices"); } - else if (streq(&name[name_len - 3], "olf")) + else if (name_len >= 3 && streq(&name[name_len - 3], "olf")) { strcpy(&name[name_len - 3], "olves"); } /* Now begins sane cases */ - else if ((streq(&name[name_len - 2], "ch")) || (name[name_len - 1] == 's')) + else if ((name_len >= 2 && streq(&name[name_len - 2], "ch")) || (name_len >= 1 && name[name_len - 1] == 's')) { strcpy(&name[name_len], "es"); } |