From 22d5e9bbfbaf5037eb1e79379d2b8208ee1cf592 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 12 Mar 2024 17:33:40 +0000 Subject: [PATCH] C++: Add test cases involving pointer qualifiers. --- .../models-as-data/FlowSummaryNode.expected | 24 ++++++------- .../dataflow/models-as-data/tests.cpp | 36 ++++++++++++++----- 2 files changed, 40 insertions(+), 20 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 e9d37f754d3..fb1a2ff92df 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 @@ -12,15 +12,15 @@ | tests.cpp:181:6:181:20 | [summary] to write: ReturnValue in madSelfToReturn | ReturnNode | madSelfToReturn | madSelfToReturn | | tests.cpp:209:7:209:30 | [summary param] this in namespaceMadSelfToReturn | ParameterNode | namespaceMadSelfToReturn | namespaceMadSelfToReturn | | tests.cpp:209:7:209:30 | [summary] to write: ReturnValue in namespaceMadSelfToReturn | ReturnNode | namespaceMadSelfToReturn | namespaceMadSelfToReturn | -| tests.cpp:285:5:285:29 | [summary param] 0 in madCallArg0ReturnToReturn | ParameterNode | madCallArg0ReturnToReturn | madCallArg0ReturnToReturn | -| tests.cpp:285:5:285:29 | [summary] read: Argument[0].Parameter[this] in madCallArg0ReturnToReturn | PostUpdateNode | madCallArg0ReturnToReturn | madCallArg0ReturnToReturn | -| tests.cpp:285:5:285:29 | [summary] read: Argument[0].ReturnValue in madCallArg0ReturnToReturn | OutNode | madCallArg0ReturnToReturn | madCallArg0ReturnToReturn | -| tests.cpp:285:5:285:29 | [summary] to write: Argument[0].Parameter[this] in madCallArg0ReturnToReturn | ArgumentNode | madCallArg0ReturnToReturn | madCallArg0ReturnToReturn | -| tests.cpp:285:5:285:29 | [summary] to write: ReturnValue in madCallArg0ReturnToReturn | ReturnNode | madCallArg0ReturnToReturn | madCallArg0ReturnToReturn | -| tests.cpp:287:6:287:25 | [summary param] 0 in madCallArg0WithValue | ParameterNode | madCallArg0WithValue | madCallArg0WithValue | -| tests.cpp:287:6:287:25 | [summary param] 1 in madCallArg0WithValue | ParameterNode | madCallArg0WithValue | madCallArg0WithValue | -| tests.cpp:287:6:287:25 | [summary] read: Argument[0].Parameter[0] in madCallArg0WithValue | PostUpdateNode | madCallArg0WithValue | madCallArg0WithValue | -| tests.cpp:287:6:287:25 | [summary] read: Argument[0].Parameter[this] in madCallArg0WithValue | PostUpdateNode | madCallArg0WithValue | madCallArg0WithValue | -| tests.cpp:287:6:287:25 | [summary] to write: Argument[0].Parameter[0] in madCallArg0WithValue | ArgumentNode | madCallArg0WithValue | madCallArg0WithValue | -| tests.cpp:287:6:287:25 | [summary] to write: Argument[0].Parameter[this] in madCallArg0WithValue | ArgumentNode | madCallArg0WithValue | madCallArg0WithValue | -| tests.cpp:287:6:287:25 | [summary] to write: Argument[1] in madCallArg0WithValue | PostUpdateNode | madCallArg0WithValue | madCallArg0WithValue | +| tests.cpp:305:5:305:29 | [summary param] 0 in madCallArg0ReturnToReturn | ParameterNode | madCallArg0ReturnToReturn | madCallArg0ReturnToReturn | +| tests.cpp:305:5:305:29 | [summary] read: Argument[0].Parameter[this] in madCallArg0ReturnToReturn | PostUpdateNode | madCallArg0ReturnToReturn | madCallArg0ReturnToReturn | +| tests.cpp:305:5:305:29 | [summary] read: Argument[0].ReturnValue in madCallArg0ReturnToReturn | OutNode | madCallArg0ReturnToReturn | madCallArg0ReturnToReturn | +| tests.cpp:305:5:305:29 | [summary] to write: Argument[0].Parameter[this] in madCallArg0ReturnToReturn | ArgumentNode | madCallArg0ReturnToReturn | madCallArg0ReturnToReturn | +| tests.cpp:305:5:305:29 | [summary] to write: ReturnValue in madCallArg0ReturnToReturn | ReturnNode | madCallArg0ReturnToReturn | madCallArg0ReturnToReturn | +| tests.cpp:307:6:307:25 | [summary param] 0 in madCallArg0WithValue | ParameterNode | madCallArg0WithValue | madCallArg0WithValue | +| tests.cpp:307:6:307:25 | [summary param] 1 in madCallArg0WithValue | ParameterNode | madCallArg0WithValue | madCallArg0WithValue | +| tests.cpp:307:6:307:25 | [summary] read: Argument[0].Parameter[0] in madCallArg0WithValue | PostUpdateNode | madCallArg0WithValue | madCallArg0WithValue | +| tests.cpp:307:6:307:25 | [summary] read: Argument[0].Parameter[this] in madCallArg0WithValue | PostUpdateNode | madCallArg0WithValue | madCallArg0WithValue | +| tests.cpp:307:6:307:25 | [summary] to write: Argument[0].Parameter[0] in madCallArg0WithValue | ArgumentNode | madCallArg0WithValue | madCallArg0WithValue | +| tests.cpp:307:6:307:25 | [summary] to write: Argument[0].Parameter[this] in madCallArg0WithValue | ArgumentNode | madCallArg0WithValue | madCallArg0WithValue | +| tests.cpp:307:6:307:25 | [summary] to write: Argument[1] in madCallArg0WithValue | PostUpdateNode | madCallArg0WithValue | madCallArg0WithValue | 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 a2837518776..a7aff70eb3b 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 @@ -213,9 +213,11 @@ namespace MyNamespace { MyNamespace::MyClass source3(); void test_class_members() { - MyClass mc, mc2, mc3, mc4, mc5, mc6; + MyClass mc, mc2, mc3, mc4, mc5, mc6, mc7; + MyClass *ptr, *mc4_ptr; MyDerivedClass mdc; - MyNamespace::MyClass mnc; + MyNamespace::MyClass mnc, mnc2; + MyNamespace::MyClass *mnc2_ptr; // test class member sources @@ -253,26 +255,44 @@ void test_class_members() { mc2.madArg0ToSelf(source()); sink(mc2); // $ MISSING: ir + ptr = new MyClass(); + sink(*ptr); + ptr->madArg0ToSelf(0); + sink(*ptr); + ptr->madArg0ToSelf(source()); + sink(*ptr); // $ ir + mc3.madArg0ToField(source()); sink(mc3.val); // $ MISSING: ir + mc4 = source2(); + mc4_ptr = &mc4; + sink(mc4); // $ ir + sink(mc4.madSelfToReturn()); // $ MISSING: ir + sink(mc4.notASummary()); + sink(mc4_ptr->madSelfToReturn()); // $ MISSING: ir + sink(mc4_ptr->notASummary()); sink(source2().madSelfToReturn()); // $ ir sink(source2().notASummary()); - mc4.val = source(); - sink(mc4.madFieldToReturn()); // $ MISSING: ir + mc5.val = source(); + sink(mc5.madFieldToReturn()); // $ MISSING: ir + mnc2 = source3(); + mnc2_ptr = &mnc2; + sink(mnc2.namespaceMadSelfToReturn()); // $ MISSING: ir + sink(mnc2_ptr->namespaceMadSelfToReturn()); // $ MISSING: ir sink(source3().namespaceMadSelfToReturn()); // $ ir // test class member sources + sinks + summaries together mc.memberMadSinkArg0(mc.memberRemoteMadSource()); // $ ir - mc5.madArg0ToSelf(source()); - sink(mc5.madSelfToReturn()); // $ MISSING: ir + mc6.madArg0ToSelf(source()); + sink(mc6.madSelfToReturn()); // $ MISSING: ir - mc6.madArg0ToField(source()); - sink(mc6.madFieldToReturn()); // $ MISSING: ir + mc7.madArg0ToField(source()); + sink(mc7.madFieldToReturn()); // $ MISSING: ir } // --- MAD cases involving function pointers ---