Files
codeql/cpp/ql/test/library-tests/dataflow/smart-pointers-taint/test.cpp
Mathias Vorreiter Pedersen 373c849b18 C++: Accept library-test changes
2022-10-14 10:14:52 +02:00

46 lines
928 B
C++

#include "memory.h"
int source();
void sink(int);
void test_unique_ptr_int() {
std::unique_ptr<int> p1(new int(source()));
std::unique_ptr<int> p2 = std::make_unique<int>(source());
sink(*p1); // $ ir
sink(*p2); // $ ir=8:50
}
struct A {
int x, y;
A(int x, int y) : x(x), y(y) {}
};
void test_unique_ptr_struct() {
std::unique_ptr<A> p1(new A{source(), 0});
std::unique_ptr<A> p2 = std::make_unique<A>(source(), 0);
sink(p1->x); // $ ir
sink(p1->y);
sink(p2->x); // $ ir=22:46
sink(p2->y);
}
void test_shared_ptr_int() {
std::shared_ptr<int> p1(new int(source()));
std::shared_ptr<int> p2 = std::make_shared<int>(source());
sink(*p1); // $ ir
sink(*p2); // $ ir=32:50
}
void test_shared_ptr_struct() {
std::shared_ptr<A> p1(new A{source(), 0});
std::shared_ptr<A> p2 = std::make_shared<A>(source(), 0);
sink(p1->x); // $ MISSING: ir
sink(p1->y);
sink(p2->x); // $ MISSING: ir
sink(p2->y);
}