mirror of
https://github.com/github/codeql.git
synced 2025-12-24 04:36:35 +01:00
C++: Add more test cases for taint through qualifiers.
This commit is contained in:
@@ -2,22 +2,22 @@
|
|||||||
| tests.cpp:115:5:115:19 | [summary] to write: ReturnValue in madArg0ToReturn | ReturnNode | madArg0ToReturn | madArg0ToReturn |
|
| tests.cpp:115:5:115:19 | [summary] to write: ReturnValue in madArg0ToReturn | ReturnNode | madArg0ToReturn | madArg0ToReturn |
|
||||||
| tests.cpp:117:5:117:28 | [summary param] 0 in madArg0ToReturnValueFlow | ParameterNode | madArg0ToReturnValueFlow | madArg0ToReturnValueFlow |
|
| tests.cpp:117:5:117:28 | [summary param] 0 in madArg0ToReturnValueFlow | ParameterNode | madArg0ToReturnValueFlow | madArg0ToReturnValueFlow |
|
||||||
| tests.cpp:117:5:117:28 | [summary] to write: ReturnValue in madArg0ToReturnValueFlow | ReturnNode | madArg0ToReturnValueFlow | madArg0ToReturnValueFlow |
|
| tests.cpp:117:5:117:28 | [summary] to write: ReturnValue in madArg0ToReturnValueFlow | ReturnNode | madArg0ToReturnValueFlow | madArg0ToReturnValueFlow |
|
||||||
| tests.cpp:180:7:180:19 | [summary param] 0 in madArg0ToSelf | ParameterNode | madArg0ToSelf | madArg0ToSelf |
|
| tests.cpp:183:7:183:19 | [summary param] 0 in madArg0ToSelf | ParameterNode | madArg0ToSelf | madArg0ToSelf |
|
||||||
| tests.cpp:180:7:180:19 | [summary param] this indirection in madArg0ToSelf | ParameterNode | madArg0ToSelf | madArg0ToSelf |
|
| tests.cpp:183:7:183:19 | [summary param] this indirection in madArg0ToSelf | ParameterNode | madArg0ToSelf | madArg0ToSelf |
|
||||||
| tests.cpp:180:7:180:19 | [summary] to write: Argument[this indirection] in madArg0ToSelf | PostUpdateNode | madArg0ToSelf | madArg0ToSelf |
|
| tests.cpp:183:7:183:19 | [summary] to write: Argument[this indirection] in madArg0ToSelf | PostUpdateNode | madArg0ToSelf | madArg0ToSelf |
|
||||||
| tests.cpp:181:6:181:20 | [summary param] this indirection in madSelfToReturn | ParameterNode | madSelfToReturn | madSelfToReturn |
|
| tests.cpp:184:6:184:20 | [summary param] this indirection in madSelfToReturn | ParameterNode | madSelfToReturn | madSelfToReturn |
|
||||||
| tests.cpp:181:6:181:20 | [summary] to write: ReturnValue in madSelfToReturn | ReturnNode | madSelfToReturn | madSelfToReturn |
|
| tests.cpp:184:6:184:20 | [summary] to write: ReturnValue in madSelfToReturn | ReturnNode | madSelfToReturn | madSelfToReturn |
|
||||||
| tests.cpp:209:7:209:30 | [summary param] this indirection in namespaceMadSelfToReturn | ParameterNode | namespaceMadSelfToReturn | namespaceMadSelfToReturn |
|
| tests.cpp:212:7:212:30 | [summary param] this indirection in namespaceMadSelfToReturn | ParameterNode | namespaceMadSelfToReturn | namespaceMadSelfToReturn |
|
||||||
| tests.cpp:209:7:209:30 | [summary] to write: ReturnValue in namespaceMadSelfToReturn | ReturnNode | namespaceMadSelfToReturn | namespaceMadSelfToReturn |
|
| tests.cpp:212:7:212:30 | [summary] to write: ReturnValue in namespaceMadSelfToReturn | ReturnNode | namespaceMadSelfToReturn | namespaceMadSelfToReturn |
|
||||||
| tests.cpp:305:5:305:29 | [summary param] 0 in madCallArg0ReturnToReturn | ParameterNode | madCallArg0ReturnToReturn | madCallArg0ReturnToReturn |
|
| tests.cpp:323:5:323: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:323:5:323: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:323:5:323: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:323:5:323: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:323:5:323: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:325:6:325: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:325:6:325: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:325:6:325: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:325:6:325: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:325:6:325: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:325:6:325: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 |
|
| tests.cpp:325:6:325:25 | [summary] to write: Argument[1] in madCallArg0WithValue | PostUpdateNode | madCallArg0WithValue | madCallArg0WithValue |
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ private class TestSources extends SourceModelCsv {
|
|||||||
";MyClass;true;memberRemoteMadSourceVar;;;;remote",
|
";MyClass;true;memberRemoteMadSourceVar;;;;remote",
|
||||||
";MyClass;true;subtypeRemoteMadSource1;;;ReturnValue;remote",
|
";MyClass;true;subtypeRemoteMadSource1;;;ReturnValue;remote",
|
||||||
";MyClass;false;subtypeNonSource;;;ReturnValue;remote", // the tests define this in MyDerivedClass, so it should *not* be recongized as a source
|
";MyClass;false;subtypeNonSource;;;ReturnValue;remote", // the tests define this in MyDerivedClass, so it should *not* be recongized as a source
|
||||||
|
";MyClass;true;qualifierSource;;;Argument[-1];remote",
|
||||||
";MyDerivedClass;false;subtypeRemoteMadSource2;;;ReturnValue;remote",
|
";MyDerivedClass;false;subtypeRemoteMadSource2;;;ReturnValue;remote",
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -44,6 +45,8 @@ private class TestSinks extends SinkModelCsv {
|
|||||||
";;false;madSinkVar;;;;test-sink", ";;false;madSinkParam0;;;Parameter[0];test-sink",
|
";;false;madSinkVar;;;;test-sink", ";;false;madSinkParam0;;;Parameter[0];test-sink",
|
||||||
";MyClass;true;memberMadSinkArg0;;;Argument[0];test-sink",
|
";MyClass;true;memberMadSinkArg0;;;Argument[0];test-sink",
|
||||||
";MyClass;true;memberMadSinkVar;;;;test-sink",
|
";MyClass;true;memberMadSinkVar;;;;test-sink",
|
||||||
|
";MyClass;true;qualifierSink;;;Argument[-1];test-sink",
|
||||||
|
";MyClass;true;qualifierArg0Sink;;;Argument[-1..0];test-sink",
|
||||||
"MyNamespace;MyClass;true;namespaceMemberMadSinkArg0;;;Argument[0];test-sink",
|
"MyNamespace;MyClass;true;namespaceMemberMadSinkArg0;;;Argument[0];test-sink",
|
||||||
"MyNamespace;MyClass;true;namespaceStaticMemberMadSinkArg0;;;Argument[0];test-sink",
|
"MyNamespace;MyClass;true;namespaceStaticMemberMadSinkArg0;;;Argument[0];test-sink",
|
||||||
"MyNamespace;MyClass;true;namespaceMemberMadSinkVar;;;;test-sink",
|
"MyNamespace;MyClass;true;namespaceMemberMadSinkVar;;;;test-sink",
|
||||||
|
|||||||
@@ -171,10 +171,13 @@ public:
|
|||||||
int memberRemoteMadSource(); // $ interpretElement
|
int memberRemoteMadSource(); // $ interpretElement
|
||||||
void memberRemoteMadSourceIndirectArg0(int *x); // $ interpretElement
|
void memberRemoteMadSourceIndirectArg0(int *x); // $ interpretElement
|
||||||
int memberRemoteMadSourceVar; // $ interpretElement
|
int memberRemoteMadSourceVar; // $ interpretElement
|
||||||
|
void qualifierSource(); // $ interpretElement
|
||||||
|
|
||||||
// sinks
|
// sinks
|
||||||
void memberMadSinkArg0(int x); // $ interpretElement
|
void memberMadSinkArg0(int x); // $ interpretElement
|
||||||
int memberMadSinkVar; // $ interpretElement
|
int memberMadSinkVar; // $ interpretElement
|
||||||
|
void qualifierSink(); // $ interpretElement
|
||||||
|
void qualifierArg0Sink(int x); // $ interpretElement
|
||||||
|
|
||||||
// summaries
|
// summaries
|
||||||
void madArg0ToSelf(int x); // $ interpretElement
|
void madArg0ToSelf(int x); // $ interpretElement
|
||||||
@@ -213,7 +216,7 @@ namespace MyNamespace {
|
|||||||
MyNamespace::MyClass source3();
|
MyNamespace::MyClass source3();
|
||||||
|
|
||||||
void test_class_members() {
|
void test_class_members() {
|
||||||
MyClass mc, mc2, mc3, mc4, mc5, mc6, mc7;
|
MyClass mc, mc2, mc3, mc4, mc5, mc6, mc7, mc8, mc9;
|
||||||
MyClass *ptr, *mc4_ptr;
|
MyClass *ptr, *mc4_ptr;
|
||||||
MyDerivedClass mdc;
|
MyDerivedClass mdc;
|
||||||
MyNamespace::MyClass mnc, mnc2;
|
MyNamespace::MyClass mnc, mnc2;
|
||||||
@@ -293,6 +296,21 @@ void test_class_members() {
|
|||||||
|
|
||||||
mc7.madArg0ToField(source());
|
mc7.madArg0ToField(source());
|
||||||
sink(mc7.madFieldToReturn()); // $ MISSING: ir
|
sink(mc7.madFieldToReturn()); // $ MISSING: ir
|
||||||
|
|
||||||
|
// test taint through qualifier
|
||||||
|
|
||||||
|
sink(mc8);
|
||||||
|
mc8.qualifierArg0Sink(0);
|
||||||
|
mc8.qualifierArg0Sink(source()); // $ ir
|
||||||
|
|
||||||
|
mc9 = source2();
|
||||||
|
mc9.qualifierSink(); // $ ir
|
||||||
|
mc9.qualifierArg0Sink(0); // $ ir
|
||||||
|
|
||||||
|
mc8.qualifierSource();
|
||||||
|
sink(mc8); // $ ir
|
||||||
|
mc8.qualifierSink(); // $ ir
|
||||||
|
mc9.qualifierArg0Sink(0); // $ ir
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- MAD cases involving function pointers ---
|
// --- MAD cases involving function pointers ---
|
||||||
|
|||||||
Reference in New Issue
Block a user