@@ -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" );
@@ -315,8 +317,9 @@ KeyEventDigger::KeyEventDigger():
315317 d->searchBackwards .insert (" HARDCODED_CREDENTIALS" );
316318 d->searchBackwards .insert (" HEADER_INJECTION" );
317319 d->searchBackwards .insert (" INSUFFICIENT_LOGGING" );
318- d->searchBackwards .insert (" LOCK " );
320+ d->searchBackwards .insert (" INTEGER_OVERFLOW " );
319321 d->searchBackwards .insert (" INVALIDATE_ITERATOR" );
322+ d->searchBackwards .insert (" LOCK" );
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+ // the input is shorter than the prefix we are looking 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+
382398bool 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 ;
0 commit comments