Verify game state and configuration reference sanity
authorMarkus Armbruster <armbru@pond.sub.org>
Mon, 25 Apr 2011 07:45:58 +0000 (09:45 +0200)
committerMarkus Armbruster <armbru@pond.sub.org>
Sat, 25 Jun 2011 14:54:29 +0000 (16:54 +0200)
Table elements reference other table elements.  Bad things happen when
references dangle.  ef_verify() already checks whether the referenced
table elements exist.  This commit makes it check whether the elements
are "in use".  This catches stuff like living planes on dead carriers.

src/lib/common/ef_verify.c

index 1ddd89e097daa11eb1b0bed80a7f8d4a713b44ac..a288cb4fd2dff30248a3a25d6ca93e222ba80b6f 100644 (file)
@@ -122,6 +122,13 @@ verify_tabref(int type, int row, struct castr *ca, int idx, long val)
                        val, ef_nameof(tabno), ef_nelem(tabno));
            return -1;
        }
+       /* laziness: assumes TABNO is EFF_MEM */
+       if (val >= 0 && !empobj_in_use(tabno, ef_ptr(tabno, val))) {
+           verify_fail(type, row, ca, idx,
+                       "value %ld refers to missing element of table %s",
+                       val, ef_nameof(tabno));
+           return -1;
+       }
     }
     return 0;
 }