Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 25e1151

Browse files
committed
CPP: Add a test of ReturnStackAllocatedMemory.
1 parent fc5b9dd commit 25e1151

3 files changed

Lines changed: 128 additions & 0 deletions

File tree

Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
| test.cpp:93:2:93:12 | return ... | May return stack-allocated memory. |
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Likely Bugs/Memory Management/ReturnStackAllocatedMemory.ql
Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
2+
class MyClass
3+
{
4+
public:
5+
int a, b;
6+
};
7+
8+
MyClass *test1()
9+
{
10+
MyClass mc;
11+
12+
return &mc; // BAD [NOT DETECTED]
13+
}
14+
15+
MyClass *test2()
16+
{
17+
MyClass mc;
18+
MyClass *ptr = &mc;
19+
20+
return ptr; // BAD [NOT DETECTED]
21+
}
22+
23+
MyClass *test3()
24+
{
25+
MyClass mc;
26+
MyClass &ref = mc;
27+
28+
return &ref; // BAD [NOT DETECTED]
29+
}
30+
31+
int *test4()
32+
{
33+
MyClass mc;
34+
35+
return &(mc.a); // BAD [NOT DETECTED]
36+
}
37+
38+
MyClass test6()
39+
{
40+
MyClass mc;
41+
42+
return mc; // GOOD
43+
}
44+
45+
MyClass *test7()
46+
{
47+
MyClass *mc = new MyClass;
48+
49+
return mc; // GOOD
50+
}
51+
52+
MyClass test8()
53+
{
54+
return MyClass(); // GOOD
55+
}
56+
57+
int test9()
58+
{
59+
MyClass mc;
60+
61+
return mc.a; // GOOD
62+
}
63+
64+
MyClass *test10()
65+
{
66+
MyClass *ptr;
67+
68+
{
69+
MyClass mc;
70+
ptr = &mc;
71+
}
72+
73+
return ptr; // BAD [NOT DETECTED]
74+
}
75+
76+
MyClass *test11(MyClass *param)
77+
{
78+
return param; // GOOD
79+
}
80+
81+
MyClass *test12()
82+
{
83+
static MyClass mc;
84+
MyClass &ref = mc;
85+
86+
return &ref; // GOOD
87+
}
88+
89+
char *testArray1()
90+
{
91+
char arr[256];
92+
93+
return arr; // BAD
94+
}
95+
96+
char *testArray2()
97+
{
98+
char arr[256];
99+
100+
return &(arr[10]); // BAD [NOT DETECTED]
101+
}
102+
103+
char testArray3()
104+
{
105+
char arr[256];
106+
107+
return arr[10]; // GOOD
108+
}
109+
110+
char *testArray4()
111+
{
112+
char arr[256];
113+
char *ptr;
114+
115+
ptr = arr + 1;
116+
ptr++;
117+
118+
return ptr; // BAD [NOT DETECTED]
119+
}
120+
121+
char *testArray5()
122+
{
123+
static char arr[256];
124+
125+
return arr; // GOOD
126+
}

0 commit comments

Comments
 (0)