Add enum value negative check

There was one already at parse time, this adds a check later so that
cases like overflows or internal enums with negative values get caught.
This commit is contained in:
Evan Typanski 2024-09-17 12:04:19 -04:00
parent d3dd8a155d
commit 08348cd177
3 changed files with 16 additions and 0 deletions

View file

@ -1542,6 +1542,12 @@ void EnumType::CheckAndAddName(const string& module_name, const char* name, zeek
return;
}
if ( val < 0 ) {
reporter->Error("enumerator value cannot be negative");
SetError();
return;
}
auto fullname = detail::make_full_var_name(module_name.c_str(), name);
auto id = id::find(fullname);

View file

@ -0,0 +1,3 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
error in <...>/enum-negative.zeek, line 5: enumerator is not a count constant
error in <...>/enum-negative.zeek, line 6: enumerator value cannot be negative

View file

@ -0,0 +1,7 @@
# @TEST-EXEC-FAIL: zeek -b %INPUT >output 2>&1
# @TEST-EXEC: TEST_DIFF_CANONIFIER="$SCRIPTS/diff-remove-abspath" btest-diff output
type my_enum: enum {
explicitly_negative = -1,
overflow = 9223372036854775808,
};