private TaintSets AnalyzeNode(XmlNode node)
{
switch (node.LocalName)
{
case AstConstants.Nodes.Expr_BooleanNot:
return Expr_BooleanNot(node);
case AstConstants.Nodes.Expr_FuncCall:
return Node_FuncCall(node);
case AstConstants.Nodes.Stmt_Case:
case AstConstants.Nodes.Stmt_Do:
case AstConstants.Nodes.Stmt_ElseIf:
case AstConstants.Nodes.Stmt_For:
case AstConstants.Nodes.Stmt_If:
case AstConstants.Nodes.Stmt_While:
return Analyze(Conditional.GetCondNode(node));
//case AstConstants.Nodes.Stmt_Switch:
// Conditional sanitization is currently not supported with switches.
// Since they require special handling (the condition is a mix of the switch node as well as the case nodes).
case AstConstants.Nodes.Expr_BinaryOp_Equal:
case AstConstants.Nodes.Expr_BinaryOp_Identical:
return EqualsComparison(node);
case AstConstants.Nodes.Expr_BinaryOp_NotEqual:
case AstConstants.Nodes.Expr_BinaryOp_NotIdentical:
isNegated = !isNegated;
return EqualsComparison(node);
default:
return new TaintSets().ClearTaint();
}
}