diff --git a/src/Attr.cc b/src/Attr.cc index 8f6b54a13c..a5046dd764 100644 --- a/src/Attr.cc +++ b/src/Attr.cc @@ -195,6 +195,12 @@ Attributes::Attributes(std::vector a, void Attributes::AddAttr(AttrPtr attr) { + // Display a warning for duplicated tags on a type. &log tags are intentionally + // ignored here because duplicate log tags on record types are valid, and don't + // cause any significant breakage for other types. + if ( attr->Tag() != ATTR_LOG && Find(attr->Tag()) ) + reporter->Warning("Found duplicate tag %s", attr_name(attr->Tag())); + // We overwrite old attributes by deleting them first. RemoveAttr(attr->Tag()); attrs_list.push_back(attr.get()); diff --git a/testing/btest/Baseline/language.attr-default-global-set-error/out b/testing/btest/Baseline/language.attr-default-global-set-error/out index ddcc6a8345..27ebbf3356 100644 --- a/testing/btest/Baseline/language.attr-default-global-set-error/out +++ b/testing/btest/Baseline/language.attr-default-global-set-error/out @@ -1,5 +1,6 @@ -error in /home/jon/pro/zeek/zeek/testing/btest/.tmp/language.attr-default-global-set-error/attr-default-global-set-error.zeek, line 4: &default is not valid for global variables except for tables (&default=0) -error in /home/jon/pro/zeek/zeek/testing/btest/.tmp/language.attr-default-global-set-error/attr-default-global-set-error.zeek, line 9: &default is not valid for global variables except for tables (&default=10) -error in /home/jon/pro/zeek/zeek/testing/btest/.tmp/language.attr-default-global-set-error/attr-default-global-set-error.zeek, line 9: &default is not valid for global variables except for tables (&default=9) -error in /home/jon/pro/zeek/zeek/testing/btest/.tmp/language.attr-default-global-set-error/attr-default-global-set-error.zeek, line 9: &optional is not valid for global variables (&default=9, &optional) -error in /home/jon/pro/zeek/zeek/testing/btest/.tmp/language.attr-default-global-set-error/attr-default-global-set-error.zeek, line 10: &default is not valid for global variables except for tables (&default=set()) +error in /mnt/data/tim/zeek/testing/btest/.tmp/language.attr-default-global-set-error/attr-default-global-set-error.zeek, line 4: &default is not valid for global variables except for tables (&default=0) +error in /mnt/data/tim/zeek/testing/btest/.tmp/language.attr-default-global-set-error/attr-default-global-set-error.zeek, line 9: &default is not valid for global variables except for tables (&default=10) +warning in /mnt/data/tim/zeek/testing/btest/.tmp/language.attr-default-global-set-error/attr-default-global-set-error.zeek, line 9: Found duplicate tag &default +error in /mnt/data/tim/zeek/testing/btest/.tmp/language.attr-default-global-set-error/attr-default-global-set-error.zeek, line 9: &default is not valid for global variables except for tables (&default=9) +error in /mnt/data/tim/zeek/testing/btest/.tmp/language.attr-default-global-set-error/attr-default-global-set-error.zeek, line 9: &optional is not valid for global variables (&default=9, &optional) +error in /mnt/data/tim/zeek/testing/btest/.tmp/language.attr-default-global-set-error/attr-default-global-set-error.zeek, line 10: &default is not valid for global variables except for tables (&default=set()) diff --git a/testing/btest/Baseline/language.duplicate-attributes/out b/testing/btest/Baseline/language.duplicate-attributes/out new file mode 100644 index 0000000000..422d5f94e1 --- /dev/null +++ b/testing/btest/Baseline/language.duplicate-attributes/out @@ -0,0 +1,2 @@ +warning in /Users/tim/Desktop/projects/zeek/testing/btest/.tmp/language.duplicate-attributes/duplicate-attributes.zeek, line 6: Found duplicate tag &default +warning in /Users/tim/Desktop/projects/zeek/testing/btest/.tmp/language.duplicate-attributes/duplicate-attributes.zeek, line 6: Found duplicate tag &read_expire diff --git a/testing/btest/language/duplicate-attributes.zeek b/testing/btest/language/duplicate-attributes.zeek new file mode 100644 index 0000000000..b25a45d033 --- /dev/null +++ b/testing/btest/language/duplicate-attributes.zeek @@ -0,0 +1,6 @@ +# @TEST-EXEC: zeek -b %INPUT >out 2>&1 +# @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-remove-abspath btest-diff out + +global a: table[count] of count + &default = 10 &default = 9 + &read_expire = 5 sec &read_expire = 1 min;