From b693ef51e2e744a76acf916f6496fbb797f430cf Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 23 Jan 2020 13:07:49 +0000 Subject: [PATCH] C++: Put a little bit of content in the StackVariableReachability test. --- ...iableReachabilityWithReassignment.expected | 13 ++++++++++ ...ackVariableReachabilityWithReassignment.ql | 21 ++++++++++++++++ .../stackVariableReachability.c | 25 +++++++++++++++++++ .../stackVariableReachability.expected | 14 ++++++++++- .../stackVariableReachability.ql | 19 +++++++++++++- 5 files changed, 90 insertions(+), 2 deletions(-) create mode 100644 cpp/ql/test/library-tests/stack_variable_reachability/StackVariableReachabilityWithReassignment.expected create mode 100644 cpp/ql/test/library-tests/stack_variable_reachability/StackVariableReachabilityWithReassignment.ql diff --git a/cpp/ql/test/library-tests/stack_variable_reachability/StackVariableReachabilityWithReassignment.expected b/cpp/ql/test/library-tests/stack_variable_reachability/StackVariableReachabilityWithReassignment.expected new file mode 100644 index 00000000000..0ef41de2cb3 --- /dev/null +++ b/cpp/ql/test/library-tests/stack_variable_reachability/StackVariableReachabilityWithReassignment.expected @@ -0,0 +1,13 @@ +| stackVariableReachability.c:11:2:11:2 | a | ... + ... | +| stackVariableReachability.c:11:6:11:6 | a | 10 | +| stackVariableReachability.c:12:2:12:2 | a | 40 | +| stackVariableReachability.c:13:2:13:2 | a | 40 | +| stackVariableReachability.c:14:4:14:4 | a | 40 | +| stackVariableReachability.c:15:2:15:2 | a | call to f | +| stackVariableReachability.c:15:8:15:8 | a | 40 | +| stackVariableReachability.c:16:2:16:2 | a | call to f | +| stackVariableReachability.c:19:3:19:3 | b | 50 | +| stackVariableReachability.c:21:3:21:3 | b | 60 | +| stackVariableReachability.c:23:2:23:2 | c | b | +| stackVariableReachability.c:23:6:23:6 | b | 50, 60 | +| stackVariableReachability.c:24:2:24:2 | c | 50, 60, b | diff --git a/cpp/ql/test/library-tests/stack_variable_reachability/StackVariableReachabilityWithReassignment.ql b/cpp/ql/test/library-tests/stack_variable_reachability/StackVariableReachabilityWithReassignment.ql new file mode 100644 index 00000000000..3818e90ef67 --- /dev/null +++ b/cpp/ql/test/library-tests/stack_variable_reachability/StackVariableReachabilityWithReassignment.ql @@ -0,0 +1,21 @@ +import cpp +import semmle.code.cpp.controlflow.StackVariableReachability + +class MyStackVariableReachability extends StackVariableReachabilityWithReassignment { + MyStackVariableReachability() { this = "MyStackVariableReachability" } + + override predicate isSourceActual(ControlFlowNode node, StackVariable v) { + exprDefinition(v, _, node) + } + + override predicate isSinkActual(ControlFlowNode node, StackVariable v) { + node.(VariableAccess).getTarget() = v + } + + override predicate isBarrier(ControlFlowNode node, StackVariable v) { + exprDefinition(v, _, node) + } +} + +from MyStackVariableReachability svr, ControlFlowNode sink +select sink, strictconcat(Expr source | svr.reaches(source, _, sink) | source.toString(), ", ") diff --git a/cpp/ql/test/library-tests/stack_variable_reachability/stackVariableReachability.c b/cpp/ql/test/library-tests/stack_variable_reachability/stackVariableReachability.c index e69de29bb2d..c00a2ccc06e 100644 --- a/cpp/ql/test/library-tests/stack_variable_reachability/stackVariableReachability.c +++ b/cpp/ql/test/library-tests/stack_variable_reachability/stackVariableReachability.c @@ -0,0 +1,25 @@ + +int cond(); +int f(int x); + +void test(int p) +{ + int a = 10; + int b = 20; + int c = 30; + + a = a + 1; + a = 40; + a++; + ++a; + a = f(a); + a; + + if (cond()) { + b = 50; + } else { + b = 60; + } + c = b; + c; +} diff --git a/cpp/ql/test/library-tests/stack_variable_reachability/stackVariableReachability.expected b/cpp/ql/test/library-tests/stack_variable_reachability/stackVariableReachability.expected index 12f63b493a6..cc7a004b629 100644 --- a/cpp/ql/test/library-tests/stack_variable_reachability/stackVariableReachability.expected +++ b/cpp/ql/test/library-tests/stack_variable_reachability/stackVariableReachability.expected @@ -1 +1,13 @@ -| Test for deprecated library StackVariableReachability. | +| stackVariableReachability.c:11:2:11:2 | a | ... + ... | +| stackVariableReachability.c:11:6:11:6 | a | 10 | +| stackVariableReachability.c:12:2:12:2 | a | 40 | +| stackVariableReachability.c:13:2:13:2 | a | 40 | +| stackVariableReachability.c:14:4:14:4 | a | 40 | +| stackVariableReachability.c:15:2:15:2 | a | call to f | +| stackVariableReachability.c:15:8:15:8 | a | 40 | +| stackVariableReachability.c:16:2:16:2 | a | call to f | +| stackVariableReachability.c:19:3:19:3 | b | 50 | +| stackVariableReachability.c:21:3:21:3 | b | 60 | +| stackVariableReachability.c:23:2:23:2 | c | b | +| stackVariableReachability.c:23:6:23:6 | b | 50, 60 | +| stackVariableReachability.c:24:2:24:2 | c | b | diff --git a/cpp/ql/test/library-tests/stack_variable_reachability/stackVariableReachability.ql b/cpp/ql/test/library-tests/stack_variable_reachability/stackVariableReachability.ql index 63691e7c3ed..02edb7b4a69 100644 --- a/cpp/ql/test/library-tests/stack_variable_reachability/stackVariableReachability.ql +++ b/cpp/ql/test/library-tests/stack_variable_reachability/stackVariableReachability.ql @@ -1,4 +1,21 @@ import cpp import semmle.code.cpp.controlflow.StackVariableReachability -select "Test for deprecated library StackVariableReachability." +class MyStackVariableReachability extends StackVariableReachability { + MyStackVariableReachability() { this = "MyStackVariableReachability" } + + override predicate isSource(ControlFlowNode node, StackVariable v) { + exprDefinition(v, _, node) + } + + override predicate isSink(ControlFlowNode node, StackVariable v) { + node.(VariableAccess).getTarget() = v + } + + override predicate isBarrier(ControlFlowNode node, StackVariable v) { + exprDefinition(v, _, node) + } +} + +from MyStackVariableReachability svr, ControlFlowNode sink +select sink, strictconcat(Expr source | svr.reaches(source, _, sink) | source.toString(), ", ")