PHPAnalysis.Analysis.CFG.Taint.TaintBlockAnalyzer.StoredFuncHandler C# (CSharp) Метод

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

private StoredFuncHandler ( ExpressionInfo exprInfo, XmlNode node, List argInfos ) : ExpressionInfo
exprInfo ExpressionInfo
node System.Xml.XmlNode
argInfos List
Результат ExpressionInfo
        private ExpressionInfo StoredFuncHandler(ExpressionInfo exprInfo, XmlNode node, List<ExpressionInfo> argInfos)
        {
            var resultExpr = new ExpressionInfo();
            var functionCallExtractor = new FunctionCallExtractor();
            var functionCall = functionCallExtractor.ExtractFunctionCall(node);
            var fh = FunctionsHandler.Instance;

            var sqlSinkFunc = fh.FindSQLSinkByName(functionCall.Name);

            if (sqlSinkFunc != null)
            {
                var vulnerableSqlParams = sqlSinkFunc.Parameters.Where(x => x.Value.IsSensitive).ToDictionary(pair => pair.Key);
                var param = functionCall.Arguments.Where(x => vulnerableSqlParams.Keys.Any(z => z.Item1 == x.Key));

                foreach (var arg in argInfos)
                {
                    exprInfo = arg;
                    if (exprInfo.ValueInfo.Value == null)
                    {
                        continue;
                    }
                    if (StringAnalysis.IsSQLInsertionStmt(exprInfo.ValueInfo.Value))
                    {
                        exprInfo.ExpressionStoredTaint =
                            new StoredVulnInfo(StringAnalysis.RetrieveSQLTableName(exprInfo.ValueInfo.Value), AstNode.GetStartLine(node))
                            {
                                Taint = exprInfo.ExpressionTaint,
                                ICantFeelIt = IsItInYet.YesItsGoingIn
                            };
                        InsertIntoStoredLocation(exprInfo, node);
                        exprInfo = new ExpressionInfo();
                    }
                    else if(StringAnalysis.IsSQLRetrieveStmt(exprInfo.ValueInfo.Value))
                    {
                        exprInfo.ExpressionStoredTaint =
                            new StoredVulnInfo(StringAnalysis.RetrieveSQLTableName(exprInfo.ValueInfo.Value), AstNode.GetStartLine(node))
                            {
                                Taint = new DefaultTaintProvider().GetTaintedTaintSet(),
                                ICantFeelIt = IsItInYet.NoImPullingOut
                            };
                        resultExpr.ValueInfo.NestedVariablePossibleStoredDefaultTaintFactory = () => new DefaultTaintProvider().GetTaintedTaintSet();
                    }
                    resultExpr.ExpressionStoredTaint = resultExpr.ExpressionStoredTaint.Merge(exprInfo.ExpressionStoredTaint);
                }
            }
            else
            {
                return exprInfo;
            }
            return resultExpr;
        }