Skip to content

Commit f1e2268

Browse files
committed
C++: Fix ODR violations in tests
In QLtest we do not have linkage awareness, so having multiple functions with the same name in the same test causes ODR violations.
1 parent 3d6965a commit f1e2268

File tree

14 files changed

+101
-106
lines changed

14 files changed

+101
-106
lines changed

cpp/ql/test/experimental/query-tests/Security/CWE/CWE-125/semmle/tests/test.cpp

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ int wprintf (const wchar_t* format, ...);
66
int strlen( const char * string );
77
int checkErrors();
88

9-
void goodTest0()
9+
static void goodTest0()
1010
{
1111
char * ptr = "123456789";
1212
int ret;
@@ -17,7 +17,7 @@ void goodTest0()
1717
ptr += ret;
1818
}
1919
}
20-
void goodTest1(const char* ptr)
20+
static void goodTest1(const char* ptr)
2121
{
2222
int ret;
2323
int len;
@@ -27,7 +27,7 @@ void goodTest1(const char* ptr)
2727
ptr += ret;
2828
}
2929
}
30-
void goodTest2(char* ptr)
30+
static void goodTest2(char* ptr)
3131
{
3232
int ret;
3333
ptr[10]=0;
@@ -38,7 +38,7 @@ void goodTest2(char* ptr)
3838
}
3939
}
4040

41-
void goodTest3(const char* ptr)
41+
static void goodTest3(const char* ptr)
4242
{
4343
int ret;
4444
int len;
@@ -48,7 +48,7 @@ void goodTest3(const char* ptr)
4848
ptr += ret;
4949
}
5050
}
51-
void goodTest4(const char* ptr)
51+
static void goodTest4(const char* ptr)
5252
{
5353
int ret;
5454
int len;
@@ -58,7 +58,7 @@ void goodTest4(const char* ptr)
5858
ptr += ret;
5959
}
6060
}
61-
void badTest1(const char* ptr)
61+
static void badTest1(const char* ptr)
6262
{
6363
int ret;
6464
int len;
@@ -68,7 +68,7 @@ void badTest1(const char* ptr)
6868
ptr += ret;
6969
}
7070
}
71-
void badTest2(const char* ptr)
71+
static void badTest2(const char* ptr)
7272
{
7373
int ret;
7474
int len;
@@ -79,7 +79,7 @@ void badTest2(const char* ptr)
7979
}
8080
}
8181

82-
void goodTest5(const char* ptr,wchar_t *wc,int wc_len)
82+
static void goodTest5(const char* ptr,wchar_t *wc,int wc_len)
8383
{
8484
int ret;
8585
int len;
@@ -96,7 +96,7 @@ void goodTest5(const char* ptr,wchar_t *wc,int wc_len)
9696
}
9797
}
9898

99-
void badTest3(const char* ptr,int wc_len)
99+
static void badTest3(const char* ptr,int wc_len)
100100
{
101101
int ret;
102102
int len;
@@ -113,7 +113,7 @@ void badTest3(const char* ptr,int wc_len)
113113
wc++;
114114
}
115115
}
116-
void badTest4(const char* ptr,int wc_len)
116+
static void badTest4(const char* ptr,int wc_len)
117117
{
118118
int ret;
119119
int len;
@@ -130,7 +130,7 @@ void badTest4(const char* ptr,int wc_len)
130130
wc++;
131131
}
132132
}
133-
void badTest5(const char* ptr,int wc_len)
133+
static void badTest5(const char* ptr,int wc_len)
134134
{
135135
int ret;
136136
int len;
@@ -148,7 +148,7 @@ void badTest5(const char* ptr,int wc_len)
148148
}
149149
}
150150

