Skip to content

Commit 2907861

Browse files
committed
C++: Add cpp/incorrect-string-type-conversion test with unreachable code
1 parent acc06fa commit 2907861

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

cpp/ql/test/query-tests/Security/CWE/CWE-704/WcharCharConversion.cpp

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,3 +109,34 @@ void CheckedConversionFalsePositiveTest3(unsigned short flags, LPTSTR buffer)
109109

110110
lpWchar = (LPWSTR)buffer; // $ Alert
111111
}
112+
113+
typedef unsigned long long size_t;
114+
115+
size_t wcslen(const wchar_t *str);
116+
size_t strlen(const char* str);
117+
118+
template<typename C>
119+
size_t str_len(const C *str) {
120+
if (sizeof(C) != 1) {
121+
return wcslen((const wchar_t *)str); // $ SPURIOUS: Alert
122+
}
123+
124+
return strlen((const char *)str);
125+
}
126+
127+
template<typename C>
128+
size_t wrong_str_len(const C *str) {
129+
if (sizeof(C) == 1) {
130+
return wcslen((const wchar_t *)str); // $ Alert
131+
}
132+
133+
return strlen((const char *)str);
134+
}
135+
136+
void test_str_len(const wchar_t *wstr, const char *str) {
137+
size_t len =
138+
str_len(wstr) +
139+
str_len(str) +
140+
wrong_str_len(wstr) +
141+
wrong_str_len(str);
142+
}

cpp/ql/test/query-tests/Security/CWE/CWE-704/WcharCharConversion.expected

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,5 @@
1111
| WcharCharConversion.cpp:103:21:103:26 | buffer | Conversion from LPTSTR to LPWSTR. Use of invalid string can lead to undefined behavior. |
1212
| WcharCharConversion.cpp:106:21:106:26 | buffer | Conversion from LPTSTR to LPWSTR. Use of invalid string can lead to undefined behavior. |
1313
| WcharCharConversion.cpp:110:20:110:25 | buffer | Conversion from LPTSTR to LPWSTR. Use of invalid string can lead to undefined behavior. |
14+
| WcharCharConversion.cpp:121:34:121:36 | str | Conversion from const char * to const wchar_t *. Use of invalid string can lead to undefined behavior. |
15+
| WcharCharConversion.cpp:130:34:130:36 | str | Conversion from const char * to const wchar_t *. Use of invalid string can lead to undefined behavior. |

0 commit comments

Comments
 (0)