private static void VisitSyntaxNodeEx(SyntaxNodeAnalysisContext ctx) { Microsoft.CodeAnalysis.VisualBasic.Syntax.InvocationExpressionSyntax node = ctx.Node as Microsoft.CodeAnalysis.VisualBasic.Syntax.InvocationExpressionSyntax; Microsoft.CodeAnalysis.VisualBasic.Syntax.ObjectCreationExpressionSyntax node2 = ctx.Node as Microsoft.CodeAnalysis.VisualBasic.Syntax.ObjectCreationExpressionSyntax; if (node != null) { var symbol = ctx.SemanticModel.GetSymbolInfo(node).Symbol; foreach (string cipher in BadCiphers) { if (AnalyzerUtil.SymbolMatch(symbol, type: cipher, name: "Create")) { var diagnostic = Diagnostic.Create(Rule, node.Expression.GetLocation(), cipher); ctx.ReportDiagnostic(diagnostic); } } } if (node2 != null) { var symbol = ctx.SemanticModel.GetSymbolInfo(node2).Symbol; foreach (string cipher in BadCiphers) { if (AnalyzerUtil.SymbolMatch(symbol, type: cipher + "CryptoServiceProvider")) { var diagnostic = Diagnostic.Create(Rule, node2.GetLocation(), cipher); ctx.ReportDiagnostic(diagnostic); } } } }
private static void VisitSyntaxNodeEx(SyntaxNodeAnalysisContext ctx) { Microsoft.CodeAnalysis.VisualBasic.Syntax.InvocationExpressionSyntax node = ctx.Node as Microsoft.CodeAnalysis.VisualBasic.Syntax.InvocationExpressionSyntax; if (node != null) { var symbol = ctx.SemanticModel.GetSymbolInfo(node).Symbol; //System.Random.Next() if (AnalyzerUtil.SymbolMatch(symbol, type: "Random", name: "Next") || AnalyzerUtil.SymbolMatch(symbol, type: "Random", name: "NextBytes") || AnalyzerUtil.SymbolMatch(symbol, type: "Random", name: "NextDouble")) { var diagnostic = Diagnostic.Create(Rule, node.Expression.GetLocation()); ctx.ReportDiagnostic(diagnostic); } } }