From 6019a38266a9b3e6ce01bc932b0996c4e916ff65 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 13 Mar 2024 15:54:15 +0000 Subject: [PATCH] C++: Add more test cases for indirection (4). --- .../models-as-data/FlowSummaryNode.expected | 38 +++++++++---------- .../dataflow/models-as-data/testModels.qll | 2 + .../dataflow/models-as-data/tests.cpp | 9 +++++ 3 files changed, 30 insertions(+), 19 deletions(-) diff --git a/cpp/ql/test/library-tests/dataflow/models-as-data/FlowSummaryNode.expected b/cpp/ql/test/library-tests/dataflow/models-as-data/FlowSummaryNode.expected index 46eda45233d..e41a8f8d83d 100644 --- a/cpp/ql/test/library-tests/dataflow/models-as-data/FlowSummaryNode.expected +++ b/cpp/ql/test/library-tests/dataflow/models-as-data/FlowSummaryNode.expected @@ -2,22 +2,22 @@ | tests.cpp:126:5:126:19 | [summary] to write: ReturnValue in madArg0ToReturn | ReturnNode | madArg0ToReturn | madArg0ToReturn | | tests.cpp:129:5:129:28 | [summary param] 0 in madArg0ToReturnValueFlow | ParameterNode | madArg0ToReturnValueFlow | madArg0ToReturnValueFlow | | tests.cpp:129:5:129:28 | [summary] to write: ReturnValue in madArg0ToReturnValueFlow | ReturnNode | madArg0ToReturnValueFlow | madArg0ToReturnValueFlow | -| tests.cpp:209:7:209:19 | [summary param] 0 in madArg0ToSelf | ParameterNode | madArg0ToSelf | madArg0ToSelf | -| tests.cpp:209:7:209:19 | [summary param] this indirection in madArg0ToSelf | ParameterNode | madArg0ToSelf | madArg0ToSelf | -| tests.cpp:209:7:209:19 | [summary] to write: Argument[this indirection] in madArg0ToSelf | PostUpdateNode | madArg0ToSelf | madArg0ToSelf | -| tests.cpp:210:6:210:20 | [summary param] this indirection in madSelfToReturn | ParameterNode | madSelfToReturn | madSelfToReturn | -| tests.cpp:210:6:210:20 | [summary] to write: ReturnValue in madSelfToReturn | ReturnNode | madSelfToReturn | madSelfToReturn | -| tests.cpp:238:7:238:30 | [summary param] this indirection in namespaceMadSelfToReturn | ParameterNode | namespaceMadSelfToReturn | namespaceMadSelfToReturn | -| tests.cpp:238:7:238:30 | [summary] to write: ReturnValue in namespaceMadSelfToReturn | ReturnNode | namespaceMadSelfToReturn | namespaceMadSelfToReturn | -| tests.cpp:349:5:349:29 | [summary param] 0 in madCallArg0ReturnToReturn | ParameterNode | madCallArg0ReturnToReturn | madCallArg0ReturnToReturn | -| tests.cpp:349:5:349:29 | [summary] read: Argument[0].Parameter[this] in madCallArg0ReturnToReturn | PostUpdateNode | madCallArg0ReturnToReturn | madCallArg0ReturnToReturn | -| tests.cpp:349:5:349:29 | [summary] read: Argument[0].ReturnValue in madCallArg0ReturnToReturn | OutNode | madCallArg0ReturnToReturn | madCallArg0ReturnToReturn | -| tests.cpp:349:5:349:29 | [summary] to write: Argument[0].Parameter[this] in madCallArg0ReturnToReturn | ArgumentNode | madCallArg0ReturnToReturn | madCallArg0ReturnToReturn | -| tests.cpp:349:5:349:29 | [summary] to write: ReturnValue in madCallArg0ReturnToReturn | ReturnNode | madCallArg0ReturnToReturn | madCallArg0ReturnToReturn | -| tests.cpp:351:6:351:25 | [summary param] 0 in madCallArg0WithValue | ParameterNode | madCallArg0WithValue | madCallArg0WithValue | -| tests.cpp:351:6:351:25 | [summary param] 1 in madCallArg0WithValue | ParameterNode | madCallArg0WithValue | madCallArg0WithValue | -| tests.cpp:351:6:351:25 | [summary] read: Argument[0].Parameter[0] in madCallArg0WithValue | PostUpdateNode | madCallArg0WithValue | madCallArg0WithValue | -| tests.cpp:351:6:351:25 | [summary] read: Argument[0].Parameter[this] in madCallArg0WithValue | PostUpdateNode | madCallArg0WithValue | madCallArg0WithValue | -| tests.cpp:351:6:351:25 | [summary] to write: Argument[0].Parameter[0] in madCallArg0WithValue | ArgumentNode | madCallArg0WithValue | madCallArg0WithValue | -| tests.cpp:351:6:351:25 | [summary] to write: Argument[0].Parameter[this] in madCallArg0WithValue | ArgumentNode | madCallArg0WithValue | madCallArg0WithValue | -| tests.cpp:351:6:351:25 | [summary] to write: Argument[1] in madCallArg0WithValue | PostUpdateNode | madCallArg0WithValue | madCallArg0WithValue | +| tests.cpp:218:7:218:19 | [summary param] 0 in madArg0ToSelf | ParameterNode | madArg0ToSelf | madArg0ToSelf | +| tests.cpp:218:7:218:19 | [summary param] this indirection in madArg0ToSelf | ParameterNode | madArg0ToSelf | madArg0ToSelf | +| tests.cpp:218:7:218:19 | [summary] to write: Argument[this indirection] in madArg0ToSelf | PostUpdateNode | madArg0ToSelf | madArg0ToSelf | +| tests.cpp:219:6:219:20 | [summary param] this indirection in madSelfToReturn | ParameterNode | madSelfToReturn | madSelfToReturn | +| tests.cpp:219:6:219:20 | [summary] to write: ReturnValue in madSelfToReturn | ReturnNode | madSelfToReturn | madSelfToReturn | +| tests.cpp:247:7:247:30 | [summary param] this indirection in namespaceMadSelfToReturn | ParameterNode | namespaceMadSelfToReturn | namespaceMadSelfToReturn | +| tests.cpp:247:7:247:30 | [summary] to write: ReturnValue in namespaceMadSelfToReturn | ReturnNode | namespaceMadSelfToReturn | namespaceMadSelfToReturn | +| tests.cpp:358:5:358:29 | [summary param] 0 in madCallArg0ReturnToReturn | ParameterNode | madCallArg0ReturnToReturn | madCallArg0ReturnToReturn | +| tests.cpp:358:5:358:29 | [summary] read: Argument[0].Parameter[this] in madCallArg0ReturnToReturn | PostUpdateNode | madCallArg0ReturnToReturn | madCallArg0ReturnToReturn | +| tests.cpp:358:5:358:29 | [summary] read: Argument[0].ReturnValue in madCallArg0ReturnToReturn | OutNode | madCallArg0ReturnToReturn | madCallArg0ReturnToReturn | +| tests.cpp:358:5:358:29 | [summary] to write: Argument[0].Parameter[this] in madCallArg0ReturnToReturn | ArgumentNode | madCallArg0ReturnToReturn | madCallArg0ReturnToReturn | +| tests.cpp:358:5:358:29 | [summary] to write: ReturnValue in madCallArg0ReturnToReturn | ReturnNode | madCallArg0ReturnToReturn | madCallArg0ReturnToReturn | +| tests.cpp:360:6:360:25 | [summary param] 0 in madCallArg0WithValue | ParameterNode | madCallArg0WithValue | madCallArg0WithValue | +| tests.cpp:360:6:360:25 | [summary param] 1 in madCallArg0WithValue | ParameterNode | madCallArg0WithValue | madCallArg0WithValue | +| tests.cpp:360:6:360:25 | [summary] read: Argument[0].Parameter[0] in madCallArg0WithValue | PostUpdateNode | madCallArg0WithValue | madCallArg0WithValue | +| tests.cpp:360:6:360:25 | [summary] read: Argument[0].Parameter[this] in madCallArg0WithValue | PostUpdateNode | madCallArg0WithValue | madCallArg0WithValue | +| tests.cpp:360:6:360:25 | [summary] to write: Argument[0].Parameter[0] in madCallArg0WithValue | ArgumentNode | madCallArg0WithValue | madCallArg0WithValue | +| tests.cpp:360:6:360:25 | [summary] to write: Argument[0].Parameter[this] in madCallArg0WithValue | ArgumentNode | madCallArg0WithValue | madCallArg0WithValue | +| tests.cpp:360:6:360:25 | [summary] to write: Argument[1] in madCallArg0WithValue | PostUpdateNode | madCallArg0WithValue | madCallArg0WithValue | diff --git a/cpp/ql/test/library-tests/dataflow/models-as-data/testModels.qll b/cpp/ql/test/library-tests/dataflow/models-as-data/testModels.qll index 50a61fecc2f..848fee10030 100644 --- a/cpp/ql/test/library-tests/dataflow/models-as-data/testModels.qll +++ b/cpp/ql/test/library-tests/dataflow/models-as-data/testModels.qll @@ -78,6 +78,8 @@ private class TestSummaries extends SummaryModelCsv { ";;false;madArg0IndirectFieldToReturn;;;*Argument[0].value;ReturnValue;taint", ";;false;madArg0FieldIndirectToReturn;;;Argument[0].*value;ReturnValue;taint", ";;false;madArg0ToReturnField;;;Argument[0];ReturnValue.value;taint", + ";;false;madArg0ToReturnIndirectField;;;Argument[0];*ReturnValue.value;taint", + ";;false;madArg0ToReturnFieldIndirect;;;Argument[0];ReturnValue.*ptr;taint", ";MyClass;true;madArg0ToSelf;;;Argument[0];Argument[-1];taint", ";MyClass;true;madSelfToReturn;;;Argument[-1];ReturnValue;taint", ";MyClass;true;madArg0ToField;;;Argument[0];Argument[-1].val;taint", diff --git a/cpp/ql/test/library-tests/dataflow/models-as-data/tests.cpp b/cpp/ql/test/library-tests/dataflow/models-as-data/tests.cpp index 5888b22e848..2b364d27ff7 100644 --- a/cpp/ql/test/library-tests/dataflow/models-as-data/tests.cpp +++ b/cpp/ql/test/library-tests/dataflow/models-as-data/tests.cpp @@ -136,6 +136,8 @@ int madArg0FieldToReturn(MyContainer mc); // $ interpretElement int madArg0IndirectFieldToReturn(MyContainer *mc); // $ interpretElement int madArg0FieldIndirectToReturn(MyContainer mc); // $ interpretElement MyContainer madArg0ToReturnField(int x); // $ interpretElement +MyContainer *madArg0ToReturnIndirectField(int x); // $ interpretElement +MyContainer madArg0ToReturnFieldIndirect(int x); // $ interpretElement void test_summaries() { // test summaries @@ -182,6 +184,13 @@ void test_summaries() { sink(madArg0ToReturnField(0).value); sink(madArg0ToReturnField(source()).value); // $ MISSING: ir + MyContainer *rtn1 = madArg0ToReturnIndirectField(source()); + sink(rtn1->value); // $ MISSING: ir + + MyContainer rtn2 = madArg0ToReturnFieldIndirect(source()); + int *rtn2_ptr = rtn2.ptr; + sink(*rtn2_ptr); // $ MISSING: ir + // test source + sinks + summaries together madSinkArg0(madArg0ToReturn(remoteMadSource())); // $ ir