private TaintSets Node_FuncCall(XmlNode node)
{
if (!isConditional)
{
return null;
}
// We use the True scope as both True and False are the same at this point in time
var functionCallExtractor = new FunctionCallExtractor();
var functionCall = functionCallExtractor.ExtractFunctionCall(node);
FunctionsHandler fh = FunctionsHandler.Instance;
var condSaniFunc = fh.FindCondSanitizerByName(functionCall.Name);
if (condSaniFunc != null)
{
var parameter = functionCall.Arguments;
var varResolverFalse = new VariableResolver(_variables[EdgeType.False]);
if (parameter.Any(x => varResolverFalse.IsResolvableNode(x.Value))
&& condSaniFunc.DefaultStatus == MixedStatus.XSSSQL_SAFE)
{
if (isNegated)
{
var var = varResolverFalse.ResolveVariable(parameter.First(x => varResolverFalse.IsResolvableNode(x.Value)).Value);
var.Variable.Info.Taints = new TaintSets().ClearTaint();
}
else
{
var varResolverTrue = new VariableResolver(_variables[EdgeType.True]);
var var = varResolverTrue.ResolveVariable(parameter.First(x => varResolverTrue.IsResolvableNode(x.Value)).Value);
var.Variable.Info.Taints = new TaintSets().ClearTaint();
}
}
}
return new TaintSets().ClearTaint();
}