diff --git a/src/Type.cc b/src/Type.cc index 80b4e7c18b6..fe58ffbbebe 100644 --- a/src/Type.cc +++ b/src/Type.cc @@ -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); diff --git a/testing/btest/Baseline/language.enum-negative/output b/testing/btest/Baseline/language.enum-negative/output new file mode 100644 index 00000000000..d1c65bc12b0 --- /dev/null +++ b/testing/btest/Baseline/language.enum-negative/output @@ -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 diff --git a/testing/btest/language/enum-negative.zeek b/testing/btest/language/enum-negative.zeek new file mode 100644 index 00000000000..03d1dc02dce --- /dev/null +++ b/testing/btest/language/enum-negative.zeek @@ -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, +};