private TaintSets EqualsComparison(XmlNode node)
{
if (!isConditional)
{
return null;
}
var leftNode = node.GetSubNode(AstConstants.Subnode + ":" + AstConstants.Subnodes.Left)
.GetSubNodesByPrefix(AstConstants.Node).Single();
var rightNode = node.GetSubNode(AstConstants.Subnode + ":" + AstConstants.Subnodes.Right)
.GetSubNodesByPrefix(AstConstants.Node).Single();
var scalarNodes = new[]
{
AstConstants.Nodes.Scalar_DNumber,
AstConstants.Nodes.Scalar_LNumber,
AstConstants.Nodes.Scalar_MagicConst_Class,
AstConstants.Nodes.Scalar_MagicConst_Dir,
AstConstants.Nodes.Scalar_MagicConst_File,
AstConstants.Nodes.Scalar_MagicConst_Function,
AstConstants.Nodes.Scalar_MagicConst_Line,
AstConstants.Nodes.Scalar_MagicConst_Method,
AstConstants.Nodes.Scalar_MagicConst_Namespace,
AstConstants.Nodes.Scalar_MagicConst_Trait,
AstConstants.Nodes.Scalar_String,
};
if (_varResolver.IsResolvableNode(leftNode) && scalarNodes.Contains(rightNode.LocalName))
{
var varResolver = new VariableResolver(_variables[isNegated ? EdgeType.False : EdgeType.True]);
var var = varResolver.ResolveVariable(leftNode);
var.Variable.Info.Taints = new TaintSets().ClearTaint();
}
else if (scalarNodes.Contains(leftNode.LocalName) && _varResolver.IsResolvableNode(rightNode))
{
var varResolver = new VariableResolver(_variables[isNegated ? EdgeType.False : EdgeType.True]);
var var = varResolver.ResolveVariable(rightNode);
var.Variable.Info.Taints = new TaintSets().ClearTaint();
}
return new TaintSets().ClearTaint();
}