================ @@ -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(); + + const ExplodedNode *Pred = N; + while (N) { + State = N->getState(); + if (!State->get<ChrootCall>()) + return Pred; + Pred = N; + N = N->getFirstPred(); + } ---------------- vabridgers wrote:
See my prior comments. Working on a different approach for the problem. 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