(verify_row): Check all values against symbol tables, not just

non-negative ones.

(verify_row): Fix off by one in non-symbol table index check.
This commit is contained in:
Markus Armbruster 2006-02-06 07:57:04 +00:00
parent 8ae71216d4
commit 973da267eb

View file

@ -103,23 +103,21 @@ verify_row(int type, int row)
} else if (ca_sym == symbol_ca) { } else if (ca_sym == symbol_ca) {
/* symbol */ /* symbol */
if (val.val_as.lng > -1) { if (!symbol_by_value(val.val_as.lng,
if (!symbol_by_value(val.val_as.lng, ef_ptr(ca[i].ca_table, 0))) {
ef_ptr(ca[i].ca_table,0))) { fprintf(stderr, "value %ld not found in "
fprintf(stderr, "value %ld not found in " "symbol table %s when verify table %s "
"symbol table %s when verify table %s " "row %d field %s\n",
"row %d field %s\n", val.val_as.lng,
val.val_as.lng, ef_nameof(ca[i].ca_table),
ef_nameof(ca[i].ca_table), ef_nameof(type), row + 1,
ef_nameof(type), row + 1, ca[i].ca_name);
ca[i].ca_name); ret_val = -1;
ret_val = -1;
}
} }
} else { } else {
/* table index */ /* table index */
if (val.val_as.lng >= ef_nelem(ca[i].ca_table) || if (val.val_as.lng >= ef_nelem(ca[i].ca_table)
val.val_as.lng < -2) { || val.val_as.lng < -1) {
fprintf(stderr, "Table index %ld to table %s " fprintf(stderr, "Table index %ld to table %s "
"out of range, nelements %d for table %s " "out of range, nelements %d for table %s "
"row %d field %s\n", "row %d field %s\n",