From 97fab0d18b5fe81a626371501d811e4f5824efa8 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Thu, 26 Nov 2020 16:40:14 +0100 Subject: [PATCH] Assignments evaluate right-hand-side first --- .../controlflow/internal/ControlFlowGraphImpl.qll | 4 ++-- ql/test/library-tests/controlflow/graph/Cfg.expected | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/ql/src/codeql_ruby/controlflow/internal/ControlFlowGraphImpl.qll b/ql/src/codeql_ruby/controlflow/internal/ControlFlowGraphImpl.qll index 3e61e4c06ef..eeca3675c03 100644 --- a/ql/src/codeql_ruby/controlflow/internal/ControlFlowGraphImpl.qll +++ b/ql/src/codeql_ruby/controlflow/internal/ControlFlowGraphImpl.qll @@ -240,9 +240,9 @@ private module Trees { private class AssignmentTree extends StandardPostOrderTree, Assignment { final override AstNode getChildNode(int i) { - result = this.getLeft() and i = 0 + result = this.getRight() and i = 0 or - result = this.getRight() and i = 1 + result = this.getLeft() and i = 1 } } diff --git a/ql/test/library-tests/controlflow/graph/Cfg.expected b/ql/test/library-tests/controlflow/graph/Cfg.expected index 5bb2e3b2a6f..fb904928151 100644 --- a/ql/test/library-tests/controlflow/graph/Cfg.expected +++ b/ql/test/library-tests/controlflow/graph/Cfg.expected @@ -249,22 +249,22 @@ edges | ifs.rb:18:1:26:3 | exit m3 (normal) | ifs.rb:18:1:26:3 | exit m3 | semmle.label | successor | | ifs.rb:19:3:24:5 | If | ifs.rb:19:6:19:6 | x | semmle.label | successor | | ifs.rb:19:6:19:6 | x | ifs.rb:19:10:19:10 | 0 | semmle.label | successor | -| ifs.rb:19:6:19:10 | Binary | ifs.rb:20:5:20:5 | x | semmle.label | true | +| ifs.rb:19:6:19:10 | Binary | ifs.rb:20:10:20:10 | x | semmle.label | true | | ifs.rb:19:6:19:10 | Binary | ifs.rb:25:8:25:8 | x | semmle.label | false | | ifs.rb:19:10:19:10 | 0 | ifs.rb:19:6:19:10 | Binary | semmle.label | successor | -| ifs.rb:20:5:20:5 | x | ifs.rb:20:10:20:10 | x | semmle.label | successor | +| ifs.rb:20:5:20:5 | x | ifs.rb:20:5:20:10 | Assignment | semmle.label | successor | | ifs.rb:20:5:20:10 | Assignment | ifs.rb:21:5:23:7 | If | semmle.label | successor | -| ifs.rb:20:9:20:10 | Unary | ifs.rb:20:5:20:10 | Assignment | semmle.label | successor | +| ifs.rb:20:9:20:10 | Unary | ifs.rb:20:5:20:5 | x | semmle.label | successor | | ifs.rb:20:10:20:10 | x | ifs.rb:20:9:20:10 | Unary | semmle.label | successor | | ifs.rb:21:5:23:7 | If | ifs.rb:21:8:21:8 | x | semmle.label | successor | | ifs.rb:21:8:21:8 | x | ifs.rb:21:12:21:13 | 10 | semmle.label | successor | -| ifs.rb:21:8:21:13 | Binary | ifs.rb:22:7:22:7 | x | semmle.label | true | +| ifs.rb:21:8:21:13 | Binary | ifs.rb:22:11:22:11 | x | semmle.label | true | | ifs.rb:21:8:21:13 | Binary | ifs.rb:25:8:25:8 | x | semmle.label | false | | ifs.rb:21:12:21:13 | 10 | ifs.rb:21:8:21:13 | Binary | semmle.label | successor | -| ifs.rb:22:7:22:7 | x | ifs.rb:22:11:22:11 | x | semmle.label | successor | +| ifs.rb:22:7:22:7 | x | ifs.rb:22:7:22:15 | Assignment | semmle.label | successor | | ifs.rb:22:7:22:15 | Assignment | ifs.rb:25:8:25:8 | x | semmle.label | successor | | ifs.rb:22:11:22:11 | x | ifs.rb:22:15:22:15 | 1 | semmle.label | successor | -| ifs.rb:22:11:22:15 | Binary | ifs.rb:22:7:22:15 | Assignment | semmle.label | successor | +| ifs.rb:22:11:22:15 | Binary | ifs.rb:22:7:22:7 | x | semmle.label | successor | | ifs.rb:22:15:22:15 | 1 | ifs.rb:22:11:22:15 | Binary | semmle.label | successor | | ifs.rb:25:3:25:6 | puts | ifs.rb:25:3:25:8 | MethodCall | semmle.label | successor | | ifs.rb:25:3:25:8 | MethodCall | ifs.rb:18:1:26:3 | exit m3 (normal) | semmle.label | successor |