From e5d9a715ced2c303dab8a88d3f12417226f248d0 Mon Sep 17 00:00:00 2001 From: Arne Welzel Date: Tue, 29 Nov 2022 12:12:55 +0100 Subject: [PATCH] input: Add location info for invalid enums Fixes #2613 --- src/input/Manager.cc | 12 ++++++++++-- .../.stderrwithoutfirstline | 2 ++ .../zeek..stderr | 2 +- .../scripts/base/frameworks/input/invalid-lines.zeek | 2 ++ 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/input/Manager.cc b/src/input/Manager.cc index ba1f96a9bd..a8f1d2d94d 100644 --- a/src/input/Manager.cc +++ b/src/input/Manager.cc @@ -2417,8 +2417,16 @@ Val* Manager::ValueToVal(const Stream* i, const Value* val, Type* request_type, zeek_int_t index = request_type->AsEnumType()->Lookup(module, var.c_str()); if ( index == -1 ) { - Warning(i, "Value '%s' for stream '%s' is not a valid enum.", enum_string.c_str(), - i->name.c_str()); + auto source = i->reader->Info().source; + auto file_pos = val->GetFileLineNumber(); + + const char* warning = zeek::util::fmt( + "Value '%s' for stream '%s' is not a valid enum.", enum_string.c_str(), + i->name.c_str()); + if ( source && file_pos != -1 ) + Warning(i, "%s, line %d: %s", source, file_pos, warning); + else + Warning(i, "%s", warning); have_error = true; return nullptr; diff --git a/testing/btest/Baseline/scripts.base.frameworks.input.invalid-lines/.stderrwithoutfirstline b/testing/btest/Baseline/scripts.base.frameworks.input.invalid-lines/.stderrwithoutfirstline index 915e3f00cd..d696d19897 100644 --- a/testing/btest/Baseline/scripts.base.frameworks.input.invalid-lines/.stderrwithoutfirstline +++ b/testing/btest/Baseline/scripts.base.frameworks.input.invalid-lines/.stderrwithoutfirstline @@ -5,6 +5,8 @@ error: ../input.log/Input::READER_ASCII: ../input.log, line 5: Init failed error: ../input.log/Input::READER_ASCII: ../input.log, line 5: Not enough fields in line 'T -41 SSH::LOG 21 123 tcp 10.0.0.0/24 1.2.3.4 3.14 1315801931.273616 100.000000 hurz 2,4,1,3 CC,AA,BB EMPTY 10,20,30' of ../input.log. Found 15 fields, want positions 17 and -1 error: ../input.log/Input::READER_ASCII: ../input.log, line 5: terminating thread received termination signal +warning: ../input.log, line 10: Value 'EMPTY' for stream 'ssh' is not a valid enum. +warning: ../input.log, line 11: Value '' for stream 'ssh' is not a valid enum. warning: ../input.log/Input::READER_ASCII: ../input.log, line 5: Not enough fields in line 'T -41 SSH::LOG 21 123 tcp 10.0.0.0/24 1.2.3.4 3.14 1315801931.273616 100.000000 hurz 2,4,1,3 CC,AA,BB EMPTY 10,20,30' of ../input.log. Found 15 fields, want positions 17 and -1 warning: ../input.log/Input::READER_ASCII: ../input.log, line 7: Tried to parse invalid/unknown protocol: whatever warning: ../input.log/Input::READER_ASCII: ../input.log, line 8: Bad address: 342.2.3.4 diff --git a/testing/btest/Baseline/scripts.base.frameworks.input.missing-enum/zeek..stderr b/testing/btest/Baseline/scripts.base.frameworks.input.missing-enum/zeek..stderr index c5325d4781..d8818fb59a 100644 --- a/testing/btest/Baseline/scripts.base.frameworks.input.missing-enum/zeek..stderr +++ b/testing/btest/Baseline/scripts.base.frameworks.input.missing-enum/zeek..stderr @@ -1,3 +1,3 @@ ### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. -warning: Value 'IdoNot::Exist' for stream 'enum' is not a valid enum. +warning: ../input.log, line 2: Value 'IdoNot::Exist' for stream 'enum' is not a valid enum. received termination signal diff --git a/testing/btest/scripts/base/frameworks/input/invalid-lines.zeek b/testing/btest/scripts/base/frameworks/input/invalid-lines.zeek index 025d802823..25f7197785 100644 --- a/testing/btest/scripts/base/frameworks/input/invalid-lines.zeek +++ b/testing/btest/scripts/base/frameworks/input/invalid-lines.zeek @@ -17,6 +17,8 @@ T -42 SSH::LOG 21 123 tcp 10.0.0.0/24 1.2.3.4 3.14 1315801931.273616 100.000000 T -43 SSH::LOG 21 123 whatever 10.0.0.0/24 1.2.3.4 3.14 1315801931.273616 100.000000 hurz 2,4,1,3 CC,AA,BB EMPTY 10,20,30 EMPTY 4242 HOHOHO T -44 SSH::LOG 21 123 udp 10.0.0.0/24 342.2.3.4 3.14 1315801931.273616 100.000000 hurz 2,4,1,3 CC,AA,BB EMPTY 10,20,30 EMPTY 4242 HOHOHO T -41 +T -41 EMPTY 21 123 tcp 10.0.0.0/24 1.2.3.4 3.14 1315801931.273616 100.000000 hurz 2,4,1,3 CC,AA,BB EMPTY 10,20,30 EMPTY 4242 +T -41 21 123 tcp 10.0.0.0/24 1.2.3.4 3.14 1315801931.273616 100.000000 hurz 2,4,1,3 CC,AA,BB EMPTY 10,20,30 EMPTY 4242 @TEST-END-FILE @load base/protocols/ssh