Skip to content

Commit a20e093

Browse files
committed
All types matching up
1 parent 641d379 commit a20e093

1 file changed

Lines changed: 43 additions & 39 deletions

File tree

shared/dataflowstack/codeql/dataflowstack/TaintTrackingStack.qll

Lines changed: 43 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -25,58 +25,59 @@ module LanguageTaintTracking<LocationSig Location, DF::InputSig<Location> Lang,
2525
module TaintFlowOverlayGlobal = AbstractTaintFlowOverlay::Global<Config>;
2626

2727
/**
28-
* A Taint tracking implementation without Overlay
28+
* A Taint tracking implementation, paramaterized over a DataFlow type
2929
*/
30-
signature module TaintTrackingStackSig{
30+
signature module TaintTrackingStackSig<AbstractDataFlow::GlobalFlowSig GlobalFlow>{
3131

32-
Lang::Node getNode(TaintFlowGlobal::PathNode n);
32+
Lang::Node getNode(GlobalFlow::PathNode n);
3333

34-
predicate isSource(TaintFlowGlobal::PathNode n);
34+
predicate isSource(GlobalFlow::PathNode n);
3535

36-
TaintFlowGlobal::PathNode getASuccessor(
37-
TaintFlowGlobal::PathNode n
36+
GlobalFlow::PathNode getASuccessor(
37+
GlobalFlow::PathNode n
3838
);
3939

4040
Lang::DataFlowCallable getARuntimeTarget(Lang::DataFlowCall call);
4141

4242
Lang::Node getAnArgumentNode(Lang::DataFlowCall call);
4343
}
4444

45-
/**
46-
* TODO: Declare a AbstractTaintFlow Signature, and allow consumer to specify either TaintFlowMake or TaintFlowMakeOverlay
47-
* depending on the language
48-
*
49-
* A Taint tracking implementation with Overlay
50-
*/
51-
signature module TaintTrackingOverlayStackSig<AbstractDF::ConfigSig Config>{
45+
// TODO: Declare a AbstractTaintFlow Signature, and allow consumer to specify either TaintFlowMake or TaintFlowMakeOverlay
46+
// depending on the language
47+
//
48+
// A Taint tracking implementation with Overlay
49+
// /
50+
// signature module TaintTrackingOverlayStackSig<AbstractDF::ConfigSig Config>{
5251

53-
Lang::Node getNode(TaintFlowOverlayGlobal::PathNode n);
52+
// Lang::Node getNode(TaintFlowOverlayGlobal::PathNode n);
5453

55-
predicate isSource(TaintFlowOverlayGlobal::PathNode n);
54+
// predicate isSource(TaintFlowOverlayGlobal::PathNode n);
5655

57-
TaintFlowOverlayGlobal::PathNode getASuccessor(
58-
TaintFlowOverlayGlobal::PathNode n
59-
);
56+
// TaintFlowOverlayGlobal::PathNode getASuccessor(
57+
// TaintFlowOverlayGlobal::PathNode n
58+
// );
6059

61-
Lang::DataFlowCallable getARuntimeTarget(Lang::DataFlowCall call);
60+
// Lang::DataFlowCallable getARuntimeTarget(Lang::DataFlowCall call);
6261

63-
Lang::Node getAnArgumentNode(Lang::DataFlowCall call);
64-
}
62+
// Lang::Node getAnArgumentNode(Lang::DataFlowCall call);
63+
// }
6564
}
6665

6766
module BiStackAnalysis<
6867
AbstractDF::ConfigSig ConfigA,
69-
DataFlowGroup<ConfigA>::TaintTrackingStackSig TaintTrackingStackA,
68+
AbstractDataFlow::GlobalFlowSig GlobalFlowA,
69+
DataFlowGroup<ConfigA>::TaintTrackingStackSig<GlobalFlowA> TaintTrackingStackA,
7070
AbstractDF::ConfigSig ConfigB,
71-
DataFlowGroup<ConfigB>::TaintTrackingStackSig TaintTrackingStackB>
71+
AbstractDataFlow::GlobalFlowSig GlobalFlowB,
72+
DataFlowGroup<ConfigB>::TaintTrackingStackSig<GlobalFlowB> TaintTrackingStackB>
7273
{
73-
module FlowA = AbstractTaintFlow::Global<ConfigA>;
74+
module FlowA = GlobalFlowA;
7475

75-
module FlowStackA = FlowStack<ConfigA, TaintTrackingStackA>;
76+
module FlowStackA = FlowStack<GlobalFlowA, ConfigA, TaintTrackingStackA>;
7677

77-
module FlowB = AbstractTaintFlow::Global<ConfigB>;
78+
module FlowB = GlobalFlowB;
7879

79-
module FlowStackB = FlowStack<ConfigB, TaintTrackingStackB>;
80+
module FlowStackB = FlowStack<GlobalFlowB, ConfigB, TaintTrackingStackB>;
8081

8182
/**
8283
* Holds if either the Stack associated with `sourceNodeA` is a subset of the stack associated with `sourceNodeB`
@@ -94,10 +95,10 @@ module LanguageTaintTracking<LocationSig Location, DF::InputSig<Location> Lang,
9495
flowStackA = FlowStackA::createFlowStack(sourceNodeA, sinkNodeA) and
9596
flowStackB = FlowStackB::createFlowStack(sourceNodeB, sinkNodeB) and
9697
(
97-
BiStackAnalysisImpl<ConfigA, TaintTrackingStackA, ConfigB, TaintTrackingStackB>::flowStackIsSubsetOf(flowStackA,
98+
BiStackAnalysisImpl<GlobalFlowA, ConfigA, TaintTrackingStackA, GlobalFlowB, ConfigB, TaintTrackingStackB>::flowStackIsSubsetOf(flowStackA,
9899
flowStackB)
99100
or
100-
BiStackAnalysisImpl<ConfigB, TaintTrackingStackB, ConfigA, TaintTrackingStackA>::flowStackIsSubsetOf(flowStackB,
101+
BiStackAnalysisImpl<GlobalFlowB, ConfigB, TaintTrackingStackB, GlobalFlowA, ConfigA, TaintTrackingStackA>::flowStackIsSubsetOf(flowStackB,
101102
flowStackA)
102103
)
103104
)
@@ -122,10 +123,10 @@ module LanguageTaintTracking<LocationSig Location, DF::InputSig<Location> Lang,
122123
flowStackA = FlowStackA::createFlowStack(sourceNodeA, sinkNodeA) and
123124
flowStackB = FlowStackB::createFlowStack(sourceNodeB, sinkNodeB) and
124125
(
125-
BiStackAnalysisImpl<ConfigA, TaintTrackingStackA, ConfigB, TaintTrackingStackB>::flowStackIsConvergingTerminatingSubsetOf(flowStackA,
126+
BiStackAnalysisImpl<GlobalFlowA, ConfigA, TaintTrackingStackA, GlobalFlowB, ConfigB, TaintTrackingStackB>::flowStackIsConvergingTerminatingSubsetOf(flowStackA,
126127
flowStackB)
127128
or
128-
BiStackAnalysisImpl<ConfigB, TaintTrackingStackB, ConfigA, TaintTrackingStackA>::flowStackIsConvergingTerminatingSubsetOf(flowStackB,
129+
BiStackAnalysisImpl<GlobalFlowB, ConfigB, TaintTrackingStackB, GlobalFlowA, ConfigA, TaintTrackingStackA>::flowStackIsConvergingTerminatingSubsetOf(flowStackB,
129130
flowStackA)
130131
)
131132
)
@@ -138,7 +139,7 @@ module LanguageTaintTracking<LocationSig Location, DF::InputSig<Location> Lang,
138139
* The top of stackA is in stackB and the bottom of stackA is then some successor further down stackB.
139140
*/
140141
predicate flowStackIsSubsetOf(FlowStackA::FlowStack flowStackA, FlowStackB::FlowStack flowStackB) {
141-
BiStackAnalysisImpl<ConfigA, TaintTrackingStackA, ConfigB, TaintTrackingStackB>::flowStackIsSubsetOf(flowStackA,
142+
BiStackAnalysisImpl<GlobalFlowA, ConfigA, TaintTrackingStackA, GlobalFlowB, ConfigB, TaintTrackingStackB>::flowStackIsSubsetOf(flowStackA,
142143
flowStackB)
143144
}
144145

@@ -150,21 +151,23 @@ module LanguageTaintTracking<LocationSig Location, DF::InputSig<Location> Lang,
150151
predicate flowStackIsConvergingTerminatingSubsetOf(
151152
FlowStackA::FlowStack flowStackA, FlowStackB::FlowStack flowStackB
152153
) {
153-
BiStackAnalysisImpl<ConfigA, TaintTrackingStackA, ConfigB, TaintTrackingStackB>::flowStackIsConvergingTerminatingSubsetOf(flowStackA,
154+
BiStackAnalysisImpl<GlobalFlowA, ConfigA, TaintTrackingStackA, GlobalFlowB, ConfigB, TaintTrackingStackB>::flowStackIsConvergingTerminatingSubsetOf(flowStackA,
154155
flowStackB)
155156
}
156157
}
157158

158159
private module BiStackAnalysisImpl<
160+
AbstractDataFlow::GlobalFlowSig GlobalFlowA,
159161
AbstractDF::ConfigSig ConfigA,
160-
DataFlowGroup<ConfigA>::TaintTrackingStackSig DataFlowStackA,
162+
DataFlowGroup<ConfigA>::TaintTrackingStackSig<GlobalFlowA> DataFlowStackA,
163+
AbstractDataFlow::GlobalFlowSig GlobalFlowB,
161164
AbstractDF::ConfigSig ConfigB,
162-
DataFlowGroup<ConfigB>::TaintTrackingStackSig DataFlowStackB>
165+
DataFlowGroup<ConfigB>::TaintTrackingStackSig<GlobalFlowB> DataFlowStackB>
163166
{
164167

165-
module FlowStackA = FlowStack<ConfigA, DataFlowStackA>;
168+
module FlowStackA = FlowStack<GlobalFlowA, ConfigA, DataFlowStackA>;
166169

167-
module FlowStackB = FlowStack<ConfigB, DataFlowStackB>;
170+
module FlowStackB = FlowStack<GlobalFlowB, ConfigB, DataFlowStackB>;
168171

169172
/**
170173
* Holds if stackA is a subset of stackB,
@@ -209,10 +212,11 @@ module LanguageTaintTracking<LocationSig Location, DF::InputSig<Location> Lang,
209212
}
210213

211214
module FlowStack<
215+
AbstractDataFlow::GlobalFlowSig GlobalFlow,
212216
AbstractDF::ConfigSig Config,
213-
DataFlowGroup<Config>::TaintTrackingStackSig TaintTrackingStack>
217+
DataFlowGroup<Config>::TaintTrackingStackSig<GlobalFlow> TaintTrackingStack>
214218
{
215-
private module Flow = TT::TaintFlowMake<Location, Lang, TTLang>::Global<Config>;
219+
private module Flow = GlobalFlow; //TT::TaintFlowMake<Location, Lang, TTLang>::Global<Config>;
216220

217221
/**
218222
* Determines whether or not the given PathNode is a source

0 commit comments

Comments
 (0)