Skip to content

Commit d871646

Browse files
committed
More Fixes
1 parent 6c91867 commit d871646

File tree

5 files changed

+66
-20
lines changed

5 files changed

+66
-20
lines changed

java/ql/lib/semmle/code/java/dataflow/DataFlow.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@ import java
1010
module DataFlow {
1111
private import semmle.code.java.dataflow.internal.DataFlowImplSpecific
1212
private import codeql.dataflow.DataFlow
13-
import DataFlowMake<Location, JavaDataFlow>
13+
import DataFlowMakeOverlay<Location, JavaDataFlow>
1414
import Public
1515
}

java/ql/lib/semmle/code/java/dataflow/TaintTracking.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,5 @@ module TaintTracking {
1313
private import semmle.code.java.dataflow.internal.DataFlowImplSpecific
1414
private import semmle.code.java.dataflow.internal.TaintTrackingImplSpecific
1515
private import codeql.dataflow.TaintTracking
16-
import TaintFlowMake<Location, JavaDataFlow, JavaTaintTracking>
16+
import TaintFlowMakeOverlay<Location, JavaDataFlow, JavaTaintTracking>
1717
}

shared/dataflow/codeql/dataflow/DataFlow.qll

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1102,7 +1102,7 @@ module DataFlowMakeCore<LocationSig Location, InputSig<Location> Lang> {
11021102
}
11031103
}
11041104

1105-
private module DataFlowMakeNonOverlayInformed<LocationSig Location, InputSig<Location> Lang> {
1105+
module DataFlowMake<LocationSig Location, InputSig<Location> Lang> {
11061106
import DataFlowMakeCore<Location, Lang>
11071107
private import Lang
11081108
private import internal.DataFlowImpl::MakeImpl<Location, Lang>
@@ -1162,17 +1162,9 @@ private module DataFlowMakeNonOverlayInformed<LocationSig Location, InputSig<Loc
11621162

11631163
import Flow
11641164
}
1165-
11661165
}
11671166

1168-
private module DataFlowMakeOverlayInformed<LocationSig Location, InputSig<Location> Lang> {
1169-
import DataFlowMakeCore<Location, Lang>
1170-
private import Lang
1171-
private import internal.DataFlowImpl::MakeImpl<Location, Lang>
1172-
private import internal.DataFlowImplStage1::MakeImplStage1<Location, Lang>
1173-
1174-
1175-
1167+
module DataFlowMakeOverlay<LocationSig Location, InputSig<Location> Lang> {
11761168
import DataFlowMakeCore<Location, Lang>
11771169
private import Lang
11781170
private import internal.DataFlowImpl::MakeImpl<Location, Lang>
@@ -1190,6 +1182,8 @@ private module DataFlowMakeOverlayInformed<LocationSig Location, InputSig<Locati
11901182
predicate isAdditionalFlowStep(Node node1, Node node2, string model) {
11911183
Config::isAdditionalFlowStep(node1, node2) and model = "Config"
11921184
}
1185+
1186+
predicate observeOverlayInformedIncrementalMode() { not Config::observeDiffInformedIncrementalMode() }
11931187
}
11941188

11951189
private module Stage1 = ImplStage1<C>;
@@ -1219,6 +1213,8 @@ private module DataFlowMakeOverlayInformed<LocationSig Location, InputSig<Locati
12191213
) {
12201214
Config::isAdditionalFlowStep(node1, state1, node2, state2) and model = "Config"
12211215
}
1216+
1217+
predicate observeOverlayInformedIncrementalMode() { not Config::observeDiffInformedIncrementalMode() }
12221218
}
12231219

12241220
private module Stage1 = ImplStage1<C>;

shared/dataflow/codeql/dataflow/TaintTracking.qll

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ private module TaintFlowMakeCore<
155155
}
156156
}
157157

158-
private module TaintFlowMakeNonOverlay<
158+
module TaintFlowMake<
159159
LocationSig Location, DF::InputSig<Location> DataFlowLang,
160160
InputSig<Location, DataFlowLang> TaintTrackingLang>
161161
{
@@ -174,6 +174,10 @@ private module TaintFlowMakeNonOverlay<
174174
) {
175175
Config::isAdditionalFlowStep(node1, node2) and model = "Config"
176176
}
177+
178+
predicate observeOverlayInformedIncrementalMode() {
179+
not Config::observeDiffInformedIncrementalMode()
180+
}
177181
}
178182

179183
private module C implements DataFlowInternal::FullStateConfigSig {
@@ -208,6 +212,8 @@ private module TaintFlowMakeNonOverlay<
208212
) {
209213
Config::isAdditionalFlowStep(node1, state1, node2, state2) and model = "Config"
210214
}
215+
216+
predicate observeOverlayInformedIncrementalMode() { none() }
211217
}
212218

213219
private module C implements DataFlowInternal::FullStateConfigSig {
@@ -279,6 +285,8 @@ private module TaintFlowMakeNonOverlay<
279285
) {
280286
Config::isAdditionalFlowStep(node1, state1, node2, state2) and model = "Config"
281287
}
288+
289+
predicate observeOverlayInformedIncrementalMode() { none() }
282290
}
283291

284292
private module C implements DataFlowInternal::FullStateConfigSig {
@@ -295,8 +303,7 @@ private module TaintFlowMakeNonOverlay<
295303
}
296304
}
297305

298-
299-
private module TaintFlowMakeOverlay<
306+
module TaintFlowMakeOverlay<
300307
LocationSig Location, DF::InputSig<Location> DataFlowLang,
301308
InputSig<Location, DataFlowLang> TaintTrackingLang>
302309
{
@@ -316,6 +323,9 @@ private module TaintFlowMakeOverlay<
316323
Config::isAdditionalFlowStep(node1, node2) and model = "Config"
317324
}
318325

326+
predicate observeOverlayInformedIncrementalMode() {
327+
not Config::observeDiffInformedIncrementalMode()
328+
}
319329
}
320330

321331
private module C implements DataFlowInternal::FullStateConfigSig {
@@ -350,6 +360,10 @@ private module TaintFlowMakeOverlay<
350360
) {
351361
Config::isAdditionalFlowStep(node1, state1, node2, state2) and model = "Config"
352362
}
363+
364+
predicate observeOverlayInformedIncrementalMode() {
365+
not Config::observeDiffInformedIncrementalMode()
366+
}
353367
}
354368

355369
private module C implements DataFlowInternal::FullStateConfigSig {
@@ -381,6 +395,10 @@ private module TaintFlowMakeOverlay<
381395
) {
382396
Config::isAdditionalFlowStep(node1, node2) and model = "Config"
383397
}
398+
399+
predicate observeOverlayInformedIncrementalMode() {
400+
not Config::observeDiffInformedIncrementalMode()
401+
}
384402
}
385403

386404
private module C implements DataFlowInternal::FullStateConfigSig {
@@ -419,6 +437,10 @@ private module TaintFlowMakeOverlay<
419437
) {
420438
Config::isAdditionalFlowStep(node1, state1, node2, state2) and model = "Config"
421439
}
440+
441+
predicate observeOverlayInformedIncrementalMode() {
442+
not Config::observeDiffInformedIncrementalMode()
443+
}
422444
}
423445

424446
private module C implements DataFlowInternal::FullStateConfigSig {

shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,13 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
143143
*/
144144
predicate observeDiffInformedIncrementalMode();
145145

146+
/**
147+
* Holds if sources and sinks should be filtered to only include those that
148+
* are in the overlay database. This only has an effect when running
149+
* in overlay-informed incremental mode.
150+
*/
151+
predicate observeOverlayInformedIncrementalMode();
152+
146153
Location getASelectedSourceLocation(Node source);
147154

148155
Location getASelectedSinkLocation(Node sink);
@@ -195,7 +202,7 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
195202
or
196203
// If we are overlay informed (i.e. we are not diff-informed), we
197204
// merge in the local results which includes the base database results.
198-
flowLocal(source, sink) and not Config::observeDiffInformedIncrementalMode()
205+
flowLocal(source, sink) and Config::observeOverlayInformedIncrementalMode()
199206
}
200207

201208
/**
@@ -212,13 +219,36 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
212219
or
213220
// If we are overlay informed (i.e. we are not diff-informed), we
214221
// merge in the local results which includes the base database results.
215-
flowToLocal(sink) and not Config::observeDiffInformedIncrementalMode()
222+
flowToLocal(sink) and not Config::observeOverlayInformedIncrementalMode()
216223
}
217224

218225
/**
219226
* Holds if data can flow from some source to `sink`.
220227
*/
221228
predicate flowToExpr(Lang::DataFlowExpr sink) { flowTo(exprNode(sink)) }
229+
230+
/**
231+
* Holds if data can flow to some sink from `source`.
232+
*
233+
* This is a local predicate that only has results local to the overlay/base database.
234+
*/
235+
predicate flowFromLocal(Node source) = forceLocal(Base::flowFrom/1)(source)
236+
237+
/**
238+
* Holds if data can flow to some sink from `source`.
239+
*/
240+
predicate flowFrom(Node source) {
241+
Base::flowFrom(source)
242+
or
243+
// If we are overlay informed (i.e. we are not diff-informed), we
244+
// merge in the local results which includes the base database results.
245+
flowFromLocal(source) and not Config::observeOverlayInformedIncrementalMode()
246+
}
247+
248+
/**
249+
* Holds if data can flow from some source to `sink`.
250+
*/
251+
predicate flowFromExpr(Lang::DataFlowExpr sink) { flowFrom(exprNode(sink)) }
222252
}
223253

224254
/**
@@ -3447,9 +3477,7 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
34473477
/**
34483478
* Holds if data can flow from `source` to some sink.
34493479
*/
3450-
private predicate flowFrom(Node source) {
3451-
exists(PathNode n | n.isSource() and n.getNode() = source)
3452-
}
3480+
predicate flowFrom(Node source) { exists(PathNode n | n.isSource() and n.getNode() = source) }
34533481

34543482
/**
34553483
* Holds if data can flow from `source` to some sink.

0 commit comments

Comments
 (0)