@@ -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