From 13f3cb377f5455373342d94a3e33da085baad10c Mon Sep 17 00:00:00 2001 From: Jon Siwek Date: Thu, 29 Apr 2021 15:20:09 -0700 Subject: [PATCH] GH-1534: Fix excessive coredump for duplicate enum definitions An adequate error message was previously reported for duplicate enum definitions, this just now prevents trying to access it as a constant in subsequent parsing and further generating a coredump. --- src/parse.y | 7 +++++++ testing/btest/Baseline/language.enum-name-conflict/output | 1 + testing/btest/language/enum-name-conflict.zeek | 7 +++++++ 3 files changed, 15 insertions(+) diff --git a/src/parse.y b/src/parse.y index 4fd7980625..b7d3017d71 100644 --- a/src/parse.y +++ b/src/parse.y @@ -769,6 +769,13 @@ expr: else if ( id->IsEnumConst() ) { + if ( IsErrorType(id->GetType()->Tag()) ) + { + // The most-relevant error message should already be reported, so + // just bail out. + YYERROR; + } + EnumType* t = id->GetType()->AsEnumType(); auto intval = t->Lookup(id->ModuleName(), id->Name()); if ( intval < 0 ) diff --git a/testing/btest/Baseline/language.enum-name-conflict/output b/testing/btest/Baseline/language.enum-name-conflict/output index e6b5bfadb8..28c87174ca 100644 --- a/testing/btest/Baseline/language.enum-name-conflict/output +++ b/testing/btest/Baseline/language.enum-name-conflict/output @@ -4,3 +4,4 @@ error in <...>/enum-name-conflict.zeek, line 15 and <...>/enum-name-conflict.zee error in <...>/enum-name-conflict.zeek, line 27 and <...>/enum-name-conflict.zeek, line 23: conflicting definition of enum value 'Foo::TWO' in type 'Foo::bf' error in <...>/enum-name-conflict.zeek, line 32 and <...>/enum-name-conflict.zeek, line 22: conflicting definition of enum value 'Foo::ONE' in type 'Foo::bf' error in <...>/enum-name-conflict.zeek, line 41 and <...>/enum-name-conflict.zeek, line 38: conflicting definition of enum value 'NOPE' in type 'a' +error in <...>/enum-name-conflict.zeek, line 46 and <...>/enum-name-conflict.zeek, line 45: conflicting definition of enum value 'Pink' in type 'E' diff --git a/testing/btest/language/enum-name-conflict.zeek b/testing/btest/language/enum-name-conflict.zeek index d8dd50ce09..21db38c55d 100644 --- a/testing/btest/language/enum-name-conflict.zeek +++ b/testing/btest/language/enum-name-conflict.zeek @@ -40,3 +40,10 @@ global NOPE = 37; redef enum a += { NOPE, }; + +type E: enum { Red, Green, Blue }; +redef enum E += { Pink }; +redef enum E += { Pink }; + +print Pink; +print Pink;