Mercurial > hg > early-roguelike
changeset 276:4573b355cdc1
UltraRogue: prevent bad array accesses in call().
Marking non-magic items caused segfaults because item_color was set to
NULL. item_type could also be used as an out-of-bounds index. These
problems have been fixed by only using these variables when the mark
argument is false, in which case they are properly initialized.
A fall-through case statement was also fixed.
author | John "Elwin" Edwards |
---|---|
date | Sun, 10 Sep 2017 21:04:22 -0400 |
parents | aa0eefcd7df6 |
children | 1bbdd13ec585 |
files | urogue/command.c |
diffstat | 1 files changed, 5 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/urogue/command.c Sat Sep 09 07:25:23 2017 -0400 +++ b/urogue/command.c Sun Sep 10 21:04:22 2017 -0400 @@ -1303,6 +1303,7 @@ case STICK: item_type = TYP_STICK; item_color = ws_made; + break; default: if (!mark) { @@ -1312,10 +1313,7 @@ break; } - elsewise = (guess_items[item_type][obj->o_which] != NULL ? - guess_items[item_type][obj->o_which] : item_color[obj->o_which]); - - if (know_items[item_type][obj->o_which] && !mark) + if (!mark && know_items[item_type][obj->o_which]) { msg("That has already been identified."); return; @@ -1331,6 +1329,9 @@ } else { + elsewise = (guess_items[item_type][obj->o_which] != NULL ? + guess_items[item_type][obj->o_which] : item_color[obj->o_which]); + msg("Was called \"%s\".", elsewise); msg("What do you want to call it? ");