From: Markus Armbruster Date: Mon, 25 Apr 2011 07:45:58 +0000 (+0200) Subject: Verify game state and configuration reference sanity X-Git-Tag: v4.3.28~43 X-Git-Url: http://git.pond.sub.org/?p=empserver;a=commitdiff_plain;h=7da9aab5a1e0918baadd3296406e6bf4f9e65aa7 Verify game state and configuration reference sanity 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. --- diff --git a/src/lib/common/ef_verify.c b/src/lib/common/ef_verify.c index 1ddd89e09..a288cb4fd 100644 --- a/src/lib/common/ef_verify.c +++ b/src/lib/common/ef_verify.c @@ -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; }