public override bool CanSuppress(SemanticModel model, SyntaxNode syntax, DiagnosticId ruleId)
        {
            var argumentSyntax = syntax as ArgumentSyntax;
            if (argumentSyntax != null)
            {
                var parentOfArgumentSyntaxAnalyzer = SyntaxNodeAnalyzerFactory.Create(argumentSyntax.Parent);
                if (parentOfArgumentSyntaxAnalyzer.CanSuppress(model, argumentSyntax.Parent, ruleId))
                {
                    return true;
                }
            }

            return base.CanSuppress(model, syntax, ruleId);
        }
        public override bool CanIgnore(SemanticModel model, SyntaxNode syntax)
        {
            var argumentSyntax = syntax as ArgumentSyntax;
            if (argumentSyntax != null)
            {
                var parentOfArgumentSyntaxAnalyzer = SyntaxNodeAnalyzerFactory.Create(argumentSyntax.Parent);
                if (parentOfArgumentSyntaxAnalyzer.CanIgnore(model, argumentSyntax.Parent))
                {
                    return true;
                }
            }

            return base.CanIgnore(model, syntax);
        }
        public override bool CanSuppress(SemanticModel model, SyntaxNode syntax, DiagnosticId ruleId)
        {
            var elementAccessExpressionSyntax = syntax as ElementAccessExpressionSyntax;

            if (elementAccessExpressionSyntax != null)
            {
                var elementAccessExpressionExpressionSyntax = SyntaxNodeAnalyzerFactory.Create(elementAccessExpressionSyntax.Expression);
                if (elementAccessExpressionExpressionSyntax.CanSuppress(model, elementAccessExpressionSyntax.Expression, ruleId))
                {
                    return(true);
                }
            }

            return(false);
        }
        public override bool CanIgnore(SemanticModel model, SyntaxNode syntax)
        {
            var elementAccessExpressionSyntax = syntax as ElementAccessExpressionSyntax;

            if (elementAccessExpressionSyntax != null)
            {
                var elementAccessExpressionExpressionSyntax = SyntaxNodeAnalyzerFactory.Create(elementAccessExpressionSyntax.Expression);
                if (elementAccessExpressionExpressionSyntax.CanIgnore(model, elementAccessExpressionSyntax.Expression))
                {
                    return(true);
                }
            }

            return(false);
        }
        public virtual void OnCompilationEnd(PumaCompilationAnalysisContext pumaContext)
        {
            var context = pumaContext.RosylnContext;

            if (VulnerableSyntaxNodes.IsEmpty)
            {
                return;
            }

            foreach (var vulnerableSyntaxNode in VulnerableSyntaxNodes)
            {
                var canSuppress = false;
                var sources     = vulnerableSyntaxNode.Source;
                foreach (var syntaxNode in sources)
                {
                    var idsToMatchOn = syntaxNode.DescendantNodesAndSelf().OfType <IdentifierNameSyntax>();
                    foreach (var identifierNameSyntax in idsToMatchOn)
                    {
                        var containingBlock = syntaxNode.FirstAncestorOrSelf <MethodDeclarationSyntax>();

                        var idMatches = containingBlock
                                        .DescendantNodes()
                                        .OfType <IdentifierNameSyntax>()
                                        .Where(p => p.Identifier.ValueText == syntaxNode.ToString())
                                        .ToList <SyntaxNode>();

                        var declarationMatches = containingBlock
                                                 .DescendantNodes()
                                                 .OfType <VariableDeclaratorSyntax>()
                                                 .Where(p => p.Identifier.ValueText == identifierNameSyntax.ToString())
                                                 .Select(p => p.Initializer.Value)
                                                 .ToList <SyntaxNode>();

                        var matches = idMatches.Union(declarationMatches);
                        var idModel = context.Compilation.GetSemanticModel(syntaxNode.SyntaxTree);

                        foreach (var match in matches)
                        {
                            var indexNode = match.AncestorsAndSelf().FirstOrDefault();

                            while (!canSuppress && indexNode != containingBlock)
                            {
                                var nodeAnalyzer = SyntaxNodeAnalyzerFactory.Create(indexNode);
                                canSuppress = nodeAnalyzer.CanSuppress(idModel, indexNode, pumaContext.DiagnosticId);

                                indexNode = indexNode.Ancestors().FirstOrDefault();
                            }

                            if (canSuppress)
                            {
                                break;
                            }
                        }

                        if (canSuppress)
                        {
                            break;
                        }
                    }

                    if (canSuppress)
                    {
                        break;
                    }
                }

                vulnerableSyntaxNode.Suppressed = canSuppress;
            }
        }
示例#6
0
        public override bool CanSuppress(SemanticModel model, SyntaxNode syntax, DiagnosticId ruleId)
        {
            var expressionSyntaxAnalyzer = SyntaxNodeAnalyzerFactory.Create(syntax);

            return(expressionSyntaxAnalyzer.CanSuppress(model, syntax, ruleId));
        }
示例#7
0
        public override bool CanIgnore(SemanticModel model, SyntaxNode syntax)
        {
            var expressionSyntaxAnalyzer = SyntaxNodeAnalyzerFactory.Create(syntax);

            return(expressionSyntaxAnalyzer.CanIgnore(model, syntax));
        }