From a811722d726d6ccc49403710fd695ff66003ced4 Mon Sep 17 00:00:00 2001 From: Tim Wojtulewicz Date: Wed, 12 Apr 2023 16:05:39 -0700 Subject: [PATCH 1/3] Revert "GH-636: Fix regex to handle commas at the end of config parser lines" This reverts commit 05bb50978905a6c3132b20eb2cfd246715f91356. --- src/input/readers/config/Config.cc | 6 ++---- .../scripts.base.frameworks.config.basic/zeek.config.log | 3 +-- testing/btest/scripts/base/frameworks/config/basic.zeek | 1 - 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/input/readers/config/Config.cc b/src/input/readers/config/Config.cc index 3b490f7d8d..948f372c38 100644 --- a/src/input/readers/config/Config.cc +++ b/src/input/readers/config/Config.cc @@ -184,10 +184,8 @@ bool Config::DoUpdate() std::regex re; try { - std::string re_str = Fmt( - "^([^[:blank:]]+)[[:blank:]]+([^[:blank:]](.*[^[:blank:]%c])?)?[[:blank:]%c]*$", - set_separator[0], set_separator[0]); - re.assign(re_str, std::regex::extended); + re.assign("^([^[:blank:]]+)[[:blank:]]+([^[:blank:]](.*[^[:blank:]])?)?[[:blank:]]*$", + std::regex::extended); } catch ( const std::regex_error& e ) { diff --git a/testing/btest/Baseline/scripts.base.frameworks.config.basic/zeek.config.log b/testing/btest/Baseline/scripts.base.frameworks.config.basic/zeek.config.log index ee147dbd53..6d2ab58c17 100644 --- a/testing/btest/Baseline/scripts.base.frameworks.config.basic/zeek.config.log +++ b/testing/btest/Baseline/scripts.base.frameworks.config.basic/zeek.config.log @@ -23,8 +23,7 @@ XXXXXXXXXX.XXXXXX testsub 2607:f8b0:4001::/48 2607:f8b0:4002::/48 ../configfile XXXXXXXXXX.XXXXXX testinterval 1.0 sec 1.0 min ../configfile XXXXXXXXXX.XXXXXX testtime 0.0 XXXXXXXXXX.XXXXXX ../configfile XXXXXXXXXX.XXXXXX test_set (empty) a,d,b,c,erdbeerschnitzel ../configfile -XXXXXXXXXX.XXXXXX test_set a,d,b,c,erdbeerschnitzel a,c,b ../configfile XXXXXXXXXX.XXXXXX test_vector (empty) 1,2,3,4,5,6 ../configfile -XXXXXXXXXX.XXXXXX test_set a,c,b (empty) ../configfile +XXXXXXXXXX.XXXXXX test_set a,d,b,c,erdbeerschnitzel (empty) ../configfile XXXXXXXXXX.XXXXXX test_set (empty) \x2d ../configfile #close XXXX-XX-XX-XX-XX-XX diff --git a/testing/btest/scripts/base/frameworks/config/basic.zeek b/testing/btest/scripts/base/frameworks/config/basic.zeek index c4dd75a6c5..384d4a3303 100644 --- a/testing/btest/scripts/base/frameworks/config/basic.zeek +++ b/testing/btest/scripts/base/frameworks/config/basic.zeek @@ -27,7 +27,6 @@ testsub [2607:f8b0:4002:801::]/48 testinterval 60 testtime 1507321987 test_set a,b,c,d,erdbeerschnitzel -test_set a,b,c, test_vector 1,2,3,4,5,6 test_set test_set - From 777dff18cdc7e0fd3557b4df813b247cafb2bc56 Mon Sep 17 00:00:00 2001 From: Tim Wojtulewicz Date: Wed, 12 Apr 2023 16:05:46 -0700 Subject: [PATCH 2/3] Revert "Convert config framework to use std::regex" This reverts commit 65ee2287e9b74f861872d9e16b9c11fb300cfabd. --- src/input/readers/config/Config.cc | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/src/input/readers/config/Config.cc b/src/input/readers/config/Config.cc index 948f372c38..e019008f81 100644 --- a/src/input/readers/config/Config.cc +++ b/src/input/readers/config/Config.cc @@ -2,11 +2,11 @@ #include "zeek/input/readers/config/Config.h" +#include #include #include #include #include -#include #include #include @@ -181,32 +181,28 @@ bool Config::DoUpdate() unseen_options.insert(i.first); } - std::regex re; - try + regex_t re; + if ( regcomp(&re, "^([^[:blank:]]+)[[:blank:]]+([^[:blank:]](.*[^[:blank:]])?)?[[:blank:]]*$", + REG_EXTENDED) ) { - re.assign("^([^[:blank:]]+)[[:blank:]]+([^[:blank:]](.*[^[:blank:]])?)?[[:blank:]]*$", - std::regex::extended); - } - catch ( const std::regex_error& e ) - { - Error(Fmt("Failed to compile regex: %s", e.what())); + Error(Fmt("Failed to compile regex.")); return true; } while ( GetLine(line) ) { - std::smatch match; - if ( ! std::regex_match(line, match, re) ) + regmatch_t match[3]; + if ( regexec(&re, line.c_str(), 3, match, 0) ) { Warning( Fmt("Could not parse '%s'; line has invalid format. Ignoring line.", line.c_str())); continue; } - std::string key = match[1].str(); + std::string key = line.substr(match[1].rm_so, match[1].rm_eo - match[1].rm_so); std::string value; - if ( match.size() > 2 ) - value = match[2].str(); + if ( match[2].rm_so > 0 ) + value = line.substr(match[2].rm_so, match[2].rm_eo - match[2].rm_so); auto typeit = option_types.find(key); if ( typeit == option_types.end() ) @@ -287,6 +283,8 @@ bool Config::DoUpdate() } } + regfree(&re); + if ( Info().mode != MODE_STREAM ) EndCurrentSend(); From 187773eaa378e73d7150f1ba1bb87fc96a95e830 Mon Sep 17 00:00:00 2001 From: Tim Wojtulewicz Date: Wed, 12 Apr 2023 16:08:26 -0700 Subject: [PATCH 3/3] Reimplement fixes to handle commas at the end of config parser lines --- src/input/readers/config/Config.cc | 7 +++++-- .../scripts.base.frameworks.config.basic/zeek.config.log | 3 ++- testing/btest/scripts/base/frameworks/config/basic.zeek | 1 + 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/input/readers/config/Config.cc b/src/input/readers/config/Config.cc index e019008f81..ad2f46da41 100644 --- a/src/input/readers/config/Config.cc +++ b/src/input/readers/config/Config.cc @@ -181,9 +181,12 @@ bool Config::DoUpdate() unseen_options.insert(i.first); } + std::string re_str = Fmt( + "^([^[:blank:]]+)[[:blank:]]+([^[:blank:]](.*[^[:blank:]%c])?)?[[:blank:]%c]*$", + set_separator[0], set_separator[0]); + regex_t re; - if ( regcomp(&re, "^([^[:blank:]]+)[[:blank:]]+([^[:blank:]](.*[^[:blank:]])?)?[[:blank:]]*$", - REG_EXTENDED) ) + if ( regcomp(&re, re_str.c_str(), REG_EXTENDED) ) { Error(Fmt("Failed to compile regex.")); return true; diff --git a/testing/btest/Baseline/scripts.base.frameworks.config.basic/zeek.config.log b/testing/btest/Baseline/scripts.base.frameworks.config.basic/zeek.config.log index 6d2ab58c17..ee147dbd53 100644 --- a/testing/btest/Baseline/scripts.base.frameworks.config.basic/zeek.config.log +++ b/testing/btest/Baseline/scripts.base.frameworks.config.basic/zeek.config.log @@ -23,7 +23,8 @@ XXXXXXXXXX.XXXXXX testsub 2607:f8b0:4001::/48 2607:f8b0:4002::/48 ../configfile XXXXXXXXXX.XXXXXX testinterval 1.0 sec 1.0 min ../configfile XXXXXXXXXX.XXXXXX testtime 0.0 XXXXXXXXXX.XXXXXX ../configfile XXXXXXXXXX.XXXXXX test_set (empty) a,d,b,c,erdbeerschnitzel ../configfile +XXXXXXXXXX.XXXXXX test_set a,d,b,c,erdbeerschnitzel a,c,b ../configfile XXXXXXXXXX.XXXXXX test_vector (empty) 1,2,3,4,5,6 ../configfile -XXXXXXXXXX.XXXXXX test_set a,d,b,c,erdbeerschnitzel (empty) ../configfile +XXXXXXXXXX.XXXXXX test_set a,c,b (empty) ../configfile XXXXXXXXXX.XXXXXX test_set (empty) \x2d ../configfile #close XXXX-XX-XX-XX-XX-XX diff --git a/testing/btest/scripts/base/frameworks/config/basic.zeek b/testing/btest/scripts/base/frameworks/config/basic.zeek index 384d4a3303..c4dd75a6c5 100644 --- a/testing/btest/scripts/base/frameworks/config/basic.zeek +++ b/testing/btest/scripts/base/frameworks/config/basic.zeek @@ -27,6 +27,7 @@ testsub [2607:f8b0:4002:801::]/48 testinterval 60 testtime 1507321987 test_set a,b,c,d,erdbeerschnitzel +test_set a,b,c, test_vector 1,2,3,4,5,6 test_set test_set -