@@ -231,6 +231,7 @@ KeyEventDigger::KeyEventDigger():
231
231
d->hMap [" ARRAY_VS_SINGLETON" ] .insert (" callee_ptr_arith" );
232
232
d->hMap [" ARRAY_VS_SINGLETON" ] .insert (" ptr_arith" );
233
233
d->hMap [" ATOMICITY" ] .insert (" use" );
234
+ d->hMap [" BAD_CHECK_OF_WAIT_COND" ] .insert (" dead_wait" );
234
235
d->hMap [" BAD_CHECK_OF_WAIT_COND" ] .insert (" wait_cond_improperly_checked" );
235
236
d->hMap [" BAD_FREE" ] .insert (" incorrect_free" );
236
237
d->hMap [" BAD_LOCK_OBJECT" ] .insert (" boxed_lock" );
@@ -290,6 +291,7 @@ KeyEventDigger::KeyEventDigger():
290
291
d->hMap [" VARARGS" ] .insert (" missing_va_end" );
291
292
d->hMap [" WRAPPER_ESCAPE" ] .insert (" escape" );
292
293
d->hMap [" WRAPPER_ESCAPE" ] .insert (" use_after_free" );
294
+ d->hMap [" XSS" ] .insert (" sink" );
293
295
294
296
// we use COMPILER_WARNING as checker for compiler errors/warnings
295
297
d->hMap [" COMPILER_WARNING" ] .insert (" error" );
@@ -317,6 +319,7 @@ KeyEventDigger::KeyEventDigger():
317
319
d->searchBackwards .insert (" INSUFFICIENT_LOGGING" );
318
320
d->searchBackwards .insert (" LOCK" );
319
321
d->searchBackwards .insert (" INVALIDATE_ITERATOR" );
322
+ d->searchBackwards .insert (" INTEGER_OVERFLOW" );
320
323
d->searchBackwards .insert (" NULL_RETURNS" );
321
324
d->searchBackwards .insert (" OVERRUN" );
322
325
d->searchBackwards .insert (" PATH_MANIPULATION" );
@@ -379,6 +382,19 @@ KeyEventDigger::~KeyEventDigger()
379
382
delete d;
380
383
}
381
384
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
+
382
398
bool KeyEventDigger::guessKeyEvent (Defect *def)
383
399
{
384
400
const std::vector<DefEvent> &evtList = def->events ;
@@ -390,15 +406,20 @@ bool KeyEventDigger::guessKeyEvent(Defect *def)
390
406
const Private::TSet *pKeyEvents = &defKeyEvent;
391
407
392
408
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 {
394
418
// no override for the checker -> match the lowered checker name
395
419
std::string str (def->checker );
396
420
boost::algorithm::to_lower (str);
397
421
defKeyEvent.insert (str);
398
422
}
399
- else
400
- // use the corresponding set of events from d->hMap
401
- pKeyEvents = &it->second ;
402
423
403
424
// look for an explicitly defined key event
404
425
bool found = false ;
0 commit comments