Skip to content

Commit db4b781

Browse files
committed
Ruby: CFG: make RescueModifier post-order
1 parent cff63fa commit db4b781

File tree

2 files changed

+16
-17
lines changed

2 files changed

+16
-17
lines changed

ruby/ql/lib/codeql/ruby/controlflow/internal/ControlFlowGraphImpl.qll

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1150,24 +1150,23 @@ module Trees {
11501150

11511151
private class RedoStmtTree extends LeafTree, RedoStmt { }
11521152

1153-
private class RescueModifierTree extends PreOrderTree, RescueModifierExpr {
1153+
private class RescueModifierTree extends PostOrderTree, RescueModifierExpr {
11541154
final override predicate propagatesAbnormal(AstNode child) { child = this.getHandler() }
11551155

1156-
final override predicate last(AstNode last, Completion c) {
1157-
last(this.getBody(), last, c) and
1158-
not c instanceof RaiseCompletion
1159-
or
1160-
last(this.getHandler(), last, c)
1161-
}
1156+
final override predicate first(AstNode first) { first(this.getBody(), first) }
11621157

11631158
final override predicate succ(AstNode pred, AstNode succ, Completion c) {
1164-
pred = this and
1165-
first(this.getBody(), succ) and
1166-
c instanceof SimpleCompletion
1167-
or
11681159
last(this.getBody(), pred, c) and
1169-
c instanceof RaiseCompletion and
1170-
first(this.getHandler(), succ)
1160+
(
1161+
c instanceof RaiseCompletion and
1162+
first(this.getHandler(), succ)
1163+
or
1164+
not c instanceof RaiseCompletion and
1165+
succ = this
1166+
)
1167+
or
1168+
last(this.getHandler(), pred, c) and
1169+
succ = this
11711170
}
11721171
}
11731172

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2644,23 +2644,23 @@ cfg.rb:
26442644
#-----| -> EmptyModule
26452645

26462646
# 134| EmptyModule
2647-
#-----| -> ... rescue ...
2647+
#-----| -> 1
26482648

26492649
# 136| ... / ...
2650+
#-----| -> ... rescue ...
26502651
#-----| raise -> self
2651-
#-----| -> __synth__0
26522652

26532653
# 136| 1
26542654
#-----| -> 0
26552655

26562656
# 136| ... rescue ...
2657-
#-----| -> 1
2657+
#-----| -> __synth__0
26582658

26592659
# 136| 0
26602660
#-----| -> ... / ...
26612661

26622662
# 136| call to puts
2663-
#-----| -> __synth__0
2663+
#-----| -> ... rescue ...
26642664

26652665
# 136| self
26662666
#-----| -> "div by zero"

0 commit comments

Comments
 (0)