151-
void badTest6(const char* ptr,int wc_len)
151+
static void badTest6(const char* ptr,int wc_len)
152152
{
153153
int ret;
154154
int len;
@@ -171,7 +171,7 @@ void badTest6(const char* ptr,int wc_len)
171171
ptr+=ret;
172172
}
173173
}
174-
void badTest7(const char* ptr,int wc_len)
174+
static void badTest7(const char* ptr,int wc_len)
175175
{
176176
int ret;
177177
int len;
@@ -188,7 +188,7 @@ void badTest7(const char* ptr,int wc_len)
188188
ptr+=ret;
189189
}
190190
}
191-
void badTest8(const char* ptr,wchar_t *wc)
191+
static void badTest8(const char* ptr,wchar_t *wc)
192192
{
193193
int ret;
194194
int len;

cpp/ql/test/experimental/query-tests/Security/CWE/CWE-125/semmle/tests/test1.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ typedef unsigned int size_t;
2424
void* calloc (size_t num, size_t size);
2525
void* malloc (size_t size);
2626

27-
void badTest1(void *src, int size) {
27+
static void badTest1(void *src, int size) {
2828
WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)src, -1, (LPSTR)src, size, 0, 0); // BAD
2929
MultiByteToWideChar(CP_ACP, 0, (LPCSTR)src, -1, (LPCWSTR)src, 30); // BAD
3030
}
@@ -39,43 +39,43 @@ void goodTest2(){
3939
}
4040
printf("%s\n", dst);
4141
}
42-
void badTest2(){
42+
static void badTest2(){
4343
wchar_t src[] = L"0123456789ABCDEF";
4444
char dst[16];
4545
WideCharToMultiByte(CP_UTF8, 0, src, -1, dst, 16, NULL, NULL); // BAD
4646
printf("%s\n", dst);
4747
}
48-
void goodTest3(){
48+
static void goodTest3(){
4949
char src[] = "0123456789ABCDEF";
5050
int size = MultiByteToWideChar(CP_UTF8, 0, src,sizeof(src),NULL,0);
5151
wchar_t * dst = (wchar_t*)calloc(size + 1, sizeof(wchar_t));
5252
MultiByteToWideChar(CP_UTF8, 0, src, -1, dst, size+1); // GOOD
5353
}
54-
void badTest3(){
54+
static void badTest3(){
5555
char src[] = "0123456789ABCDEF";
5656
int size = MultiByteToWideChar(CP_UTF8, 0, src,sizeof(src),NULL,0);
5757
wchar_t * dst = (wchar_t*)calloc(size + 1, 1);
5858
MultiByteToWideChar(CP_UTF8, 0, src, -1, dst, size+1); // BAD
5959
}
60-
void goodTest4(){
60+
static void goodTest4(){
6161
char src[] = "0123456789ABCDEF";
6262
int size = MultiByteToWideChar(CP_UTF8, 0, src,sizeof(src),NULL,0);
6363
wchar_t * dst = (wchar_t*)malloc((size + 1)*sizeof(wchar_t));
6464
MultiByteToWideChar(CP_UTF8, 0, src, -1, dst, size+1); // GOOD
6565
}
66-
void badTest4(){
66+
static void badTest4(){
6767
char src[] = "0123456789ABCDEF";
6868
int size = MultiByteToWideChar(CP_UTF8, 0, src,sizeof(src),NULL,0);
6969
wchar_t * dst = (wchar_t*)malloc(size + 1);
7070
MultiByteToWideChar(CP_UTF8, 0, src, -1, dst, size+1); // BAD
7171
}
72-
int goodTest5(void *src){
72+
static int goodTest5(void *src){
7373
return WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)src, -1, 0, 0, 0, 0); // GOOD
7474
}
75-
int badTest5 (void *src) {
75+
static int badTest5 (void *src) {
7676
return WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)src, -1, 0, 3, 0, 0); // BAD
7777
}
78-
void goodTest6(WCHAR *src)
78+
static void goodTest6(WCHAR *src)
7979
{
8080
int size;
8181
char dst[5] ="";
@@ -87,7 +87,7 @@ void goodTest6(WCHAR *src)
8787
WideCharToMultiByte(CP_ACP, 0, src, -1, dst, sizeof(dst), 0, 0); // GOOD
8888
printf("%s\n", dst);
8989
}
90-
void badTest6(WCHAR *src)
90+
static void badTest6(WCHAR *src)
9191
{
9292
char dst[5] ="";
9393
WideCharToMultiByte(CP_ACP, 0, src, -1, dst, 260, 0, 0); // BAD

cpp/ql/test/experimental/query-tests/Security/CWE/CWE-125/semmle/tests/test2.cpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,14 @@ size_t _mbstowcs_l(wchar_t *wcstr,const char *mbstr,size_t count, _locale_t loca
1111
size_t mbsrtowcs(wchar_t *wcstr,const char *mbstr,size_t count, mbstate_t *mbstate);
1212

1313

14-
void badTest1(void *src, int size) {
14+
static void badTest1(void *src, int size) {
1515
mbstowcs((wchar_t*)src,(char*)src,size); // BAD
1616
_locale_t locale;
1717
_mbstowcs_l((wchar_t*)src,(char*)src,size,locale); // BAD
1818
mbstate_t *mbstate;
1919
mbsrtowcs((wchar_t*)src,(char*)src,size,mbstate); // BAD
2020
}
21-
void goodTest2(){
21+
static void goodTest2(){
2222
char src[] = "0123456789ABCDEF";
2323
wchar_t dst[16];
2424
int res = mbstowcs(dst, src,16); // GOOD
@@ -29,43 +29,43 @@ void goodTest2(){
2929
}
3030
printf("%s\n", dst);
3131
}
32-
void badTest2(){
32+
static void badTest2(){
3333
char src[] = "0123456789ABCDEF";
3434
wchar_t dst[16];
3535
mbstowcs(dst, src,16); // BAD
3636
printf("%s\n", dst);
3737
}
38-
void goodTest3(){
38+
static void goodTest3(){
3939
char src[] = "0123456789ABCDEF";
4040
int size = mbstowcs(NULL, src,NULL);
4141
wchar_t * dst = (wchar_t*)calloc(size + 1, sizeof(wchar_t));
4242
mbstowcs(dst, src,size+1); // GOOD
4343
}
44-
void badTest3(){
44+
static void badTest3(){
4545
char src[] = "0123456789ABCDEF";
4646
int size = mbstowcs(NULL, src,NULL);
4747
wchar_t * dst = (wchar_t*)calloc(size + 1, 1);
4848
mbstowcs(dst, src,size+1); // BAD
4949
}
50-
void goodTest4(){
50+
static void goodTest4(){
5151
char src[] = "0123456789ABCDEF";
5252
int size = mbstowcs(NULL, src,NULL);
5353
wchar_t * dst = (wchar_t*)malloc((size + 1)*sizeof(wchar_t));
5454
mbstowcs(dst, src,size+1); // GOOD
5555
}
56-
void badTest4(){
56+
static void badTest4(){
5757
char src[] = "0123456789ABCDEF";
5858
int size = mbstowcs(NULL, src,NULL);
5959
wchar_t * dst = (wchar_t*)malloc(size + 1);
6060
mbstowcs(dst, src,size+1); // BAD
6161
}
62-
int goodTest5(void *src){
62+
static int goodTest5(void *src){
6363
return mbstowcs(NULL, (char*)src,NULL); // GOOD
6464
}
65-
int badTest5 (void *src) {
65+
static int badTest5 (void *src) {
6666
return mbstowcs(NULL, (char*)src,3); // BAD
6767
}
68-
void goodTest6(void *src){
68+
static void goodTest6(void *src){
6969
wchar_t dst[5];
7070
int size = mbstowcs(NULL, (char*)src,NULL);
7171
if(size>=sizeof(dst)){
@@ -75,7 +75,7 @@ void goodTest6(void *src){
7575
mbstowcs(dst, (char*)src,sizeof(dst)); // GOOD
7676
printf("%s\n", dst);
7777
}
78-
void badTest6(void *src){
78+
static void badTest6(void *src){
7979
wchar_t dst[5];
8080
mbstowcs(dst, (char*)src,260); // BAD
8181
printf("%s\n", dst);

cpp/ql/test/experimental/query-tests/Security/CWE/CWE-125/semmle/tests/test3.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,14 @@ void goodTest1(unsigned char *src){
99
unsigned char dst[50];
1010
_mbsnbcpy(dst,src,sizeof(dst)); // GOOD
1111
}
12-
size_t badTest1(unsigned char *src){
12+
static size_t badTest1(unsigned char *src){
1313
int cb = 0;
1414
unsigned char dst[50];
1515
while( cb < sizeof(dst) )
1616
dst[cb++]=*src++; // BAD
1717
return _mbclen(dst);
1818
}
19-
void goodTest2(unsigned char *src){
19+
static void goodTest2(unsigned char *src){
2020

2121
int cb = 0;
2222
unsigned char dst[50];
@@ -27,7 +27,7 @@ void goodTest2(unsigned char *src){
2727
src=_mbsinc(src);
2828
}
2929
}
30-
void badTest2(unsigned char *src){
30+
static void badTest2(unsigned char *src){
3131

3232
int cb = 0;
3333
unsigned char dst[50];
@@ -38,11 +38,11 @@ void badTest2(unsigned char *src){
3838
src=_mbsinc(src);
3939
}
4040
}
41-
void goodTest3(){
41+
static void goodTest3(){
4242
wchar_t name[50];
4343
name[sizeof(name) / sizeof(*name) - 1] = L'\0'; // GOOD
4444
}
45-
void badTest3(){
45+
static void badTest3(){
4646
wchar_t name[50];
4747
name[sizeof(name) - 1] = L'\0'; // BAD
4848
}

cpp/ql/test/query-tests/Security/CWE/CWE-131/NoSpaceForZeroTerminator/test.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,30 +11,30 @@ char *strcpy(char *s1, const char *s2);
1111

1212
//// Test code /////
1313

14-
void bad0(char *str) {
14+
static void bad0(char *str) {
1515
// BAD -- Not allocating space for '\0' terminator
1616
char *buffer = malloc(strlen(str));
1717
strcpy(buffer, str);
1818
free(buffer);
1919
}
2020

21-
void good0(char *str) {
21+
static void good0(char *str) {
2222
// GOOD -- Allocating extra byte for terminator
2323
char *buffer = malloc(strlen(str)+1);
2424
strcpy(buffer, str);
2525
free(buffer);
2626
}
2727

2828

29-
void bad1(char *str) {
29+
static void bad1(char *str) {
3030
int len = strlen(str);
3131
// BAD -- Not allocating space for '\0' terminator
3232
char *buffer = malloc(len);
3333
strcpy(buffer, str);
3434
free(buffer);
3535
}
3636

37-
void good1(char *str) {
37+
static void good1(char *str) {
3838
int len = strlen(str);
3939
// GOOD -- Allocating extra byte for terminator
4040
char *buffer = malloc(len+1);
@@ -43,30 +43,30 @@ void good1(char *str) {
4343
}
4444

4545

46-
void bad2(char *str) {
46+
static void bad2(char *str) {
4747
int len = strlen(str);
4848
// BAD -- Not allocating space for '\0' terminator
4949
char *buffer = malloc(len);
5050
strcpy(buffer, str);
5151
free(buffer);
5252
}
5353

54-
void good2(char *str) {
54+
static void good2(char *str) {
5555
int len = strlen(str)+1;
5656
// GOOD -- Allocating extra byte for terminator
5757
char *buffer = malloc(len);
5858
strcpy(buffer, str);
5959
free(buffer);
6060
}
6161

62-
void bad3(char *str) {
62+
static void bad3(char *str) {
6363
// BAD -- Not allocating space for '\0' terminator
6464
char *buffer = malloc(strlen(str) * sizeof(char));
6565
strcpy(buffer, str);
6666
free(buffer);
6767
}
6868

69-
void good3(char *str) {
69+
static void good3(char *str) {
7070
// GOOD -- Allocating extra byte for terminator
7171
char *buffer = malloc((strlen(str) + 1) * sizeof(char));
7272
strcpy(buffer, str);
@@ -75,7 +75,7 @@ void good3(char *str) {
7575

7676
void *memcpy(void *s1, const void *s2, size_t n);
7777

78-
void good4(char *str) {
78+
static void good4(char *str) {
7979
// GOOD -- allocating a non zero-terminated string
8080
int len = strlen(str);
8181
char *buffer = malloc(len);

0 commit comments

Comments
 (0)