Skip to content

Commit b5c596b

Browse files
committed
Shared: Split model printing of summaries and sources/sinks into separate param modules.
1 parent f5a295c commit b5c596b

File tree

4 files changed

+42
-29
lines changed

4 files changed

+42
-29
lines changed

csharp/ql/src/utils/modelgenerator/internal/CaptureTypeBasedSummaryModels.qll

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -177,15 +177,13 @@ private predicate output(Callable callable, TypeParameter tp, string output) {
177177
delegateSink(callable, tp, output)
178178
}
179179

180-
private module ModelPrintingInput implements ModelPrintingSig {
180+
private module ModelPrintingInput implements ModelPrintingSummarySig {
181181
class SummaryApi = TypeBasedFlowTargetApi;
182182

183-
class SourceOrSinkApi = TypeBasedFlowTargetApi;
184-
185183
string getProvenance() { result = "tb-generated" }
186184
}
187185

188-
private module Printing = ModelPrinting<ModelPrintingInput>;
186+
private module Printing = ModelPrintingSummary<ModelPrintingInput>;
189187

190188
/**
191189
* A class of callables that are relevant generating summaries for based

java/ql/src/utils/modelgenerator/internal/CaptureTypeBasedSummaryModels.qll

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -284,15 +284,13 @@ private predicate output(Callable callable, TypeVariable tv, string output) {
284284
functionalSink(callable, tv, output)
285285
}
286286

287-
module ModelPrintingInput implements ModelPrintingSig {
287+
module ModelPrintingInput implements ModelPrintingSummarySig {
288288
class SummaryApi = TypeBasedFlowTargetApi;
289289

290-
class SourceOrSinkApi = ModelGeneratorInput::SourceOrSinkTargetApi;
291-
292290
string getProvenance() { result = "tb-generated" }
293291
}
294292

295-
private module Printing = ModelPrinting<ModelPrintingInput>;
293+
private module Printing = ModelPrintingSummary<ModelPrintingInput>;
296294

297295
/**
298296
* A class of callables that are relevant generating summaries for based

shared/mad/codeql/mad/modelgenerator/internal/ModelGeneratorImpl.qll

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -370,20 +370,27 @@ module MakeModelGenerator<
370370
* based on heuristic data flow.
371371
*/
372372
module Heuristic {
373-
private module ModelPrintingInput implements Printing::ModelPrintingSig {
373+
private module ModelPrintingSummaryInput implements Printing::ModelPrintingSummarySig {
374374
class SummaryApi = DataFlowSummaryTargetApi;
375375

376+
string getProvenance() { result = "df-generated" }
377+
}
378+
379+
module ModelPrintingSummary = Printing::ModelPrintingSummary<ModelPrintingSummaryInput>;
380+
381+
private module ModelPrintingSourceOrSinkInput implements Printing::ModelPrintingSourceOrSinkSig {
376382
class SourceOrSinkApi = SourceOrSinkTargetApi;
377383

378384
string getProvenance() { result = "df-generated" }
379385
}
380386

381-
module ModelPrinting = Printing::ModelPrinting<ModelPrintingInput>;
382-
383387
private string getOutput(ReturnNodeExt node) {
384388
result = PrintReturnNodeExt<paramReturnNodeAsOutput/2>::getOutput(node)
385389
}
386390

391+
private module ModelPrintingSourceOrSink =
392+
Printing::ModelPrintingSourceOrSink<ModelPrintingSourceOrSinkInput>;
393+
387394
/**
388395
* Holds if data can flow from `node1` to `node2` either via a read or a write of an intermediate field `f`.
389396
*/
@@ -419,7 +426,7 @@ module MakeModelGenerator<
419426
api = returnNodeEnclosingCallable(ret) and
420427
isOwnInstanceAccessNode(ret)
421428
) and
422-
result = ModelPrinting::asLiftedValueModel(api, qualifierString(), "ReturnValue")
429+
result = ModelPrintingSummary::asLiftedValueModel(api, qualifierString(), "ReturnValue")
423430
}
424431

425432
private int accessPathLimit0() { result = 2 }
@@ -539,7 +546,7 @@ module MakeModelGenerator<
539546
input = parameterNodeAsInput(p) and
540547
output = getOutput(returnNodeExt) and
541548
input != output and
542-
result = ModelPrinting::asLiftedTaintModel(api, input, output)
549+
result = ModelPrintingSummary::asLiftedTaintModel(api, input, output)
543550
)
544551
}
545552

@@ -572,7 +579,7 @@ module MakeModelGenerator<
572579
exists(captureFlow(api0)) and api0.lift() = api.lift()
573580
) and
574581
api.isRelevant() and
575-
result = ModelPrinting::asNeutralSummaryModel(api)
582+
result = ModelPrintingSummary::asNeutralSummaryModel(api)
576583
}
577584

