================
@@ -827,8 +831,40 @@ void GenericTaintChecker::initTaintRules(CheckerContext
&C) const {
std::make_move_iterator(Rules.end()));
}
+// The incoming parameters of the main function get tainted
+// if the program called in an untrusted environment.
+void GenericTaintChecker::checkBeginFunction(CheckerContext &C) const {
+ if (!C.inTopFrame() || C.getAnalysisManager()
+ .getAnalyzerOptions()
+ .ShouldAssumeControlledEnvironment)
+ return;
+
+ const auto *FD = dyn_cast<FunctionDecl>(C.getLocationContext()->getDecl());
+ if (!FD || !FD->isMain() || FD->param_size() < 2)
+ return;
+
+ ProgramStateRef State = C.getState();
+ const MemRegion *ArgvReg =
+ State->getRegion(FD->parameters()[1], C.getLocationContext());
+ SVal ArgvSval = State->getSVal(ArgvReg);
+ // Add taintedness to argv**
+ State = addTaint(State, ArgvSval);
+
+ const NoteTag *OriginatingTag =
+ C.getNoteTag([ArgvSval](PathSensitiveBugReport &BR) -> std::string {
+ // We give diagnostics only for taint related reports
+ if (!BR.isInteresting(ArgvSval) ||
+ BR.getBugType().getCategory() != categories::TaintedData)
----------------
steakhal wrote:
```suggestion
&BR.getBugType().getCategory() != &categories::TaintedData)
```
https://github.com/llvm/llvm-project/pull/178054
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits