Bounds check for properties; it is not violated in normal game
authorNHOrus <jy6x2b32pie9@yahoo.com>
Thu, 24 Aug 2017 08:21:10 +0000 (11:21 +0300)
committerNHOrus <jy6x2b32pie9@yahoo.com>
Thu, 24 Aug 2017 08:21:10 +0000 (11:21 +0300)
saveresume.c

index c1b5eb202bb52f09b1f3ab963c7ec6bb666c2384..8a33c3e992fa8e217825c17f3a5cf9fa54e32fec 100644 (file)
@@ -184,6 +184,33 @@ bool is_valid(struct game_t valgame)
         return false;
     }
 
+    /* Check that properties of objects aren't beyond expected */
+    for (int obj = 0; obj <= NOBJECTS; obj++) {
+        if (game.prop[obj] < STATE_NOTFOUND || game.prop[obj] > 1) {
+            switch (obj) {
+            case RUG:
+            case DRAGON:
+            case BIRD:
+            case BOTTLE:
+            case PLANT:
+            case PLANT2:
+            case TROLL:
+            case URN:
+            case EGGS:
+            case VASE:
+            case CHAIN:
+                if (game.prop[obj] == 2) // There are multiple different states, but it's convenient to clump them together
+                    continue;
+            case BEAR:
+                if (game.prop[BEAR] == CONTENTED_BEAR || game.prop[BEAR] == BEAR_DEAD)
+                    continue;
+            default:
+                printf("%i", obj);
+                return false;
+            }
+        }
+    }
+
     return true;
 }