578585
/**
@@ -617,7 +624,7 @@ module MakeModelGenerator<
617624
sourceNode(source, kind) and
618625
api = getEnclosingCallable(sink) and
619626
not irrelevantSourceSinkApi(getEnclosingCallable(source), api) and
620-
result = ModelPrinting::asSourceModel(api, getOutput(sink), kind)
627+
result = ModelPrintingSourceOrSink::asSourceModel(api, getOutput(sink), kind)
621628
)
622629
}
623630

@@ -663,7 +670,7 @@ module MakeModelGenerator<
663670
PropagateToSink::flow(src, sink) and
664671
sinkNode(sink, kind) and
665672
api = getEnclosingCallable(src) and
666-
result = ModelPrinting::asSinkModel(api, asInputArgument(src), kind)
673+
result = ModelPrintingSourceOrSink::asSinkModel(api, asInputArgument(src), kind)
667674
)
668675
}
669676
}
@@ -703,15 +710,13 @@ module MakeModelGenerator<
703710

704711
private module PropagateContentFlow = ContentDataFlow::Global<PropagateContentFlowConfig>;
705712

706-
private module ContentModelPrintingInput implements Printing::ModelPrintingSig {
713+
private module ContentModelPrintingInput implements Printing::ModelPrintingSummarySig {
707714
class SummaryApi = DataFlowSummaryTargetApi;
708715

709-
class SourceOrSinkApi = SourceOrSinkTargetApi;
710-
711716
string getProvenance() { result = "dfc-generated" }
712717
}
713718

714-
private module ContentModelPrinting = Printing::ModelPrinting<ContentModelPrintingInput>;
719+
private module ContentModelPrinting = Printing::ModelPrintingSummary<ContentModelPrintingInput>;
715720

716721
private string getContentOutput(ReturnNodeExt node) {
717722
result = PrintReturnNodeExt<paramReturnNodeAsContentOutput/2>::getOutput(node)
@@ -1075,6 +1080,6 @@ module MakeModelGenerator<
10751080
)
10761081
) and
10771082
api.isRelevant() and
1078-
result = Heuristic::ModelPrinting::asNeutralSummaryModel(api)
1083+
result = Heuristic::ModelPrintingSummary::asNeutralSummaryModel(api)
10791084
}
10801085
}

shared/mad/codeql/mad/modelgenerator/internal/ModelPrinting.qll

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,30 +16,40 @@ signature module ModelPrintingLangSig {
1616
}
1717

1818
module ModelPrintingImpl<ModelPrintingLangSig Lang> {
19-
signature module ModelPrintingSig {
19+
signature module ModelPrintingSummarySig {
2020
/**
2121
* The class of APIs relevant for model generation.
2222
*/
2323
class SummaryApi extends Lang::Callable {
2424
Lang::Callable lift();
2525
}
2626

27-
class SourceOrSinkApi extends Lang::Callable;
28-
2927
/**
3028
* Gets the string representation of the provenance of the models.
3129
*/
3230
string getProvenance();
3331
}
3432

35-
module ModelPrinting<ModelPrintingSig Printing> {
33+
signature module ModelPrintingSourceOrSinkSig {
3634
/**
37-
* Computes the first columns for MaD rows used for summaries, sources and sinks.
35+
* The class of APIs relevant for model generation.
3836
*/
39-
private string asPartialModel(Lang::Callable api) {
40-
result = strictconcat(int i | | Lang::partialModelRow(api, i), ";" order by i) + ";"
41-
}
37+
class SourceOrSinkApi extends Lang::Callable;
38+
39+
/**
40+
* Gets the string representation of the provenance of the models.
41+
*/
42+
string getProvenance();
43+
}
44+
45+
/**
46+
* Computes the first columns for MaD rows used for summaries, sources and sinks.
47+
*/
48+
private string asPartialModel(Lang::Callable api) {
49+
result = strictconcat(int i | | Lang::partialModelRow(api, i), ";" order by i) + ";"
50+
}
4251

52+
module ModelPrintingSummary<ModelPrintingSummarySig Printing> {
4353
/**
4454
* Computes the first columns for neutral MaD rows.
4555
*/
@@ -106,7 +116,9 @@ module ModelPrintingImpl<ModelPrintingLangSig Lang> {
106116
preservesValue = false and
107117
result = asSummaryModel(api, input, output, "taint", lift)
108118
}
119+
}
109120

121+
module ModelPrintingSourceOrSink<ModelPrintingSourceOrSinkSig Printing> {
110122
/**
111123
* Gets the sink model for `api` with `input` and `kind`.
112124
*/

0 commit comments

Comments
 (0)