Skip to content

Commit 7ddc52f

Browse files
committed
Shared: Split model printing of summaries and sources/sinks into separate param modules.
1 parent 8857f0d commit 7ddc52f

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 }
@@ -535,7 +542,7 @@ module MakeModelGenerator<
535542
input = parameterNodeAsInput(p) and
536543
output = getOutput(returnNodeExt) and
537544
input != output and
538-
result = ModelPrinting::asLiftedTaintModel(api, input, output)
545+
result = ModelPrintingSummary::asLiftedTaintModel(api, input, output)
539546
)
540547
}
541548

@@ -568,7 +575,7 @@ module MakeModelGenerator<
568575
exists(captureFlow(api0)) and api0.lift() = api.lift()
569576
) and
570577
api.isRelevant() and
571-
result = ModelPrinting::asNeutralSummaryModel(api)
578+
result = ModelPrintingSummary::asNeutralSummaryModel(api)
572579
}
573580

574581
/**
@@ -613,7 +620,7 @@ module MakeModelGenerator<
613620
sourceNode(source, kind) and
614621
api = getEnclosingCallable(sink) and
615622
not irrelevantSourceSinkApi(getEnclosingCallable(source), api) and
616-
result = ModelPrinting::asSourceModel(api, getOutput(sink), kind)
623+
result = ModelPrintingSourceOrSink::asSourceModel(api, getOutput(sink), kind)
617624
)
618625
}
619626

@@ -659,7 +666,7 @@ module MakeModelGenerator<
659666
PropagateToSink::flow(src, sink) and
660667
sinkNode(sink, kind) and
661668
api = getEnclosingCallable(src) and
662-
result = ModelPrinting::asSinkModel(api, asInputArgument(src), kind)
669+
result = ModelPrintingSourceOrSink::asSinkModel(api, asInputArgument(src), kind)
663670
)
664671
}
665672
}
@@ -699,15 +706,13 @@ module MakeModelGenerator<
699706

700707
private module PropagateContentFlow = ContentDataFlow::Global<PropagateContentFlowConfig>;
701708

702-
private module ContentModelPrintingInput implements Printing::ModelPrintingSig {
709+
private module ContentModelPrintingInput implements Printing::ModelPrintingSummarySig {
703710
class SummaryApi = DataFlowSummaryTargetApi;
704711

705-
class SourceOrSinkApi = SourceOrSinkTargetApi;
706-
707712
string getProvenance() { result = "dfc-generated" }
708713
}
709714

710-
private module ContentModelPrinting = Printing::ModelPrinting<ContentModelPrintingInput>;
715+
private module ContentModelPrinting = Printing::ModelPrintingSummary<ContentModelPrintingInput>;
711716

712717
private string getContentOutput(ReturnNodeExt node) {
713718
result = PrintReturnNodeExt<paramReturnNodeAsContentOutput/2>::getOutput(node)
@@ -1071,6 +1076,6 @@ module MakeModelGenerator<
10711076
)
10721077
) and
10731078
api.isRelevant() and
1074-
result = Heuristic::ModelPrinting::asNeutralSummaryModel(api)
1079+
result = Heuristic::ModelPrintingSummary::asNeutralSummaryModel(api)
10751080
}
10761081
}

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)