Files
codeql/cpp/ql/test/query-tests/jsf/4.10 Classes/AV Rule 79/Variants.cpp
2021-03-30 12:58:04 +01:00

118 lines
1.4 KiB
C++

// library
typedef unsigned int size_t;
void *malloc(size_t size);
void *calloc(size_t nmemb, size_t size);
void *realloc(void *ptr, size_t size);
void free(void* ptr);
char *strdup(const char *s1);
int *ID(int *x)
{
return x;
}
class MyClass4
{
public:
MyClass4()
{
int *local;
a = b = new int; // GOOD (a is deleted)
c = d = new int; // GOOD (d is deleted)
e = local = new int; // BAD (e is not deleted) [NOT REPORTED]
f = new int; // GOOD (ID(f) is deleted) [FALSE POSITIVE]
g = ID(new int); // GOOD (g is deleted)
}
~MyClass4()
{
delete a;
delete d;
delete ID(f);
delete g;
}
int *a, *b, *c, *d, *e, *f, *g;
};
class MyClass5
{
public:
MyClass5()
{
a = new int[10]; // GOOD
b = (int *)calloc(10, sizeof(int)); // GOOD
c = (int *)realloc(0, 10 * sizeof(int)); // GOOD
d = strdup("string");
}
~MyClass5()
{
delete [] a;
free(b);
free(c);
free(d);
}
int *a, *b, *c;
char *d;
};
class MyClass6
{
public:
MyClass6()
{
a = new int[10]; // BAD
b = (int *)calloc(10, sizeof(int)); // BAD
c = (int *)realloc(0, 10 * sizeof(int)); // BAD
d = strdup("string"); // BAD
}
~MyClass6()
{
}
int *a, *b, *c;
char *d;
};
class MyClass7
{
public:
MyClass7()
{
}
bool open()
{
// ...
}
void close()
{
// ...
}
};
class myClass7Test
{
public:
myClass7Test()
{
success = mc7.open(); // GOOD
}
~myClass7Test()
{
mc7.close();
}
private:
MyClass7 mc7;
bool success;
};