Validate dwarves and tally
authorNHOrus <jy6x2b32pie9@yahoo.com>
Sun, 13 Aug 2017 14:56:37 +0000 (15:56 +0100)
committerNHOrus <jy6x2b32pie9@yahoo.com>
Sun, 13 Aug 2017 14:56:37 +0000 (15:56 +0100)
saveresume.c

index ecfc643d8f772ad82581b5cf9bcaa688f710c0c4..724ca001b2c61dd3110fe26686c99e6eea05e832 100644 (file)
@@ -159,6 +159,31 @@ bool is_valid(struct game_t valgame)
             return false;
         }
     }
+
+    /*  Bounds check for dwarves */
+    if (valgame.dtotal < 0 || valgame.dtotal > NDWARVES ||
+        valgame.dkill < 0 || valgame.dkill > NDWARVVES) {
+        return false;
+    }
+
+    /*  Validate that we didn't die too many times in save */
+    if (valgame.numdie >= NDEATHS) {
+        return false;
+    }
+
+    /* Recalculate tally, throw the towel if in disagreement */
+    long temp_tally = 0;
+    for (int treasure = 1; treasure <= NOBJECTS; treasure++) {
+        if (objects[treasure].is_treasure) {
+            if (valgame.prop[treasure] == STATE_NOTFOUND) {
+                ++temp_tally;
+            }
+        }
+    }
+    if (temp_tally != valgame.tally) {
+        return false;
+    }
+
     return true;
 }