const ProgramState* addTaint(SymbolRef S,
TaintTagType Kind = TaintTagGeneric) const;
+ /// Create a new state in which the region symbol is marked as tainted.
+ const ProgramState* addTaint(const MemRegion *R,
+ TaintTagType Kind = TaintTagGeneric) const;
+
/// Check if the statement is tainted in the current state.
bool isTainted(const Stmt *S, TaintTagType Kind = TaintTagGeneric) const;
bool isTainted(SVal V, TaintTagType Kind = TaintTagGeneric) const;
return addTaint(Sym, Kind);
const MemRegion *R = getSVal(S).getAsRegion();
- if (const SymbolicRegion *SR = dyn_cast_or_null<SymbolicRegion>(R))
- return addTaint(SR->getSymbol(), Kind);
+ addTaint(R, Kind);
// Cannot add taint, so just return the state.
return this;
}
+const ProgramState* ProgramState::addTaint(const MemRegion *R,
+ TaintTagType Kind) const {
+ if (const SymbolicRegion *SR = dyn_cast_or_null<SymbolicRegion>(R))
+ return addTaint(SR->getSymbol(), Kind);
+ return this;
+}
+
const ProgramState* ProgramState::addTaint(SymbolRef Sym,
TaintTagType Kind) const {
const ProgramState *NewState = set<TaintMap>(Sym, Kind);