Skip to content

Commit 914a605

Browse files
committed
Ruby: Rework hidden synthetic data-flow nodes
1 parent 994d990 commit 914a605

File tree

15 files changed

+1239
-416
lines changed

15 files changed

+1239
-416
lines changed

ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -800,7 +800,17 @@ predicate nodeIsHidden(Node n) {
800800
or
801801
n = LocalFlow::getParameterDefNode(_)
802802
or
803-
isDesugarNode(n.(ExprNode).getExprNode().getExpr())
803+
exists(AstNode desug |
804+
isDesugarNode(desug) and
805+
desug.isSynthesized() and
806+
not desug = [any(ArrayLiteral al).getDesugared(), any(HashLiteral hl).getDesugared()]
807+
|
808+
desug = n.asExpr().getExpr()
809+
or
810+
desug = n.(PostUpdateNode).getPreUpdateNode().asExpr().getExpr()
811+
or
812+
desug = n.(ParameterNode).getParameter()
813+
)
804814
or
805815
n instanceof FlowSummaryNode
806816
or

ruby/ql/test/library-tests/dataflow/array-flow/array-flow.expected

Lines changed: 648 additions & 218 deletions
Large diffs are not rendered by default.

ruby/ql/test/library-tests/dataflow/flow-summaries/semantics.expected

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -162,8 +162,10 @@ edges
162162
| semantics.rb:116:5:116:5 | h [element :a] | semantics.rb:117:16:117:16 | h [element :a] | provenance | |
163163
| semantics.rb:116:5:116:5 | h [element :a] | semantics.rb:121:22:121:22 | h [element :a] | provenance | |
164164
| semantics.rb:116:5:116:5 | h [element :a] | semantics.rb:121:22:121:22 | h [element :a] | provenance | |
165-
| semantics.rb:116:14:116:14 | a | semantics.rb:116:5:116:5 | h [element :a] | provenance | |
166-
| semantics.rb:116:14:116:14 | a | semantics.rb:116:5:116:5 | h [element :a] | provenance | |
165+
| semantics.rb:116:9:116:22 | call to [] [element :a] | semantics.rb:116:5:116:5 | h [element :a] | provenance | |
166+
| semantics.rb:116:9:116:22 | call to [] [element :a] | semantics.rb:116:5:116:5 | h [element :a] | provenance | |
167+
| semantics.rb:116:14:116:14 | a | semantics.rb:116:9:116:22 | call to [] [element :a] | provenance | |
168+
| semantics.rb:116:14:116:14 | a | semantics.rb:116:9:116:22 | call to [] [element :a] | provenance | |
167169
| semantics.rb:117:14:117:16 | ** ... [element :a] | semantics.rb:117:10:117:17 | call to s16 | provenance | |
168170
| semantics.rb:117:14:117:16 | ** ... [element :a] | semantics.rb:117:10:117:17 | call to s16 | provenance | |
169171
| semantics.rb:117:16:117:16 | h [element :a] | semantics.rb:117:14:117:16 | ** ... [element :a] | provenance | |
@@ -212,10 +214,14 @@ edges
212214
| semantics.rb:135:5:135:7 | arr [element 0] | semantics.rb:136:15:136:17 | arr [element 0] | provenance | |
213215
| semantics.rb:135:5:135:7 | arr [element 1] | semantics.rb:136:15:136:17 | arr [element 1] | provenance | |
214216
| semantics.rb:135:5:135:7 | arr [element 1] | semantics.rb:136:15:136:17 | arr [element 1] | provenance | |
215-
| semantics.rb:135:12:135:12 | a | semantics.rb:135:5:135:7 | arr [element 0] | provenance | |
216-
| semantics.rb:135:12:135:12 | a | semantics.rb:135:5:135:7 | arr [element 0] | provenance | |
217-
| semantics.rb:135:15:135:15 | b | semantics.rb:135:5:135:7 | arr [element 1] | provenance | |
218-
| semantics.rb:135:15:135:15 | b | semantics.rb:135:5:135:7 | arr [element 1] | provenance | |
217+
| semantics.rb:135:11:135:16 | call to [] [element 0] | semantics.rb:135:5:135:7 | arr [element 0] | provenance | |
218+
| semantics.rb:135:11:135:16 | call to [] [element 0] | semantics.rb:135:5:135:7 | arr [element 0] | provenance | |
219+
| semantics.rb:135:11:135:16 | call to [] [element 1] | semantics.rb:135:5:135:7 | arr [element 1] | provenance | |
220+
| semantics.rb:135:11:135:16 | call to [] [element 1] | semantics.rb:135:5:135:7 | arr [element 1] | provenance | |
221+
| semantics.rb:135:12:135:12 | a | semantics.rb:135:11:135:16 | call to [] [element 0] | provenance | |
222+
| semantics.rb:135:12:135:12 | a | semantics.rb:135:11:135:16 | call to [] [element 0] | provenance | |
223+
| semantics.rb:135:15:135:15 | b | semantics.rb:135:11:135:16 | call to [] [element 1] | provenance | |
224+
| semantics.rb:135:15:135:15 | b | semantics.rb:135:11:135:16 | call to [] [element 1] | provenance | |
219225
| semantics.rb:136:14:136:17 | * ... [element 0] | semantics.rb:136:10:136:18 | call to s18 | provenance | |
220226
| semantics.rb:136:14:136:17 | * ... [element 0] | semantics.rb:136:10:136:18 | call to s18 | provenance | |
221227
| semantics.rb:136:14:136:17 | * ... [element 1] | semantics.rb:136:10:136:18 | call to s18 | provenance | |
@@ -1275,6 +1281,8 @@ nodes
12751281
| semantics.rb:115:9:115:18 | call to source | semmle.label | call to source |
12761282
| semantics.rb:116:5:116:5 | h [element :a] | semmle.label | h [element :a] |
12771283
| semantics.rb:116:5:116:5 | h [element :a] | semmle.label | h [element :a] |
1284+
| semantics.rb:116:9:116:22 | call to [] [element :a] | semmle.label | call to [] [element :a] |
1285+
| semantics.rb:116:9:116:22 | call to [] [element :a] | semmle.label | call to [] [element :a] |
12781286
| semantics.rb:116:14:116:14 | a | semmle.label | a |
12791287
| semantics.rb:116:14:116:14 | a | semmle.label | a |
12801288
| semantics.rb:117:10:117:17 | call to s16 | semmle.label | call to s16 |
@@ -1332,6 +1340,10 @@ nodes
13321340
| semantics.rb:135:5:135:7 | arr [element 0] | semmle.label | arr [element 0] |
13331341
| semantics.rb:135:5:135:7 | arr [element 1] | semmle.label | arr [element 1] |
13341342
| semantics.rb:135:5:135:7 | arr [element 1] | semmle.label | arr [element 1] |
1343+
| semantics.rb:135:11:135:16 | call to [] [element 0] | semmle.label | call to [] [element 0] |
1344+
| semantics.rb:135:11:135:16 | call to [] [element 0] | semmle.label | call to [] [element 0] |
1345+
| semantics.rb:135:11:135:16 | call to [] [element 1] | semmle.label | call to [] [element 1] |
1346+
| semantics.rb:135:11:135:16 | call to [] [element 1] | semmle.label | call to [] [element 1] |
13351347
| semantics.rb:135:12:135:12 | a | semmle.label | a |
13361348
| semantics.rb:135:12:135:12 | a | semmle.label | a |
13371349
| semantics.rb:135:15:135:15 | b | semmle.label | b |

0 commit comments

Comments
 (0)