home · contact · privacy
Client: Fix crashes happening on navigation in too large inventory (string).
authorChristian Heller <c.heller@plomlompom.de>
Wed, 16 Apr 2014 14:08:46 +0000 (16:08 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Wed, 16 Apr 2014 14:08:46 +0000 (16:08 +0200)
TODO
confserver/world
src/client/control.c

diff --git a/TODO b/TODO
index 9226ff0def768bd29f9bbb0dc3dfa5a68a525f73..5438e49d14ea3405bc32f498c6f1a05ca78dde78 100644 (file)
--- a/TODO
+++ b/TODO
@@ -9,6 +9,8 @@ BOTH SERVER/CLIENT:
 
 - be more strict and humble when allocating memory from the stack
 
+- handle crashes on OS X: <https://github.com/plomlompom/plomrogue/issues/1>
+
 SERVER:
 
 - implement field of view / line of sight and obstacles for those on the map
@@ -23,5 +25,3 @@ CLIENT:
 - enable toggling of window borders
 
 - make log scrollable
-
-- nav_inventory() expects too short inventory string length for i
index 724d0120f2d6056fb439383712443fd42cc672b2..f773be2f3252ac09bfecd871089819bfcabbc797 100644 (file)
@@ -27,7 +27,7 @@ EFFORT 45
 OBJECT 0
 NAME HUMAN
 SYMBOL @
-LIFEPOINTS 5
+LIFEPOINTS 255
 CORPSE_ID 5
 CONSUMABLE 0
 START_NUMBER 1
index 1961334c0015064f103b825f64aaf89651652000..d5d8d9e7935441848a57ccb9011a97509dee6854 100644 (file)
@@ -1,9 +1,10 @@
 /* src/client/control.c */
 
 #include "control.h"
-#include <stdint.h> /* uint8_t, uint16_t */
+#include <stdint.h> /* uint8_t, uint16_t, uint32_t, UINT32_MAX */
 #include <stdio.h> /* sprintf() */
 #include <string.h> /* strlen() */
+#include "../common/rexit.h" /* exit_err() */
 #include "interface_conf.h" /* reload_interface_conf(), save_interface_conf() */
 #include "io.h" /* send() */
 #include "keybindings.h" /* get_command_to_keycode(), get_keycode_to_command(),
@@ -54,7 +55,9 @@ static void nav_inventory(char dir)
         return;
     }
     uint8_t n_elems = 0;
-    uint8_t i;
+    uint32_t i;
+    char * err = "Inventory string is too large.";
+    exit_err(UINT32_MAX <= strlen(world.player_inventory), err);
     for (i = 0; '\0' != world.player_inventory[i]; i++)
     {
         n_elems = n_elems + ('\n' == world.player_inventory[i]);