From 94556078f150aa03deb90076d20dc23faf24ea31 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Thu, 28 Sep 2023 14:21:04 +0200 Subject: [PATCH] Java: Add guards logic for SwitchExpr default cases. --- .../lib/semmle/code/java/controlflow/internal/GuardsLogic.qll | 2 ++ java/ql/test/library-tests/guards12/guard.expected | 2 ++ 2 files changed, 4 insertions(+) diff --git a/java/ql/lib/semmle/code/java/controlflow/internal/GuardsLogic.qll b/java/ql/lib/semmle/code/java/controlflow/internal/GuardsLogic.qll index e666143c8d3..bc49f1d3a77 100644 --- a/java/ql/lib/semmle/code/java/controlflow/internal/GuardsLogic.qll +++ b/java/ql/lib/semmle/code/java/controlflow/internal/GuardsLogic.qll @@ -57,6 +57,8 @@ predicate implies_v1(Guard g1, boolean b1, Guard g2, boolean b2) { or g1.(DefaultCase).getSwitch().getAConstCase() = g2 and b1 = true and b2 = false or + g1.(DefaultCase).getSwitchExpr().getAConstCase() = g2 and b1 = true and b2 = false + or exists(MethodAccess check, int argIndex | check = g1 | conditionCheckArgument(check, argIndex, _) and g2 = check.getArgument(argIndex) and diff --git a/java/ql/test/library-tests/guards12/guard.expected b/java/ql/test/library-tests/guards12/guard.expected index c0ee0fd5f3e..71d1818f29c 100644 --- a/java/ql/test/library-tests/guards12/guard.expected +++ b/java/ql/test/library-tests/guards12/guard.expected @@ -1,4 +1,6 @@ +| Test.java:5:7:5:17 | case ... | Test.java:3:20:3:20 | s | Test.java:5:12:5:14 | "c" | true | false | Test.java:7:7:7:16 | default | | Test.java:5:7:5:17 | case ... | Test.java:3:20:3:20 | s | Test.java:5:12:5:14 | "c" | true | true | Test.java:5:7:5:17 | case ... | +| Test.java:6:7:6:17 | case ... | Test.java:3:20:3:20 | s | Test.java:6:12:6:14 | "d" | true | false | Test.java:7:7:7:16 | default | | Test.java:6:7:6:17 | case ... | Test.java:3:20:3:20 | s | Test.java:6:12:6:14 | "d" | true | true | Test.java:6:7:6:17 | case ... | | Test.java:11:7:11:17 | case ... | Test.java:9:13:9:13 | s | Test.java:11:12:11:14 | "c" | true | false | Test.java:13:7:13:16 | default | | Test.java:11:7:11:17 | case ... | Test.java:9:13:9:13 | s | Test.java:11:12:11:14 | "c" | true | true | Test.java:11:7:11:17 | case ... |