PHPAnalysis.Analysis.CFG.Taint.ConditionTaintAnalyser.AnalyzeCond C# (CSharp) Метод

AnalyzeCond() публичный Метод

public AnalyzeCond ( XmlNode node, ImmutableVariableStorage knownTaint ) : ImmutableVariableStorage>.IImmutableDictionary
node System.Xml.XmlNode
knownTaint ImmutableVariableStorage
Результат ImmutableVariableStorage>.IImmutableDictionary
        public IImmutableDictionary<EdgeType, ImmutableVariableStorage> AnalyzeCond(XmlNode node, ImmutableVariableStorage knownTaint)
        {
            Preconditions.NotNull(knownTaint, "knownTaint");

            _variables.Remove(EdgeType.Normal);
            _variables.Add(EdgeType.Normal, knownTaint.ToMutable());
            _varResolver = new VariableResolver(_variables[EdgeType.Normal], _analysisScope);

            _variables.Remove(EdgeType.False);
            _variables.Remove(EdgeType.True);

            Analyze(node);
            isConditional = false;

            var variablestore = _variables.Keys.ToDictionary(edgetype => edgetype, edgetype => ImmutableVariableStorage.CreateFromMutable(_variables[edgetype]));
            return ImmutableDictionary<EdgeType, ImmutableVariableStorage>.Empty.AddRange(variablestore);
        }

Usage Example

Пример #1
0
        private ExpressionInfo Expr_Ternary(XmlNode node)
        {
            var condNode = node.GetSubNode(AstConstants.Subnode + ":" + AstConstants.Subnodes.Cond);
            var ifTrueNode = node.GetSubNode(AstConstants.Subnode + ":" + AstConstants.Subnodes.If);
            var ifFalseNode = node.GetSubNode(AstConstants.Subnode + ":" + AstConstants.Subnodes.Else);

            Analyze(condNode);
            var condAnalyzer = new ConditionTaintAnalyser(_analysisScope, this._inclusionResolver, _analysisStacks.IncludeStack);

            var condResult = condAnalyzer.AnalyzeCond(condNode, ImmutableVariableStorage.CreateFromMutable(_variableStorage));

            var currentResolver = this._varResolver;
            this._varResolver = new VariableResolver(condResult[EdgeType.True].ToMutable());
            var leftTaint = Analyze(ifTrueNode);
            this._varResolver = new VariableResolver(condResult[EdgeType.False].ToMutable());
            var rightTaint = Analyze(ifFalseNode);

            this._varResolver = currentResolver;

            return leftTaint.Merge(rightTaint);
        }