Skip to content

Commit 4810419

Browse files
michaelnebelhvitved
authored andcommitted
C#: Extend SummarizedCallable from FlowSummaryImpl.
1 parent eb02211 commit 4810419

File tree

4 files changed

+25
-22
lines changed

4 files changed

+25
-22
lines changed

csharp/ql/lib/semmle/code/csharp/dataflow/FlowSummary.qll

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -153,14 +153,6 @@ abstract class SummarizedCallable extends DotNet::Callable {
153153
predicate clearsContent(ParameterPosition pos, DataFlow::ContentSet content) { none() }
154154
}
155155

156-
private predicate recordConstructorFlow(Constructor c, int i, Property p) {
157-
c = any(RecordType r).getAMember() and
158-
exists(string name |
159-
c.getParameter(i).getName() = name and
160-
c.getDeclaringType().getAMember(name) = p
161-
)
162-
}
163-
164156
private class SummarizedCallableAdapter extends Impl::Public::SummarizedCallable {
165157
private SummarizedCallable sc;
166158

@@ -177,14 +169,22 @@ private class SummarizedCallableAdapter extends Impl::Public::SummarizedCallable
177169
}
178170
}
179171

180-
private class RecordConstructorFlow extends SummarizedCallable {
181-
RecordConstructorFlow() { recordConstructorFlow(this, _, _) }
172+
private predicate recordConstructorFlow(Constructor c, int i, Property p) {
173+
c = any(RecordType r).getAMember() and
174+
exists(string name |
175+
c.getParameter(i).getName() = name and
176+
c.getDeclaringType().getAMember(name) = p
177+
)
178+
}
179+
180+
private class RecordConstructorFlow extends Impl::Public::SummarizedCallable {
181+
RecordConstructorFlow() { recordConstructorFlow(this.asCallable(), _, _) }
182182

183183
override predicate propagatesFlow(
184184
SummaryComponentStack input, SummaryComponentStack output, boolean preservesValue
185185
) {
186186
exists(int i, Property p |
187-
recordConstructorFlow(this, i, p) and
187+
recordConstructorFlow(this.asCallable(), i, p) and
188188
input = SummaryComponentStack::argument(i) and
189189
output = SummaryComponentStack::propertyOf(p, SummaryComponentStack::return()) and
190190
preservesValue = true

csharp/ql/lib/semmle/code/csharp/frameworks/EntityFramework.qll

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ private import semmle.code.csharp.frameworks.system.collections.Generic
1010
private import semmle.code.csharp.frameworks.Sql
1111
private import semmle.code.csharp.dataflow.FlowSummary
1212
private import semmle.code.csharp.dataflow.ExternalFlow
13+
private import semmle.code.csharp.dataflow.internal.FlowSummaryImpl as Impl
1314
private import semmle.code.csharp.dataflow.internal.DataFlowPrivate as DataFlowPrivate
1415

1516
/**
@@ -88,7 +89,7 @@ module EntityFramework {
8889
}
8990

9091
/** A flow summary for EntityFramework. */
91-
abstract class EFSummarizedCallable extends SummarizedCallable { }
92+
abstract class EFSummarizedCallable extends Impl::Public::SummarizedCallable { }
9293

9394
private class DbSetAddOrUpdateRequiredSummaryComponentStack extends RequiredSummaryComponentStack {
9495
override predicate required(SummaryComponent head, SummaryComponentStack tail) {
@@ -100,7 +101,7 @@ module EntityFramework {
100101
private class DbSetAddOrUpdate extends EFSummarizedCallable {
101102
private boolean range;
102103

103-
DbSetAddOrUpdate() { this = any(DbSet c).getAnAddOrUpdateMethod(range) }
104+
DbSetAddOrUpdate() { this.asCallable() = any(DbSet c).getAnAddOrUpdateMethod(range) }
104105

105106
override predicate propagatesFlow(
106107
SummaryComponentStack input, SummaryComponentStack output, boolean preservesValue
@@ -173,8 +174,8 @@ module EntityFramework {
173174
private class RawSqlStringConstructorSummarizedCallable extends EFSummarizedCallable {
174175
RawSqlStringConstructorSummarizedCallable() {
175176
exists(RawSqlStringStruct s |
176-
this = s.getAConstructor() and
177-
this.getNumberOfParameters() > 0
177+
this.asCallable() = s.getAConstructor() and
178+
this.asCallable().getNumberOfParameters() > 0
178179
)
179180
}
180181

@@ -189,7 +190,7 @@ module EntityFramework {
189190

190191
private class RawSqlStringConversionSummarizedCallable extends EFSummarizedCallable {
191192
RawSqlStringConversionSummarizedCallable() {
192-
exists(RawSqlStringStruct s | this = s.getAConversionTo())
193+
exists(RawSqlStringStruct s | this.asCallable() = s.getAConversionTo())
193194
}
194195

195196
override predicate propagatesFlow(
@@ -448,7 +449,7 @@ module EntityFramework {
448449
private class DbContextSaveChanges extends EFSummarizedCallable {
449450
private DbContextClass c;
450451

451-
DbContextSaveChanges() { this = c.getASaveChanges() }
452+
DbContextSaveChanges() { this.asCallable() = c.getASaveChanges() }
452453

453454
pragma[noinline]
454455
private predicate input(SummaryComponentStack input, Property mapped) {

csharp/ql/lib/semmle/code/csharp/frameworks/system/Collections.qll

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import csharp
44
private import semmle.code.csharp.frameworks.System
5+
private import semmle.code.csharp.dataflow.internal.FlowSummaryImpl as Impl
56
private import semmle.code.csharp.dataflow.ExternalFlow
67
private import semmle.code.csharp.dataflow.FlowSummary
78

@@ -47,11 +48,11 @@ private class SystemCollectionIEnumerableFlowModelCsv extends SummaryModelCsv {
4748
}
4849

4950
/** Clear content for Clear methods in all subtypes of `System.Collections.IEnumerable`. */
50-
private class SystemCollectionsIEnumerableClearFlow extends SummarizedCallable {
51+
private class SystemCollectionsIEnumerableClearFlow extends Impl::Public::SummarizedCallable {
5152
SystemCollectionsIEnumerableClearFlow() {
52-
this.getDeclaringType().(RefType).getABaseType*() instanceof
53+
this.asCallable().getDeclaringType().(RefType).getABaseType*() instanceof
5354
SystemCollectionsIEnumerableInterface and
54-
this.hasName("Clear")
55+
this.asCallable().hasName("Clear")
5556
}
5657

5758
override predicate clearsContent(ParameterPosition pos, DataFlow::ContentSet content) {

csharp/ql/lib/semmle/code/csharp/frameworks/system/Text.qll

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import csharp
44
private import semmle.code.csharp.frameworks.System
5+
private import semmle.code.csharp.dataflow.internal.FlowSummaryImpl as Impl
56
private import semmle.code.csharp.dataflow.ExternalFlow
67
private import semmle.code.csharp.dataflow.FlowSummary
78

@@ -27,9 +28,9 @@ class SystemTextStringBuilderClass extends SystemTextClass {
2728
}
2829

2930
/** Clear content for `System.Text.StringBuilder.Clear`. */
30-
private class SystemTextStringBuilderClearFlow extends SummarizedCallable {
31+
private class SystemTextStringBuilderClearFlow extends Impl::Public::SummarizedCallable {
3132
SystemTextStringBuilderClearFlow() {
32-
this = any(SystemTextStringBuilderClass s).getAMethod("Clear")
33+
this.asCallable() = any(SystemTextStringBuilderClass s).getAMethod("Clear")
3334
}
3435

3536
override predicate clearsContent(ParameterPosition pos, DataFlow::ContentSet content) {

0 commit comments

Comments
 (0)