Skip to content

Commit 698d0c6

Browse files
committed
parser-cov: further tweaks to key event matching
Resolves: https://issues.redhat.com/browse/OSH-622
1 parent 6477631 commit 698d0c6

9 files changed

+2014
-7
lines changed

src/lib/parser-cov.cc

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,7 @@ KeyEventDigger::KeyEventDigger():
231231
d->hMap["ARRAY_VS_SINGLETON"] .insert("callee_ptr_arith");
232232
d->hMap["ARRAY_VS_SINGLETON"] .insert("ptr_arith");
233233
d->hMap["ATOMICITY"] .insert("use");
234+
d->hMap["BAD_CHECK_OF_WAIT_COND"] .insert("dead_wait");
234235
d->hMap["BAD_CHECK_OF_WAIT_COND"] .insert("wait_cond_improperly_checked");
235236
d->hMap["BAD_FREE"] .insert("incorrect_free");
236237
d->hMap["BAD_LOCK_OBJECT"] .insert("boxed_lock");
@@ -290,6 +291,7 @@ KeyEventDigger::KeyEventDigger():
290291
d->hMap["VARARGS"] .insert("missing_va_end");
291292
d->hMap["WRAPPER_ESCAPE"] .insert("escape");
292293
d->hMap["WRAPPER_ESCAPE"] .insert("use_after_free");
294+
d->hMap["XSS"] .insert("sink");
293295

294296
// we use COMPILER_WARNING as checker for compiler errors/warnings
295297
d->hMap["COMPILER_WARNING"] .insert("error");
@@ -317,6 +319,7 @@ KeyEventDigger::KeyEventDigger():
317319
d->searchBackwards.insert("INSUFFICIENT_LOGGING");
318320
d->searchBackwards.insert("LOCK");
319321
d->searchBackwards.insert("INVALIDATE_ITERATOR");
322+
d->searchBackwards.insert("INTEGER_OVERFLOW");
320323
d->searchBackwards.insert("NULL_RETURNS");
321324
d->searchBackwards.insert("OVERRUN");
322325
d->searchBackwards.insert("PATH_MANIPULATION");
@@ -379,6 +382,19 @@ KeyEventDigger::~KeyEventDigger()
379382
delete d;
380383
}
381384

385+
/// FIXME: will not be needed with c++20
386+
bool startsWith(std::string input, const std::string &prefix)
387+
{
388+
const size_t prefixLen = prefix.size();
389+
if (input.size() < prefixLen)
390+
// input shorter than the prefix we look for
391+
return false;
392+
393+
// cut the input beyond prefixLen and compare for equality
394+
input.resize(prefixLen);
395+
return (input == prefix);
396+
}
397+
382398
bool KeyEventDigger::guessKeyEvent(Defect *def)
383399
{
384400
const std::vector<DefEvent> &evtList = def->events;
@@ -390,15 +406,20 @@ bool KeyEventDigger::guessKeyEvent(Defect *def)
390406
const Private::TSet *pKeyEvents = &defKeyEvent;
391407

392408
Private::TMap::const_iterator it = d->hMap.find(def->checker);
393-
if (d->hMap.end() == it) {
409+
if (d->hMap.end() != it) {
410+
// use the corresponding set of events from d->hMap
411+
pKeyEvents = &it->second;
412+
}
413+
else if (startsWith(def->checker, "SIGMA.")) {
414+
// all SIGMA.* checkers use the same key event
415+
defKeyEvent.insert("Sigma main event");
416+
}
417+
else {
394418
// no override for the checker -> match the lowered checker name
395419
std::string str(def->checker);
396420
boost::algorithm::to_lower(str);
397421
defKeyEvent.insert(str);
398422
}
399-
else
400-
// use the corresponding set of events from d->hMap
401-
pKeyEvents = &it->second;
402423

403424
// look for an explicitly defined key event
404425
bool found = false;

tests/csdiff/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,5 +84,7 @@ test_csdiff(diff-misc 16-cov-parser-key-event)
8484
test_csdiff(diff-misc 17-cov-parser-key-event)
8585
test_csdiff(diff-misc 18-cov-parser-key-event)
8686
test_csdiff(diff-misc 19-cov-parser-key-event)
87+
test_csdiff(diff-misc 19-cov-parser-key-event)
88+
test_csdiff(diff-misc 23-cov-parser-key-event)
8789

8890
add_subdirectory(filter-file)

tests/csdiff/diff-misc/23-cov-parser-key-event-add-z.err

Whitespace-only changes.

tests/csdiff/diff-misc/23-cov-parser-key-event-add.err

Whitespace-only changes.

tests/csdiff/diff-misc/23-cov-parser-key-event-fix-z.err

Whitespace-only changes.

tests/csdiff/diff-misc/23-cov-parser-key-event-fix.err

Whitespace-only changes.

tests/csdiff/diff-misc/23-cov-parser-key-event-new.err

Lines changed: 246 additions & 0 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)