Use ASan and UBSan in debug builds.
[open-adventure.git] / main.c
diff --git a/main.c b/main.c
index f8bf8a1cb4dc73a42172ce826d8ee3e06d88d7ed..350c4aeb36b7f4622b32306b2b5d0c8a4507b475 100644 (file)
--- a/main.c
+++ b/main.c
@@ -137,7 +137,7 @@ static bool fallback_handler(struct command_t command)
 /* fallback handler for commands not handled by FORTRANish parser */
 {
     long sv;
-    char buf[LINESIZE];
+    char buf[2 * LINESIZE + 1];
     sprintf(buf, "%s %s", command.raw1, command.raw2);
 
     if (sscanf(buf, "seed %ld", &sv) == 1) {
@@ -147,6 +147,11 @@ static bool fallback_handler(struct command_t command)
         --game.turns;
         return true;
     }
+    else if (sscanf(buf, "waste %ld", &sv) == 1) {
+        game.limit -= sv;
+        printf("Game limit is now %ld\n", game.limit);
+        return true;
+    }
     return false;
 }
 
@@ -903,8 +908,14 @@ static void lampcheck(void)
         if (HERE(BATTERY) && game.prop[BATTERY] == FRESH_BATTERIES && HERE(LAMP)) {
             rspeak(REPLACE_BATTERIES);
             game.prop[BATTERY] = DEAD_BATTERIES;
+#ifdef __unused__
+           /* This code from the original game seems to have been faulty.
+            * No tests ever passed the guard, and with the guard removed
+            * the game hangs when the lamp limit is reached.  
+            */
             if (TOTING(BATTERY))
                 drop(BATTERY, game.loc);
+#endif
             game.limit += BATTERYLIFE;
             game.lmwarn = false;
         } else if (!game.lmwarn && HERE(LAMP)) {