From 8d853872a4c05a3192fedd0a9f0818f143b14d7a Mon Sep 17 00:00:00 2001 From: Jan Grashoefer Date: Thu, 16 Jun 2016 01:02:51 +0200 Subject: [PATCH] Fixed &default values ignored by input framework. Reading into a record, the input framework will no longer reset a &default value in case there is no value to read. --- src/input/Manager.cc | 3 +- .../scripts.base.frameworks.input.default/out | 8 ++++ .../scripts/base/frameworks/input/default.bro | 48 +++++++++++++++++++ 3 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 testing/btest/Baseline/scripts.base.frameworks.input.default/out create mode 100644 testing/btest/scripts/base/frameworks/input/default.bro diff --git a/src/input/Manager.cc b/src/input/Manager.cc index 5abba86ea0..8f8f519dcd 100644 --- a/src/input/Manager.cc +++ b/src/input/Manager.cc @@ -1917,7 +1917,8 @@ RecordVal* Manager::ValueToRecordVal(const Stream* stream, const Value* const *v (*position)++; } - rec->Assign(i, fieldVal); + if ( fieldVal ) + rec->Assign(i, fieldVal); } return rec; diff --git a/testing/btest/Baseline/scripts.base.frameworks.input.default/out b/testing/btest/Baseline/scripts.base.frameworks.input.default/out new file mode 100644 index 0000000000..5c4d6d0d78 --- /dev/null +++ b/testing/btest/Baseline/scripts.base.frameworks.input.default/out @@ -0,0 +1,8 @@ +[i=1, b=T, s=leer] +[i=2, b=T, s=leer] +[i=3, b=F, s=leer] +[i=4, b=F, s=leer] +[i=5, b=F, s=leer] +[i=6, b=F, s=leer] +[i=7, b=T, s=leer] +End-of-data diff --git a/testing/btest/scripts/base/frameworks/input/default.bro b/testing/btest/scripts/base/frameworks/input/default.bro new file mode 100644 index 0000000000..dc9574dfa2 --- /dev/null +++ b/testing/btest/scripts/base/frameworks/input/default.bro @@ -0,0 +1,48 @@ +# @TEST-EXEC: btest-bg-run bro bro -b %INPUT +# @TEST-EXEC: btest-bg-wait 10 +# @TEST-EXEC: btest-diff out + +@TEST-START-FILE input.log +#separator \x09 +#path ssh +#fields i b +#types int bool +1 T +2 T +3 F +4 F +5 F +6 F +7 T +@TEST-END-FILE + +redef exit_only_after_terminate = T; + +global outfile: file; + +module A; + +type Val: record { + i: int; + b: bool; + s: string &default="leer"; +}; + +event line(description: Input::EventDescription, tpe: Input::Event, val: Val) + { + print outfile, val; + } + +event bro_init() + { + outfile = open("../out"); + Input::add_event([$source="../input.log", $name="input", $fields=Val, $ev=line, $want_record=T]); + } + +event Input::end_of_data(name: string, source:string) + { + print outfile, "End-of-data"; + Input::remove("input"); + close(outfile); + terminate(); + }