================ @@ -104,15 +146,35 @@ void ChrootChecker::evalChdir(const CallEvent &Call, CheckerContext &C) const { R = R->StripCasts(); if (const StringRegion* StrRegion= dyn_cast<StringRegion>(R)) { const StringLiteral* Str = StrRegion->getStringLiteral(); - if (Str->getString() == "/") - state = Mgr.addGDM(state, ChrootChecker::getTag(), - (void*) JAIL_ENTERED); + if (Str->getString() == "/") { + state = state->set<ChrootState>(JAIL_ENTERED); + } } } C.addTransition(state); } +const ExplodedNode *ChrootChecker::getAcquisitionSite(const ExplodedNode *N, + CheckerContext &C) { + ProgramStateRef State = N->getState(); + // When bug type is resource leak, exploded node N may not have state info + // for leaked file descriptor, but predecessor should have it. + if (!State->get<ChrootCall>()) + N = N->getFirstPred(); ---------------- steakhal wrote:
I guess this is because leaks are issued when symbols are garbage collected, thus the state after that collection no longer has the symbol, nor any metadata associated with it. I think this deserves to be written explicitly. https://github.com/llvm/llvm-project/pull/117791 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits