PHPAnalysis.Analysis.CFG.TaintAnalysis.AnalyzeNode C# (CSharp) Метод

AnalyzeNode() приватный Метод

private AnalyzeNode ( EdgeTag>.TaggedEdge edge ) : CFGTaintInfo
edge EdgeTag>.TaggedEdge
Результат CFGTaintInfo
        private CFGTaintInfo AnalyzeNode(TaggedEdge<CFGBlock, EdgeTag> edge)
        {
            var oldTaint = Taints[edge.Target];

            // IN:
            //    ∪   TAINT_OUT( l')
            // (l'~>l)
            var newInTaint = oldTaint.In.Merge(Taints[edge.Source].Out[edge.Tag.EdgeType]);

            // OUT:
            // ( TAINT_IN(l) \ KILL(l) ) ∪ GEN(l)
            ImmutableDictionary<EdgeType, ImmutableVariableStorage> newOutTaint;

            if (edge.Target.AstEntryNode == null)
            {
                newOutTaint = ImmutableDictionary<EdgeType, ImmutableVariableStorage>.Empty.Add(EdgeType.Normal, newInTaint);
            }
            else
            {
                //var blockTaintAnalyzer = new TaintBlockVisitor(null, newInTaint);
                //var astTraverser = new XmlTraverser();
                //astTraverser.AddVisitor(blockTaintAnalyzer);
                //astTraverser.Traverse(edge.Target.AstEntryNode);

                var newOut =_blockAnalyzer.Analyze(edge.Target.AstEntryNode, newInTaint);
                var newOutWithCondSani = _conditionTaintAnalyser.AnalyzeCond(edge.Target.AstEntryNode, newOut);

                newOutTaint = newOutWithCondSani.ToImmutableDictionary();
            }

            return new CFGTaintInfo(newInTaint, newOutTaint);
        }