Simplify test interface in FlowSummaryImpl.qll

This commit is contained in:
Tom Hvitved
2024-03-19 14:35:00 +01:00
parent 70c6744944
commit ee3e38f0eb
4 changed files with 51 additions and 106 deletions

View File

@@ -2,32 +2,20 @@ import shared.FlowSummaries
import semmle.code.csharp.dataflow.internal.ExternalFlow
import External
module TestSummaryInput implements TestSummaryInputSig {
class RelevantSummarizedCallable = IncludeSummarizedCallable;
final private class NeutralCallableFinal = NeutralCallable;
class RelevantNeutralCallable extends NeutralCallableFinal {
final string getCallableCsv() { result = asPartialNeutralModel(this) }
}
module TestNeutralInput implements TestNeutralInputSig {
class RelevantNeutralCallable instanceof NeutralCallable {
final string getCallableCsv() { result = asPartialNeutralModel(this) }
string toString() { result = super.toString() }
}
class RelevantSourceCallable extends SourceCallable {
string getCallableCsv() { result = asPartialModel(this) }
}
module TestSourceSinkInput implements TestSourceSinkInputSig {
class RelevantSourceCallable instanceof SourceCallable {
string getCallableCsv() { result = asPartialModel(this) }
string toString() { result = super.toString() }
}
class RelevantSinkCallable instanceof SinkCallable {
string getCallableCsv() { result = asPartialModel(this) }
string toString() { result = super.toString() }
}
class RelevantSinkCallable extends SinkCallable {
string getCallableCsv() { result = asPartialModel(this) }
}
import TestSummaryOutput<TestSummaryInput>
import TestNeutralOutput<TestNeutralInput>
import TestSourceSinkOutput<TestSourceSinkInput>
import TestSummaryOutput<IncludeSummarizedCallable>
import TestNeutralOutput<RelevantNeutralCallable>
import TestSourceSinkOutput<RelevantSourceCallable, RelevantSinkCallable>

View File

@@ -1,13 +1,7 @@
import shared.FlowSummaries
private import semmle.code.csharp.dataflow.internal.ExternalFlow
module TestSummaryInput implements TestSummaryInputSig {
class RelevantSummarizedCallable = IncludeSummarizedCallable;
}
import TestSummaryOutput<TestSummaryInput>
class IncludeFilteredSummarizedCallable extends RelevantSummarizedCallable {
class IncludeFilteredSummarizedCallable extends IncludeSummarizedCallable {
/**
* Holds if flow is propagated between `input` and `output` and
* if there is no summary for a callable in a `base` class or interface
@@ -16,7 +10,7 @@ class IncludeFilteredSummarizedCallable extends RelevantSummarizedCallable {
override predicate relevantSummary(
SummaryComponentStack input, SummaryComponentStack output, boolean preservesValue
) {
this.(SummarizedCallableImpl).propagatesFlow(input, output, preservesValue) and
this.propagatesFlow(input, output, preservesValue) and
not exists(IncludeSummarizedCallable rsc |
isBaseCallableOrPrototype(rsc) and
rsc.(SummarizedCallableImpl).propagatesFlow(input, output, preservesValue) and
@@ -24,3 +18,5 @@ class IncludeFilteredSummarizedCallable extends RelevantSummarizedCallable {
)
}
}
import TestSummaryOutput<IncludeFilteredSummarizedCallable>