diff --git a/CHANGES b/CHANGES index b57e714b72..4999395440 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,15 @@ +6.0.0-dev.359 | 2023-04-13 08:57:22 -0700 + + * Reimplement fixes to handle commas at the end of config parser lines (Tim Wojtulewicz, Corelight) + + * Revert "Convert config framework to use std::regex" (Tim Wojtulewicz, Corelight) + + This reverts commit 65ee2287e9b74f861872d9e16b9c11fb300cfabd. + + * Revert "GH-636: Fix regex to handle commas at the end of config parser lines" (Tim Wojtulewicz, Corelight) + + This reverts commit 05bb50978905a6c3132b20eb2cfd246715f91356. + 6.0.0-dev.355 | 2023-04-13 09:24:19 +0200 * logging/Manager: Fix crash for rotation format function not returning (Arne Welzel, Corelight) diff --git a/VERSION b/VERSION index c83ce9b1f2..b0261bf904 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -6.0.0-dev.355 +6.0.0-dev.359 diff --git a/src/input/readers/config/Config.cc b/src/input/readers/config/Config.cc index 3b490f7d8d..ad2f46da41 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,34 +181,31 @@ bool Config::DoUpdate() unseen_options.insert(i.first); } - std::regex re; - try + std::string re_str = Fmt( + "^([^[:blank:]]+)[[:blank:]]+([^[:blank:]](.*[^[:blank:]%c])?)?[[:blank:]%c]*$", + set_separator[0], set_separator[0]); + + regex_t re; + if ( regcomp(&re, re_str.c_str(), REG_EXTENDED) ) { - 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); - } - 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() ) @@ -289,6 +286,8 @@ bool Config::DoUpdate() } } + regfree(&re); + if ( Info().mode != MODE_STREAM ) EndCurrentSend();