From 7da9aab5a1e0918baadd3296406e6bf4f9e65aa7 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Mon, 25 Apr 2011 09:45:58 +0200 Subject: [PATCH] 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. --- src/lib/common/ef_verify.c | 7 +++++++ 1 file changed, 7 insertions(+) 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; } -- 2.43.0