public override PropertySetAnalysisContext ForkForInterproceduralAnalysis( IMethodSymbol invokedMethod, ControlFlowGraph invokedCfg, IOperation operation, PointsToAnalysisResult pointsToAnalysisResultOpt, CopyAnalysisResult copyAnalysisResultOpt, ValueContentAnalysisResult valueContentAnalysisResultOpt, InterproceduralPropertySetAnalysisData interproceduralAnalysisData) { Debug.Assert(pointsToAnalysisResultOpt != null); Debug.Assert(copyAnalysisResultOpt == null); return(new PropertySetAnalysisContext( ValueDomain, WellKnownTypeProvider, invokedCfg, invokedMethod, InterproceduralAnalysisConfiguration, PessimisticAnalysis, pointsToAnalysisResultOpt, valueContentAnalysisResultOpt, GetOrComputeAnalysisResult, ControlFlowGraph, interproceduralAnalysisData, this.TypeToTrackMetadataName, this.ConstructorMapper, this.PropertyMappers, this.HazardousUsageEvaluators, this.HazardousUsageTypesToNames)); }
public abstract TAnalysisContext ForkForInterproceduralAnalysis( IMethodSymbol invokedMethod, ControlFlowGraph invokedCfg, IOperation operation, PointsToAnalysisResult pointsToAnalysisResultOpt, CopyAnalysisResult copyAnalysisResultOpt, InterproceduralAnalysisData <TAnalysisData, TAnalysisContext, TAbstractAnalysisValue> interproceduralAnalysisData);
public static ValueContentAnalysisResult TryGetOrComputeResult( ControlFlowGraph cfg, ISymbol owningSymbol, WellKnownTypeProvider wellKnownTypeProvider, AnalyzerOptions analyzerOptions, DiagnosticDescriptor rule, CancellationToken cancellationToken, out CopyAnalysisResult copyAnalysisResultOpt, out PointsToAnalysisResult pointsToAnalysisResultOpt, InterproceduralAnalysisKind interproceduralAnalysisKind = InterproceduralAnalysisKind.None, bool pessimisticAnalysis = true, bool performPointsToAnalysis = true, bool performCopyAnalysisIfNotUserConfigured = false, InterproceduralAnalysisPredicate interproceduralAnalysisPredicateOpt = null) { Debug.Assert(!owningSymbol.IsConfiguredToSkipAnalysis(analyzerOptions, rule, wellKnownTypeProvider.Compilation, cancellationToken)); var interproceduralAnalysisConfig = InterproceduralAnalysisConfiguration.Create( analyzerOptions, rule, interproceduralAnalysisKind, cancellationToken); return(TryGetOrComputeResult(cfg, owningSymbol, analyzerOptions, wellKnownTypeProvider, interproceduralAnalysisConfig, out copyAnalysisResultOpt, out pointsToAnalysisResultOpt, pessimisticAnalysis, performPointsToAnalysis, performCopyAnalysis: analyzerOptions.GetCopyAnalysisOption(rule, defaultValue: performCopyAnalysisIfNotUserConfigured, cancellationToken), interproceduralAnalysisPredicateOpt: interproceduralAnalysisPredicateOpt)); }
internal static ValueContentAnalysisResult TryGetOrComputeResult( ControlFlowGraph cfg, ISymbol owningSymbol, AnalyzerOptions analyzerOptions, WellKnownTypeProvider wellKnownTypeProvider, InterproceduralAnalysisConfiguration interproceduralAnalysisConfig, out CopyAnalysisResult copyAnalysisResultOpt, out PointsToAnalysisResult pointsToAnalysisResultOpt, bool pessimisticAnalysis = true, bool performPointsToAnalysis = true, bool performCopyAnalysis = false, InterproceduralAnalysisPredicate interproceduralAnalysisPredicateOpt = null) { copyAnalysisResultOpt = null; pointsToAnalysisResultOpt = performPointsToAnalysis ? PointsToAnalysis.PointsToAnalysis.TryGetOrComputeResult(cfg, owningSymbol, analyzerOptions, wellKnownTypeProvider, out copyAnalysisResultOpt, interproceduralAnalysisConfig, interproceduralAnalysisPredicateOpt, pessimisticAnalysis, performCopyAnalysis) : null; if (cfg == null) { Debug.Fail("Expected non-null CFG"); return(null); } var analysisContext = ValueContentAnalysisContext.Create( ValueContentAbstractValueDomain.Default, wellKnownTypeProvider, cfg, owningSymbol, analyzerOptions, interproceduralAnalysisConfig, pessimisticAnalysis, copyAnalysisResultOpt, pointsToAnalysisResultOpt, TryGetOrComputeResultForAnalysisContext, interproceduralAnalysisPredicateOpt); return(TryGetOrComputeResultForAnalysisContext(analysisContext)); }
public override ValueContentAnalysisContext ForkForInterproceduralAnalysis( IMethodSymbol invokedMethod, ControlFlowGraph invokedControlFlowGraph, IOperation operation, PointsToAnalysisResult pointsToAnalysisResultOpt, CopyAnalysisResult copyAnalysisResultOpt, InterproceduralValueContentAnalysisData interproceduralAnalysisData) { return(new ValueContentAnalysisContext(ValueDomain, WellKnownTypeProvider, invokedControlFlowGraph, invokedMethod, InterproceduralAnalysisConfiguration, PessimisticAnalysis, copyAnalysisResultOpt, pointsToAnalysisResultOpt, GetOrComputeAnalysisResult, ControlFlowGraph, interproceduralAnalysisData, InterproceduralAnalysisPredicateOpt)); }
protected AbstractDataFlowAnalysisContext( AbstractValueDomain <TAbstractAnalysisValue> valueDomain, WellKnownTypeProvider wellKnownTypeProvider, ControlFlowGraph controlFlowGraph, ISymbol owningSymbol, AnalyzerOptions analyzerOptions, InterproceduralAnalysisConfiguration interproceduralAnalysisConfig, bool pessimisticAnalysis, bool predicateAnalysis, bool exceptionPathsAnalysis, CopyAnalysisResult copyAnalysisResultOpt, PointsToAnalysisResult pointsToAnalysisResultOpt, ValueContentAnalysisResult valueContentAnalysisResultOpt, Func <TAnalysisContext, TAnalysisResult> tryGetOrComputeAnalysisResult, ControlFlowGraph parentControlFlowGraphOpt, InterproceduralAnalysisData <TAnalysisData, TAnalysisContext, TAbstractAnalysisValue> interproceduralAnalysisDataOpt, InterproceduralAnalysisPredicate interproceduralAnalysisPredicateOpt) { Debug.Assert(valueDomain != null, "valueDomain must not be null for use in ComputeHashCodeParts"); Debug.Assert(controlFlowGraph != null); Debug.Assert(owningSymbol != null); Debug.Assert(owningSymbol.Kind == SymbolKind.Method || owningSymbol.Kind == SymbolKind.Field || owningSymbol.Kind == SymbolKind.Property || owningSymbol.Kind == SymbolKind.Event); Debug.Assert(Equals(owningSymbol.OriginalDefinition, owningSymbol)); Debug.Assert(wellKnownTypeProvider != null); Debug.Assert(tryGetOrComputeAnalysisResult != null); Debug.Assert(pointsToAnalysisResultOpt == null || pointsToAnalysisResultOpt.ControlFlowGraph == controlFlowGraph); Debug.Assert(copyAnalysisResultOpt == null || copyAnalysisResultOpt.ControlFlowGraph == controlFlowGraph); Debug.Assert(valueContentAnalysisResultOpt == null || valueContentAnalysisResultOpt.ControlFlowGraph == controlFlowGraph); ValueDomain = valueDomain; WellKnownTypeProvider = wellKnownTypeProvider; ControlFlowGraph = controlFlowGraph; ParentControlFlowGraphOpt = parentControlFlowGraphOpt; OwningSymbol = owningSymbol; AnalyzerOptions = analyzerOptions; InterproceduralAnalysisConfiguration = interproceduralAnalysisConfig; PessimisticAnalysis = pessimisticAnalysis; PredicateAnalysis = predicateAnalysis; ExceptionPathsAnalysis = exceptionPathsAnalysis; CopyAnalysisResultOpt = copyAnalysisResultOpt; PointsToAnalysisResultOpt = pointsToAnalysisResultOpt; ValueContentAnalysisResultOpt = valueContentAnalysisResultOpt; TryGetOrComputeAnalysisResult = tryGetOrComputeAnalysisResult; InterproceduralAnalysisDataOpt = interproceduralAnalysisDataOpt; InterproceduralAnalysisPredicateOpt = interproceduralAnalysisPredicateOpt; }
public override PointsToAnalysisContext ForkForInterproceduralAnalysis( IMethodSymbol invokedMethod, ControlFlowGraph invokedControlFlowGraph, IOperation operation, PointsToAnalysisResult pointsToAnalysisResultOpt, CopyAnalysisResult copyAnalysisResultOpt, InterproceduralPointsToAnalysisData interproceduralAnalysisData) { Debug.Assert(pointsToAnalysisResultOpt == null); return(new PointsToAnalysisContext(ValueDomain, WellKnownTypeProvider, invokedControlFlowGraph, invokedMethod, InterproceduralAnalysisConfiguration, PessimisticAnalysis, ExceptionPathsAnalysis, copyAnalysisResultOpt, GetOrComputeAnalysisResult, ControlFlowGraph, interproceduralAnalysisData, InterproceduralAnalysisPredicateOpt)); }
public override DisposeAnalysisContext ForkForInterproceduralAnalysis( IMethodSymbol invokedMethod, ControlFlowGraph invokedControlFlowGraph, IOperation operation, PointsToAnalysisResult pointsToAnalysisResultOpt, CopyAnalysisResult copyAnalysisResultOpt, InterproceduralDisposeAnalysisData interproceduralAnalysisData) { Debug.Assert(pointsToAnalysisResultOpt != null); Debug.Assert(copyAnalysisResultOpt == null); return(new DisposeAnalysisContext(ValueDomain, WellKnownTypeProvider, invokedControlFlowGraph, invokedMethod, InterproceduralAnalysisConfiguration, PessimisticAnalysis, ExceptionPathsAnalysis, pointsToAnalysisResultOpt, GetOrComputeAnalysisResult, DisposeOwnershipTransferLikelyTypes, DisposeOwnershipTransferAtConstructor, TrackInstanceFields, ControlFlowGraph, interproceduralAnalysisData, InterproceduralAnalysisPredicateOpt)); }
internal static PointsToAnalysisContext Create( AbstractValueDomain <PointsToAbstractValue> valueDomain, WellKnownTypeProvider wellKnownTypeProvider, ControlFlowGraph controlFlowGraph, ISymbol owningSymbol, InterproceduralAnalysisConfiguration interproceduralAnalysisConfig, bool pessimisticAnalysis, bool exceptionPathsAnalysis, CopyAnalysisResult copyAnalysisResultOpt, Func <PointsToAnalysisContext, PointsToAnalysisResult> getOrComputeAnalysisResult, InterproceduralAnalysisPredicate interproceduralAnalysisPredicateOpt) { return(new PointsToAnalysisContext(valueDomain, wellKnownTypeProvider, controlFlowGraph, owningSymbol, interproceduralAnalysisConfig, pessimisticAnalysis, exceptionPathsAnalysis, copyAnalysisResultOpt, getOrComputeAnalysisResult, parentControlFlowGraphOpt: null, interproceduralAnalysisDataOpt: null, interproceduralAnalysisPredicateOpt)); }
protected sealed override void ComputeHashCodeParts(Action <int> addPart) { addPart(ValueDomain.GetHashCode()); addPart(OwningSymbol.GetHashCode()); addPart(ControlFlowGraph.GetHashCode()); addPart(AnalyzerOptions.GetHashCode()); addPart(InterproceduralAnalysisConfiguration.GetHashCode()); addPart(PessimisticAnalysis.GetHashCode()); addPart(PredicateAnalysis.GetHashCode()); addPart(ExceptionPathsAnalysis.GetHashCode()); addPart(CopyAnalysisResult.GetHashCodeOrDefault()); addPart(PointsToAnalysisResult.GetHashCodeOrDefault()); addPart(ValueContentAnalysisResult.GetHashCodeOrDefault()); addPart(InterproceduralAnalysisData.GetHashCodeOrDefault()); addPart(InterproceduralAnalysisPredicate.GetHashCodeOrDefault()); ComputeHashCodePartsSpecific(addPart); }
protected sealed override void ComputeHashCodeParts(ref RoslynHashCode hashCode) { hashCode.Add(ValueDomain.GetHashCode()); hashCode.Add(OwningSymbol.GetHashCode()); hashCode.Add(ControlFlowGraph.GetHashCode()); hashCode.Add(AnalyzerOptions.GetHashCode()); hashCode.Add(InterproceduralAnalysisConfiguration.GetHashCode()); hashCode.Add(PessimisticAnalysis.GetHashCode()); hashCode.Add(PredicateAnalysis.GetHashCode()); hashCode.Add(ExceptionPathsAnalysis.GetHashCode()); hashCode.Add(CopyAnalysisResult.GetHashCodeOrDefault()); hashCode.Add(PointsToAnalysisResult.GetHashCodeOrDefault()); hashCode.Add(ValueContentAnalysisResult.GetHashCodeOrDefault()); hashCode.Add(InterproceduralAnalysisData.GetHashCodeOrDefault()); hashCode.Add(InterproceduralAnalysisPredicate.GetHashCodeOrDefault()); ComputeHashCodePartsSpecific(ref hashCode); }
public override ParameterValidationAnalysisContext ForkForInterproceduralAnalysis( IMethodSymbol invokedMethod, ControlFlowGraph invokedCfg, IOperation operation, PointsToAnalysisResult pointsToAnalysisResultOpt, CopyAnalysisResult copyAnalysisResultOpt, InterproceduralParameterValidationAnalysisData interproceduralAnalysisData) { Debug.Assert(pointsToAnalysisResultOpt != null); Debug.Assert(copyAnalysisResultOpt == null); // Do not invoke any interprocedural analysis more than one level down. // We only care about analyzing validation methods. return(new ParameterValidationAnalysisContext( ValueDomain, WellKnownTypeProvider, invokedCfg, invokedMethod, InterproceduralAnalysisConfiguration, PessimisticAnalysis, pointsToAnalysisResultOpt, GetOrComputeAnalysisResult, ControlFlowGraph, interproceduralAnalysisData, TrackHazardousParameterUsages)); }
internal static ValueContentAnalysisContext Create( AbstractValueDomain <ValueContentAbstractValue> valueDomain, WellKnownTypeProvider wellKnownTypeProvider, ControlFlowGraph controlFlowGraph, ISymbol owningSymbol, AnalyzerOptions analyzerOptions, InterproceduralAnalysisConfiguration interproceduralAnalysisConfig, bool pessimisticAnalysis, CopyAnalysisResult copyAnalysisResultOpt, PointsToAnalysisResult pointsToAnalysisResultOpt, Func <ValueContentAnalysisContext, ValueContentAnalysisResult> tryGetOrComputeAnalysisResult, InterproceduralAnalysisPredicate interproceduralAnalysisPredicateOpt) { return(new ValueContentAnalysisContext( valueDomain, wellKnownTypeProvider, controlFlowGraph, owningSymbol, analyzerOptions, interproceduralAnalysisConfig, pessimisticAnalysis, copyAnalysisResultOpt, pointsToAnalysisResultOpt, tryGetOrComputeAnalysisResult, parentControlFlowGraphOpt: null, interproceduralAnalysisDataOpt: null, interproceduralAnalysisPredicateOpt)); }
private PointsToAnalysisContext( AbstractValueDomain <PointsToAbstractValue> valueDomain, WellKnownTypeProvider wellKnownTypeProvider, ControlFlowGraph controlFlowGraph, ISymbol owningSymbol, InterproceduralAnalysisConfiguration interproceduralAnalysisConfig, bool pessimisticAnalysis, bool exceptionPathsAnalysis, CopyAnalysisResult copyAnalysisResultOpt, Func <PointsToAnalysisContext, PointsToAnalysisResult> getOrComputeAnalysisResult, ControlFlowGraph parentControlFlowGraphOpt, InterproceduralPointsToAnalysisData interproceduralAnalysisDataOpt, InterproceduralAnalysisPredicate interproceduralAnalysisPredicateOpt) : base(valueDomain, wellKnownTypeProvider, controlFlowGraph, owningSymbol, interproceduralAnalysisConfig, pessimisticAnalysis, predicateAnalysis: true, exceptionPathsAnalysis, copyAnalysisResultOpt, pointsToAnalysisResultOpt: null, getOrComputeAnalysisResult, parentControlFlowGraphOpt, interproceduralAnalysisDataOpt, interproceduralAnalysisPredicateOpt) { }
protected sealed override bool ComputeEqualsByHashCodeParts(CacheBasedEquatable <TAnalysisContext> obj) { var other = (AbstractDataFlowAnalysisContext <TAnalysisData, TAnalysisContext, TAnalysisResult, TAbstractAnalysisValue>)obj; return(ValueDomain.GetHashCode() == other.ValueDomain.GetHashCode() && OwningSymbol.GetHashCode() == other.OwningSymbol.GetHashCode() && ControlFlowGraph.GetHashCode() == other.ControlFlowGraph.GetHashCode() && AnalyzerOptions.GetHashCode() == other.AnalyzerOptions.GetHashCode() && InterproceduralAnalysisConfiguration.GetHashCode() == other.InterproceduralAnalysisConfiguration.GetHashCode() && PessimisticAnalysis.GetHashCode() == other.PessimisticAnalysis.GetHashCode() && PredicateAnalysis.GetHashCode() == other.PredicateAnalysis.GetHashCode() && ExceptionPathsAnalysis.GetHashCode() == other.ExceptionPathsAnalysis.GetHashCode() && CopyAnalysisResult.GetHashCodeOrDefault() == other.CopyAnalysisResult.GetHashCodeOrDefault() && PointsToAnalysisResult.GetHashCodeOrDefault() == other.PointsToAnalysisResult.GetHashCodeOrDefault() && ValueContentAnalysisResult.GetHashCodeOrDefault() == other.ValueContentAnalysisResult.GetHashCodeOrDefault() && InterproceduralAnalysisData.GetHashCodeOrDefault() == other.InterproceduralAnalysisData.GetHashCodeOrDefault() && InterproceduralAnalysisPredicate.GetHashCodeOrDefault() == other.InterproceduralAnalysisPredicate.GetHashCodeOrDefault() && ComputeEqualsByHashCodeParts(other)); }
private TaintedDataAnalysisContext( AbstractValueDomain <TaintedDataAbstractValue> valueDomain, WellKnownTypeProvider wellKnownTypeProvider, ControlFlowGraph controlFlowGraph, ISymbol owningSymbol, AnalyzerOptions analyzerOptions, InterproceduralAnalysisConfiguration interproceduralAnalysisConfig, bool pessimisticAnalysis, CopyAnalysisResult copyAnalysisResultOpt, PointsToAnalysisResult pointsToAnalysisResult, ValueContentAnalysisResult valueContentAnalysisResult, Func <TaintedDataAnalysisContext, TaintedDataAnalysisResult> tryGetOrComputeAnalysisResult, ControlFlowGraph parentControlFlowGraph, InterproceduralTaintedDataAnalysisData interproceduralAnalysisDataOpt, TaintedDataSymbolMap <SourceInfo> taintedSourceInfos, TaintedDataSymbolMap <SanitizerInfo> taintedSanitizerInfos, TaintedDataSymbolMap <SinkInfo> taintedSinkInfos) : base( valueDomain, wellKnownTypeProvider, controlFlowGraph, owningSymbol, analyzerOptions, interproceduralAnalysisConfig, pessimisticAnalysis, predicateAnalysis: false, exceptionPathsAnalysis: false, copyAnalysisResultOpt, pointsToAnalysisResult, valueContentAnalysisResult, tryGetOrComputeAnalysisResult, parentControlFlowGraph, interproceduralAnalysisDataOpt, interproceduralAnalysisPredicateOpt: null) { Debug.Assert(pointsToAnalysisResult != null); this.SourceInfos = taintedSourceInfos ?? throw new ArgumentNullException(nameof(taintedSourceInfos)); this.SanitizerInfos = taintedSanitizerInfos ?? throw new ArgumentNullException(nameof(taintedSanitizerInfos)); this.SinkInfos = taintedSinkInfos ?? throw new ArgumentNullException(nameof(taintedSinkInfos)); }
protected AbstractDataFlowAnalysisContext( AbstractValueDomain <TAbstractAnalysisValue> valueDomain, WellKnownTypeProvider wellKnownTypeProvider, ControlFlowGraph controlFlowGraph, ISymbol owningSymbol, InterproceduralAnalysisConfiguration interproceduralAnalysisConfig, bool pessimisticAnalysis, bool predicateAnalysis, bool exceptionPathsAnalysis, CopyAnalysisResult copyAnalysisResultOpt, PointsToAnalysisResult pointsToAnalysisResultOpt, Func <TAnalysisContext, TAnalysisResult> getOrComputeAnalysisResult, ControlFlowGraph parentControlFlowGraphOpt, InterproceduralAnalysisData <TAnalysisData, TAnalysisContext, TAbstractAnalysisValue> interproceduralAnalysisDataOpt, InterproceduralAnalysisPredicate interproceduralAnalysisPredicateOpt) { Debug.Assert(controlFlowGraph != null); Debug.Assert(owningSymbol != null); Debug.Assert(owningSymbol.Kind == SymbolKind.Method || owningSymbol.Kind == SymbolKind.Field || owningSymbol.Kind == SymbolKind.Property || owningSymbol.Kind == SymbolKind.Event); Debug.Assert(Equals(owningSymbol.OriginalDefinition, owningSymbol)); Debug.Assert(wellKnownTypeProvider != null); Debug.Assert(getOrComputeAnalysisResult != null); ValueDomain = valueDomain; WellKnownTypeProvider = wellKnownTypeProvider; ControlFlowGraph = controlFlowGraph; ParentControlFlowGraphOpt = parentControlFlowGraphOpt; OwningSymbol = owningSymbol; InterproceduralAnalysisConfiguration = interproceduralAnalysisConfig; PessimisticAnalysis = pessimisticAnalysis; PredicateAnalysis = predicateAnalysis; ExceptionPathsAnalysis = exceptionPathsAnalysis; CopyAnalysisResultOpt = copyAnalysisResultOpt; PointsToAnalysisResultOpt = pointsToAnalysisResultOpt; GetOrComputeAnalysisResult = getOrComputeAnalysisResult; InterproceduralAnalysisDataOpt = interproceduralAnalysisDataOpt; InterproceduralAnalysisPredicateOpt = interproceduralAnalysisPredicateOpt; }
public static PointsToAnalysisResult TryGetOrComputeResult( ControlFlowGraph cfg, ISymbol owningSymbol, WellKnownTypeProvider wellKnownTypeProvider, out CopyAnalysisResult copyAnalysisResultOpt, InterproceduralAnalysisConfiguration interproceduralAnalysisConfig, InterproceduralAnalysisPredicate interproceduralAnalysisPredicateOpt, bool pessimisticAnalysis = true, bool performCopyAnalysis = true, bool exceptionPathsAnalysis = false) { copyAnalysisResultOpt = performCopyAnalysis ? CopyAnalysis.CopyAnalysis.TryGetOrComputeResult(cfg, owningSymbol, wellKnownTypeProvider, interproceduralAnalysisConfig, interproceduralAnalysisPredicateOpt, pessimisticAnalysis, performPointsToAnalysis: true, exceptionPathsAnalysis) : null; var analysisContext = PointsToAnalysisContext.Create(PointsToAbstractValueDomain.Default, wellKnownTypeProvider, cfg, owningSymbol, interproceduralAnalysisConfig, pessimisticAnalysis, exceptionPathsAnalysis, copyAnalysisResultOpt, TryGetOrComputeResultForAnalysisContext, interproceduralAnalysisPredicateOpt); return(TryGetOrComputeResultForAnalysisContext(analysisContext)); }
public static TaintedDataAnalysisContext Create( AbstractValueDomain <TaintedDataAbstractValue> valueDomain, WellKnownTypeProvider wellKnownTypeProvider, ControlFlowGraph controlFlowGraph, ISymbol owningSymbol, AnalyzerOptions analyzerOptions, InterproceduralAnalysisConfiguration interproceduralAnalysisConfig, bool pessimisticAnalysis, CopyAnalysisResult copyAnalysisResultOpt, PointsToAnalysisResult pointsToAnalysisResult, ValueContentAnalysisResult valueContentAnalysisResult, Func <TaintedDataAnalysisContext, TaintedDataAnalysisResult> tryGetOrComputeAnalysisResult, TaintedDataSymbolMap <SourceInfo> taintedSourceInfos, TaintedDataSymbolMap <SanitizerInfo> taintedSanitizerInfos, TaintedDataSymbolMap <SinkInfo> taintedSinkInfos) { Debug.Assert(pointsToAnalysisResult != null); return(new TaintedDataAnalysisContext( valueDomain, wellKnownTypeProvider, controlFlowGraph, owningSymbol, analyzerOptions, interproceduralAnalysisConfig, pessimisticAnalysis, copyAnalysisResultOpt, pointsToAnalysisResult, valueContentAnalysisResult, tryGetOrComputeAnalysisResult, parentControlFlowGraph: null, interproceduralAnalysisDataOpt: null, taintedSourceInfos: taintedSourceInfos, taintedSanitizerInfos: taintedSanitizerInfos, taintedSinkInfos: taintedSinkInfos)); }
internal static ValueContentAnalysisResult GetOrComputeResult( ControlFlowGraph cfg, ISymbol owningSymbol, WellKnownTypeProvider wellKnownTypeProvider, InterproceduralAnalysisConfiguration interproceduralAnalysisConfig, out CopyAnalysisResult copyAnalysisResultOpt, out PointsToAnalysisResult pointsToAnalysisResultOpt, bool pessimisticAnalysis = true, bool performPointsToAnalysis = true, bool performCopyAnalysis = true, InterproceduralAnalysisPredicate interproceduralAnalysisPredicateOpt = null) { copyAnalysisResultOpt = null; pointsToAnalysisResultOpt = performPointsToAnalysis ? PointsToAnalysis.PointsToAnalysis.GetOrComputeResult(cfg, owningSymbol, wellKnownTypeProvider, out copyAnalysisResultOpt, interproceduralAnalysisConfig, interproceduralAnalysisPredicateOpt, pessimisticAnalysis, performCopyAnalysis) : null; var analysisContext = ValueContentAnalysisContext.Create( ValueContentAbstractValueDomain.Default, wellKnownTypeProvider, cfg, owningSymbol, interproceduralAnalysisConfig, pessimisticAnalysis, copyAnalysisResultOpt, pointsToAnalysisResultOpt, GetOrComputeResultForAnalysisContext, interproceduralAnalysisPredicateOpt); return(GetOrComputeResultForAnalysisContext(analysisContext)); }
private static TaintedDataAnalysisResult TryGetOrComputeResult( ControlFlowGraph cfg, Compilation compilation, ISymbol containingMethod, AnalyzerOptions analyzerOptions, TaintedDataSymbolMap <SourceInfo> taintedSourceInfos, TaintedDataSymbolMap <SanitizerInfo> taintedSanitizerInfos, TaintedDataSymbolMap <SinkInfo> taintedSinkInfos, InterproceduralAnalysisConfiguration interproceduralAnalysisConfig) { if (cfg == null) { Debug.Fail("Expected non-null CFG"); return(null); } WellKnownTypeProvider wellKnownTypeProvider = WellKnownTypeProvider.GetOrCreate(compilation); ValueContentAnalysisResult valueContentAnalysisResult = null; CopyAnalysisResult copyAnalysisResult = null; PointsToAnalysisResult pointsToAnalysisResult = null; if (taintedSourceInfos.RequiresValueContentAnalysis || taintedSanitizerInfos.RequiresValueContentAnalysis || taintedSinkInfos.RequiresValueContentAnalysis) { valueContentAnalysisResult = ValueContentAnalysis.TryGetOrComputeResult( cfg, containingMethod, analyzerOptions, wellKnownTypeProvider, interproceduralAnalysisConfig, out copyAnalysisResult, out pointsToAnalysisResult, pessimisticAnalysis: true, performCopyAnalysis: false); if (valueContentAnalysisResult == null) { return(null); } } else { pointsToAnalysisResult = PointsToAnalysis.TryGetOrComputeResult( cfg, containingMethod, analyzerOptions, wellKnownTypeProvider, interproceduralAnalysisConfig, interproceduralAnalysisPredicateOpt: null, pessimisticAnalysis: true, performCopyAnalysis: false); if (pointsToAnalysisResult == null) { return(null); } } TaintedDataAnalysisContext analysisContext = TaintedDataAnalysisContext.Create( TaintedDataAbstractValueDomain.Default, wellKnownTypeProvider, cfg, containingMethod, analyzerOptions, interproceduralAnalysisConfig, pessimisticAnalysis: false, copyAnalysisResultOpt: copyAnalysisResult, pointsToAnalysisResult: pointsToAnalysisResult, valueContentAnalysisResult: valueContentAnalysisResult, tryGetOrComputeAnalysisResult: TryGetOrComputeResultForAnalysisContext, taintedSourceInfos: taintedSourceInfos, taintedSanitizerInfos: taintedSanitizerInfos, taintedSinkInfos: taintedSinkInfos); return(TryGetOrComputeResultForAnalysisContext(analysisContext)); }