Skip to content

Commit

Permalink
parser-cov: further tweaks to key event matching
Browse files Browse the repository at this point in the history
  • Loading branch information
kdudka committed Apr 18, 2024
1 parent 6477631 commit 0334004
Show file tree
Hide file tree
Showing 9 changed files with 2,014 additions and 7 deletions.
29 changes: 25 additions & 4 deletions src/lib/parser-cov.cc
Original file line number Diff line number Diff line change
Expand Up @@ -231,6 +231,7 @@ KeyEventDigger::KeyEventDigger():
d->hMap["ARRAY_VS_SINGLETON"] .insert("callee_ptr_arith");
d->hMap["ARRAY_VS_SINGLETON"] .insert("ptr_arith");
d->hMap["ATOMICITY"] .insert("use");
d->hMap["BAD_CHECK_OF_WAIT_COND"] .insert("dead_wait");
d->hMap["BAD_CHECK_OF_WAIT_COND"] .insert("wait_cond_improperly_checked");
d->hMap["BAD_FREE"] .insert("incorrect_free");
d->hMap["BAD_LOCK_OBJECT"] .insert("boxed_lock");
Expand Down Expand Up @@ -290,6 +291,7 @@ KeyEventDigger::KeyEventDigger():
d->hMap["VARARGS"] .insert("missing_va_end");
d->hMap["WRAPPER_ESCAPE"] .insert("escape");
d->hMap["WRAPPER_ESCAPE"] .insert("use_after_free");
d->hMap["XSS"] .insert("sink");

// we use COMPILER_WARNING as checker for compiler errors/warnings
d->hMap["COMPILER_WARNING"] .insert("error");
Expand Down Expand Up @@ -317,6 +319,7 @@ KeyEventDigger::KeyEventDigger():
d->searchBackwards.insert("INSUFFICIENT_LOGGING");
d->searchBackwards.insert("LOCK");
d->searchBackwards.insert("INVALIDATE_ITERATOR");
d->searchBackwards.insert("INTEGER_OVERFLOW");
d->searchBackwards.insert("NULL_RETURNS");
d->searchBackwards.insert("OVERRUN");
d->searchBackwards.insert("PATH_MANIPULATION");
Expand Down Expand Up @@ -379,6 +382,19 @@ KeyEventDigger::~KeyEventDigger()
delete d;
}

/// FIXME: will not be needed with c++20
bool startsWith(std::string input, const std::string &prefix)
{
const size_t prefixLen = prefix.size();
if (input.size() < prefixLen)
// input shorter than the prefix we look for
return false;

// cut the input beyond prefixLen and compare for equality
input.resize(prefixLen);
return (input == prefix);
}

bool KeyEventDigger::guessKeyEvent(Defect *def)
{
const std::vector<DefEvent> &evtList = def->events;
Expand All @@ -390,15 +406,20 @@ bool KeyEventDigger::guessKeyEvent(Defect *def)
const Private::TSet *pKeyEvents = &defKeyEvent;

Private::TMap::const_iterator it = d->hMap.find(def->checker);
if (d->hMap.end() == it) {
if (d->hMap.end() != it) {
// use the corresponding set of events from d->hMap
pKeyEvents = &it->second;
}
else if (startsWith(def->checker, "SIGMA.")) {
// all SIGMA.* checkers use the same key event
defKeyEvent.insert("Sigma main event");
}
else {
// no override for the checker -> match the lowered checker name
std::string str(def->checker);
boost::algorithm::to_lower(str);
defKeyEvent.insert(str);
}
else
// use the corresponding set of events from d->hMap
pKeyEvents = &it->second;

// look for an explicitly defined key event
bool found = false;
Expand Down
2 changes: 2 additions & 0 deletions tests/csdiff/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -84,5 +84,7 @@ test_csdiff(diff-misc 16-cov-parser-key-event)
test_csdiff(diff-misc 17-cov-parser-key-event)
test_csdiff(diff-misc 18-cov-parser-key-event)
test_csdiff(diff-misc 19-cov-parser-key-event)
test_csdiff(diff-misc 19-cov-parser-key-event)
test_csdiff(diff-misc 23-cov-parser-key-event)

add_subdirectory(filter-file)
Empty file.
Empty file.
Empty file.
Empty file.
246 changes: 246 additions & 0 deletions tests/csdiff/diff-misc/23-cov-parser-key-event-new.err

Large diffs are not rendered by default.

Loading

0 comments on commit 0334004

Please sign in to comment.