Skip to content

Commit ce23ae3

Browse files
committed
Fix Scope::parentOf for HereDocBody
1 parent bb62564 commit ce23ae3

6 files changed

Lines changed: 45 additions & 33 deletions

File tree

ql/src/codeql_ruby/ast/Literal.qll

Lines changed: 2 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
private import codeql_ruby.AST
22
private import internal.AST
3+
private import internal.Scope
34
private import internal.TreeSitter
45

56
/**
@@ -559,16 +560,6 @@ class CharacterLiteral extends Literal, TCharacterLiteral {
559560
final override string getAPrimaryQlClass() { result = "CharacterLiteral" }
560561
}
561562

562-
pragma[noinline]
563-
private predicate rankHeredocBody(File f, Generated::HeredocBody b, int i) {
564-
b =
565-
rank[i](Generated::HeredocBody b0 |
566-
f = b0.getLocation().getFile()
567-
|
568-
b0 order by b0.getLocation().getStartLine(), b0.getLocation().getStartColumn()
569-
)
570-
}
571-
572563
/**
573564
* A "here document". For example:
574565
* ```rb
@@ -627,20 +618,8 @@ class HereDoc extends StringlikeLiteral, THereDoc {
627618
)
628619
}
629620

630-
private Generated::HeredocBody getBody() {
631-
exists(int i, File f |
632-
g =
633-
rank[i](Generated::HeredocBeginning b |
634-
f = b.getLocation().getFile()
635-
|
636-
b order by b.getLocation().getStartLine(), b.getLocation().getStartColumn()
637-
) and
638-
rankHeredocBody(f, result, i)
639-
)
640-
}
641-
642621
final override StringComponent getComponent(int n) {
643-
toGenerated(result) = this.getBody().getChild(n)
622+
toGenerated(result) = getHereDocBody(g).getChild(n)
644623
}
645624

646625
final override string toString() { result = g.getValue() }

ql/src/codeql_ruby/ast/internal/Scope.qll

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,31 @@ module ModuleBase {
5959
class Range extends Scope::Range, TypeRange { }
6060
}
6161

62+
pragma[noinline]
63+
private predicate rankHeredocBody(File f, Generated::HeredocBody b, int i) {
64+
b =
65+
rank[i](Generated::HeredocBody b0 |
66+
f = b0.getLocation().getFile()
67+
|
68+
b0 order by b0.getLocation().getStartLine(), b0.getLocation().getStartColumn()
69+
)
70+
}
71+
72+
Generated::HeredocBody getHereDocBody(Generated::HeredocBeginning g) {
73+
exists(int i, File f |
74+
g =
75+
rank[i](Generated::HeredocBeginning b |
76+
f = b.getLocation().getFile()
77+
|
78+
b order by b.getLocation().getStartLine(), b.getLocation().getStartColumn()
79+
) and
80+
rankHeredocBody(f, result, i)
81+
)
82+
}
83+
6284
private Generated::AstNode parentOf(Generated::AstNode n) {
85+
n = getHereDocBody(result)
86+
or
6387
exists(Generated::AstNode parent | parent = n.getParent() |
6488
if
6589
n =

ql/test/library-tests/controlflow/graph/Cfg.expected

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1295,26 +1295,20 @@ cfg.rb:
12951295
#-----| -> call to puts
12961296

12971297
# 108| <<SQL
1298-
#-----| -> self
1298+
#-----| -> table
12991299

13001300
# 109| #{...}
1301-
#-----| -> self
1301+
#-----| -> type
13021302

1303-
# 109| call to table
1303+
# 109| table
13041304
#-----| -> #{...}
13051305

1306-
# 109| self
1307-
#-----| -> call to table
1308-
13091306
# 110| #{...}
13101307
#-----| -> ( ... )
13111308

1312-
# 110| call to type
1309+
# 110| type
13131310
#-----| -> #{...}
13141311

1315-
# 110| self
1316-
#-----| -> call to type
1317-
13181312
# 113| ... if ...
13191313
#-----| -> @field
13201314

ql/test/library-tests/variables/ssa.expected

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ definition
4848
| scopes.rb:13:4:13:32 | ... = ... | scopes.rb:13:11:13:11 | c |
4949
| scopes.rb:13:4:13:32 | ... = ... | scopes.rb:13:14:13:14 | d |
5050
| scopes.rb:27:1:27:5 | ... = ... | scopes.rb:27:1:27:1 | x |
51+
| scopes.rb:42:2:42:9 | ... = ... | scopes.rb:42:2:42:4 | var |
52+
| scopes.rb:46:5:46:13 | ... = ... | scopes.rb:46:5:46:8 | var2 |
5153
| ssa.rb:1:7:1:7 | b | ssa.rb:1:7:1:7 | b |
5254
| ssa.rb:2:3:2:7 | ... = ... | ssa.rb:2:3:2:3 | i |
5355
| ssa.rb:5:3:13:5 | phi | ssa.rb:2:3:2:3 | i |
@@ -135,6 +137,8 @@ read
135137
| scopes.rb:27:1:27:5 | ... = ... | scopes.rb:27:1:27:1 | x | scopes.rb:34:7:34:7 | x |
136138
| scopes.rb:27:1:27:5 | ... = ... | scopes.rb:27:1:27:1 | x | scopes.rb:34:14:34:14 | x |
137139
| scopes.rb:27:1:27:5 | ... = ... | scopes.rb:27:1:27:1 | x | scopes.rb:37:5:37:5 | x |
140+
| scopes.rb:42:2:42:9 | ... = ... | scopes.rb:42:2:42:4 | var | scopes.rb:44:5:44:7 | var |
141+
| scopes.rb:46:5:46:13 | ... = ... | scopes.rb:46:5:46:8 | var2 | scopes.rb:47:5:47:8 | var2 |
138142
| ssa.rb:1:7:1:7 | b | ssa.rb:1:7:1:7 | b | ssa.rb:5:6:5:6 | b |
139143
| ssa.rb:2:3:2:7 | ... = ... | ssa.rb:2:3:2:3 | i | ssa.rb:3:8:3:8 | i |
140144
| ssa.rb:2:3:2:7 | ... = ... | ssa.rb:2:3:2:3 | i | ssa.rb:4:8:4:8 | i |
@@ -210,6 +214,8 @@ firstRead
210214
| scopes.rb:13:4:13:32 | ... = ... | scopes.rb:13:11:13:11 | c | scopes.rb:16:9:16:9 | c |
211215
| scopes.rb:13:4:13:32 | ... = ... | scopes.rb:13:14:13:14 | d | scopes.rb:17:9:17:9 | d |
212216
| scopes.rb:27:1:27:5 | ... = ... | scopes.rb:27:1:27:1 | x | scopes.rb:28:8:28:8 | x |
217+
| scopes.rb:42:2:42:9 | ... = ... | scopes.rb:42:2:42:4 | var | scopes.rb:44:5:44:7 | var |
218+
| scopes.rb:46:5:46:13 | ... = ... | scopes.rb:46:5:46:8 | var2 | scopes.rb:47:5:47:8 | var2 |
213219
| ssa.rb:1:7:1:7 | b | ssa.rb:1:7:1:7 | b | ssa.rb:5:6:5:6 | b |
214220
| ssa.rb:2:3:2:7 | ... = ... | ssa.rb:2:3:2:3 | i | ssa.rb:3:8:3:8 | i |
215221
| ssa.rb:5:3:13:5 | phi | ssa.rb:2:3:2:3 | i | ssa.rb:15:8:15:8 | i |
@@ -279,6 +285,8 @@ lastRead
279285
| scopes.rb:13:4:13:32 | ... = ... | scopes.rb:13:11:13:11 | c | scopes.rb:16:9:16:9 | c |
280286
| scopes.rb:13:4:13:32 | ... = ... | scopes.rb:13:14:13:14 | d | scopes.rb:17:9:17:9 | d |
281287
| scopes.rb:27:1:27:5 | ... = ... | scopes.rb:27:1:27:1 | x | scopes.rb:37:5:37:5 | x |
288+
| scopes.rb:42:2:42:9 | ... = ... | scopes.rb:42:2:42:4 | var | scopes.rb:44:5:44:7 | var |
289+
| scopes.rb:46:5:46:13 | ... = ... | scopes.rb:46:5:46:8 | var2 | scopes.rb:47:5:47:8 | var2 |
282290
| ssa.rb:1:7:1:7 | b | ssa.rb:1:7:1:7 | b | ssa.rb:5:6:5:6 | b |
283291
| ssa.rb:2:3:2:7 | ... = ... | ssa.rb:2:3:2:3 | i | ssa.rb:4:8:4:8 | i |
284292
| ssa.rb:5:3:13:5 | phi | ssa.rb:2:3:2:3 | i | ssa.rb:15:8:15:8 | i |

ql/test/library-tests/variables/varaccess.expected

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,9 @@ variableAccess
126126
| scopes.rb:38:3:38:3 | x | scopes.rb:38:3:38:3 | x | scopes.rb:37:1:39:3 | foo |
127127
| scopes.rb:42:2:42:4 | var | scopes.rb:42:2:42:4 | var | scopes.rb:41:1:49:3 | M |
128128
| scopes.rb:43:2:43:4 | foo | scopes.rb:43:2:43:4 | foo | scopes.rb:41:1:49:3 | M |
129+
| scopes.rb:44:5:44:7 | var | scopes.rb:42:2:42:4 | var | scopes.rb:41:1:49:3 | M |
130+
| scopes.rb:46:5:46:8 | var2 | scopes.rb:46:5:46:8 | var2 | scopes.rb:41:1:49:3 | M |
131+
| scopes.rb:47:5:47:8 | var2 | scopes.rb:46:5:46:8 | var2 | scopes.rb:41:1:49:3 | M |
129132
| ssa.rb:1:7:1:7 | b | ssa.rb:1:7:1:7 | b | ssa.rb:1:1:16:3 | m |
130133
| ssa.rb:2:3:2:3 | i | ssa.rb:2:3:2:3 | i | ssa.rb:1:1:16:3 | m |
131134
| ssa.rb:3:8:3:8 | i | ssa.rb:2:3:2:3 | i | ssa.rb:1:1:16:3 | m |
@@ -225,6 +228,7 @@ explicitWrite
225228
| scopes.rb:38:3:38:3 | x | scopes.rb:38:3:38:7 | ... = ... |
226229
| scopes.rb:42:2:42:4 | var | scopes.rb:42:2:42:9 | ... = ... |
227230
| scopes.rb:43:2:43:4 | foo | scopes.rb:43:2:43:13 | ... = ... |
231+
| scopes.rb:46:5:46:8 | var2 | scopes.rb:46:5:46:13 | ... = ... |
228232
| ssa.rb:2:3:2:3 | i | ssa.rb:2:3:2:7 | ... = ... |
229233
| ssa.rb:6:5:6:5 | i | ssa.rb:6:5:6:9 | ... = ... |
230234
| ssa.rb:10:5:10:5 | i | ssa.rb:10:5:10:9 | ... = ... |
@@ -340,6 +344,8 @@ readAccess
340344
| scopes.rb:34:7:34:7 | x |
341345
| scopes.rb:34:14:34:14 | x |
342346
| scopes.rb:37:5:37:5 | x |
347+
| scopes.rb:44:5:44:7 | var |
348+
| scopes.rb:47:5:47:8 | var2 |
343349
| ssa.rb:3:8:3:8 | i |
344350
| ssa.rb:4:8:4:8 | i |
345351
| ssa.rb:5:6:5:6 | b |

ql/test/library-tests/variables/variable.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
| scopes.rb:38:3:38:3 | x |
6666
| scopes.rb:42:2:42:4 | var |
6767
| scopes.rb:43:2:43:4 | foo |
68+
| scopes.rb:46:5:46:8 | var2 |
6869
| ssa.rb:1:7:1:7 | b |
6970
| ssa.rb:2:3:2:3 | i |
7071
| ssa.rb:18:8:18:8 | x |

0 commit comments

Comments
 (0)