mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 22:58:20 +00:00
Define ordering on Rule instances and use on sets in RuleMatcher
Establishing reliable ordering fixes a test failure we're seeing on Alpine for the signatures/tcp-end-of-match btest, since discrepancies in rule match traversal could lead to discrepancies in corresponding event ordering.
This commit is contained in:
parent
42cf86b503
commit
2e03fbb8b0
3 changed files with 13 additions and 4 deletions
|
@ -59,6 +59,9 @@ public:
|
|||
|
||||
void PrintDebug();
|
||||
|
||||
bool operator==(const Rule& other) { return strcmp(ID(), other.ID()) == 0; }
|
||||
bool operator<(const Rule& other) { return strcmp(ID(), other.ID()) < 0; }
|
||||
|
||||
static const char* TypeToString(Rule::PatternType type);
|
||||
|
||||
private:
|
||||
|
|
|
@ -658,7 +658,8 @@ RuleMatcher::MIME_Matches* RuleMatcher::Match(RuleFileMagicState* state, const u
|
|||
}
|
||||
|
||||
// Find rules for which patterns have matched.
|
||||
set<Rule*> rule_matches;
|
||||
auto cmp = [](Rule* a, Rule* b) { return *a < *b; };
|
||||
set<Rule*, decltype(cmp)> rule_matches(cmp);
|
||||
|
||||
for ( AcceptingMatchSet::const_iterator it = accepted_matches.begin(); it != accepted_matches.end(); ++it ) {
|
||||
auto [aidx, mpos] = *it;
|
||||
|
@ -842,7 +843,12 @@ void RuleMatcher::Match(RuleEndpointState* state, Rule::PatternType type, const
|
|||
// matched patterns per connection (which is a plausible assumption).
|
||||
|
||||
// Find rules for which patterns have matched.
|
||||
set<pair<Rule*, MatchPos>> rule_matches;
|
||||
auto cmp = [](pair<Rule*, MatchPos> a, pair<Rule*, MatchPos> b) {
|
||||
if ( *a.first == *b.first )
|
||||
return a.second < b.second;
|
||||
return *a.first < *b.first;
|
||||
};
|
||||
set<pair<Rule*, MatchPos>, decltype(cmp)> rule_matches(cmp);
|
||||
|
||||
for ( AcceptingMatchSet::const_iterator it = accepted_matches.begin(); it != accepted_matches.end(); ++it ) {
|
||||
AcceptIdx aidx = it->first;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||
signature_match, message, 1448
|
||||
signature_match with end_of_match, message, 1448, rather than all. (Robin Sommer)\x0a\x0a * Fix parallel make portability
|
||||
portability_match with end_of_match, 1448, rather than all. (Robin Sommer)\x0a\x0a * Fix parallel make portability
|
||||
portability_match, 1448
|
||||
portability_match_with_msg with end_of_match, custom message, 1448, 69, rather than all. (Robin Sommer)\x0a\x0a * Fix parallel make portability
|
||||
portability_match_with_msg, custom message, 1448
|
||||
signature_match, message, 1448
|
||||
signature_match with end_of_match, message, 1448, rather than all. (Robin Sommer)\x0a\x0a * Fix parallel make portability
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue