Skip to content

Commit 8340841

Browse files
committed
Shared: Fix propagation of call bit
1 parent 950ae44 commit 8340841

File tree

2 files changed

+17
-8
lines changed

2 files changed

+17
-8
lines changed

java/ql/test/library-tests/dataflow/deduplicate-path-graph/test.expected

+11-2
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,20 @@ nodes
1414
| A.java:19:33:19:37 | step1 : String | semmle.label | step1 : String |
1515
| A.java:21:10:21:14 | step2 | semmle.label | step2 |
1616
| A.java:26:8:26:8 | x : String | semmle.label | x : String |
17+
| A.java:26:8:26:8 | x : String | semmle.label | x : String |
18+
| A.java:26:13:26:81 | ...?...:... : String | semmle.label | ...?...:... : String |
1719
| A.java:26:13:26:81 | ...?...:... : String | semmle.label | ...?...:... : String |
1820
| A.java:26:35:26:56 | propagateState(...) : String | semmle.label | propagateState(...) : String |
1921
| A.java:26:50:26:50 | x : String | semmle.label | x : String |
2022
| A.java:26:60:26:81 | propagateState(...) : String | semmle.label | propagateState(...) : String |
2123
| A.java:26:75:26:75 | x : String | semmle.label | x : String |
2224
| A.java:28:20:28:27 | source(...) : String | semmle.label | source(...) : String |
2325
| A.java:29:20:29:38 | apply(...) : String | semmle.label | apply(...) : String |
26+
| A.java:29:20:29:38 | apply(...) : String | semmle.label | apply(...) : String |
2427
| A.java:29:33:29:37 | step0 : String | semmle.label | step0 : String |
2528
| A.java:30:20:30:38 | apply(...) : String | semmle.label | apply(...) : String |
2629
| A.java:30:33:30:37 | step1 : String | semmle.label | step1 : String |
30+
| A.java:30:33:30:37 | step1 : String | semmle.label | step1 : String |
2731
| A.java:32:10:32:14 | step2 | semmle.label | step2 |
2832
edges
2933
| A.java:14:9:14:9 | x : String | A.java:14:29:14:29 | x : String | provenance | |
@@ -50,21 +54,26 @@ edges
5054
| A.java:26:75:26:75 | x : String | A.java:26:60:26:81 | propagateState(...) : String | provenance | Config |
5155
| A.java:28:20:28:27 | source(...) : String | A.java:29:33:29:37 | step0 : String | provenance | |
5256
| A.java:29:20:29:38 | apply(...) : String | A.java:30:33:30:37 | step1 : String | provenance | |
57+
| A.java:29:20:29:38 | apply(...) : String | A.java:30:33:30:37 | step1 : String | provenance | |
58+
| A.java:29:33:29:37 | step0 : String | A.java:26:8:26:8 | x : String | provenance | |
5359
| A.java:29:33:29:37 | step0 : String | A.java:26:8:26:8 | x : String | provenance | |
5460
| A.java:29:33:29:37 | step0 : String | A.java:29:20:29:38 | apply(...) : String | provenance | Config |
61+
| A.java:29:33:29:37 | step0 : String | A.java:29:20:29:38 | apply(...) : String | provenance | Config |
5562
| A.java:30:20:30:38 | apply(...) : String | A.java:32:10:32:14 | step2 | provenance | |
5663
| A.java:30:33:30:37 | step1 : String | A.java:26:8:26:8 | x : String | provenance | |
64+
| A.java:30:33:30:37 | step1 : String | A.java:26:8:26:8 | x : String | provenance | |
65+
| A.java:30:33:30:37 | step1 : String | A.java:30:20:30:38 | apply(...) : String | provenance | Config |
5766
| A.java:30:33:30:37 | step1 : String | A.java:30:20:30:38 | apply(...) : String | provenance | Config |
5867
subpaths
5968
| A.java:18:33:18:37 | step0 : String | A.java:14:9:14:9 | x : String | A.java:14:14:14:35 | propagateState(...) : String | A.java:18:20:18:38 | apply(...) : String |
6069
| A.java:18:33:18:37 | step0 : String | A.java:15:9:15:9 | x : String | A.java:15:14:15:35 | propagateState(...) : String | A.java:18:20:18:38 | apply(...) : String |
6170
| A.java:19:33:19:37 | step1 : String | A.java:14:9:14:9 | x : String | A.java:14:14:14:35 | propagateState(...) : String | A.java:19:20:19:38 | apply(...) : String |
6271
| A.java:19:33:19:37 | step1 : String | A.java:15:9:15:9 | x : String | A.java:15:14:15:35 | propagateState(...) : String | A.java:19:20:19:38 | apply(...) : String |
6372
| A.java:29:33:29:37 | step0 : String | A.java:26:8:26:8 | x : String | A.java:26:13:26:81 | ...?...:... : String | A.java:29:20:29:38 | apply(...) : String |
73+
| A.java:29:33:29:37 | step0 : String | A.java:26:8:26:8 | x : String | A.java:26:13:26:81 | ...?...:... : String | A.java:29:20:29:38 | apply(...) : String |
74+
| A.java:30:33:30:37 | step1 : String | A.java:26:8:26:8 | x : String | A.java:26:13:26:81 | ...?...:... : String | A.java:30:20:30:38 | apply(...) : String |
6475
| A.java:30:33:30:37 | step1 : String | A.java:26:8:26:8 | x : String | A.java:26:13:26:81 | ...?...:... : String | A.java:30:20:30:38 | apply(...) : String |
6576
spuriousFlow
66-
| A.java:26:35:26:56 | propagateState(...) : String | B | A |
67-
| A.java:26:60:26:81 | propagateState(...) : String | A | B |
6877
#select
6978
| A.java:17:20:17:27 | source(...) : String | A.java:17:20:17:27 | source(...) : String | A.java:21:10:21:14 | step2 | Flow |
7079
| A.java:28:20:28:27 | source(...) : String | A.java:28:20:28:27 | source(...) : String | A.java:32:10:32:14 | step2 | Flow |

shared/dataflow/codeql/dataflow/DataFlow.qll

+6-6
Original file line numberDiff line numberDiff line change
@@ -973,13 +973,13 @@ module DataFlowMake<LocationSig Location, InputSig<Location> Lang> {
973973
// Retain flow state if one of the successors requires it to be retained
974974
discriminatedPathNode(stepEx(getAPathNode(node, toString)), hasEnter)
975975
or
976-
// Enter a subpath
977-
discriminatedPathNode(enterSubpathStep(getAPathNode(node, toString)), _) and
978-
hasEnter = true
979-
or
980-
// Exit a subpath
981-
discriminatedPathNode(exitSubpathStep(getAPathNode(node, toString)), false) and
976+
// Propagate backwards from parameter to argument
977+
discriminatedPathNode(enterSubpathStep(getAPathNode(node, toString)), false) and
982978
hasEnter = false
979+
or
980+
// Propagate backwards from out to return
981+
discriminatedPathNode(exitSubpathStep(getAPathNode(node, toString)), _) and
982+
hasEnter = true
983983
)
984984
}
985985

0 commit comments

Comments
 (0)