// Use not for leaks but useful to remove our stored symbols void iOSAppSecInsecureKeyChainStorageChecker::checkDeadSymbols(SymbolReaper &SymReaper, CheckerContext &C) const { ProgramStateRef pProgState = C.getState() ; StreamMapTy TrackedStreams = pProgState ->get<StreamMap>() ; for (StreamMapTy::iterator I = TrackedStreams.begin(), E = TrackedStreams.end(); I != E; ++I) { SymbolRef pSymbol = I ->first ; // Remove the dead symbol from the streams map. if ( SymReaper.isDead( pSymbol ) ) { pProgState = pProgState -> remove<StreamMap>( pSymbol ) ; } } C.addTransition( pProgState ) ; }
void SimpleStreamChecker::checkDeadSymbols(SymbolReaper &SymReaper, CheckerContext &C) const { ProgramStateRef State = C.getState(); SymbolVector LeakedStreams; StreamMapTy TrackedStreams = State->get<StreamMap>(); for (StreamMapTy::iterator I = TrackedStreams.begin(), E = TrackedStreams.end(); I != E; ++I) { SymbolRef Sym = I->first; bool IsSymDead = SymReaper.isDead(Sym); // Collect leaked symbols. if (isLeaked(Sym, I->second, IsSymDead, State)) LeakedStreams.push_back(Sym); // Remove the dead symbol from the streams map. if (IsSymDead) State = State->remove<StreamMap>(Sym); } ExplodedNode *N = C.addTransition(State); reportLeaks(LeakedStreams, C, N); }