@@ -53,4 +53,59 @@ void NonStringFalsePositiveTest2(unsigned char* buffer)
5353{
5454 wchar_t *lpWchar = NULL ;
5555 lpWchar = (LPWSTR)buffer; // Possible False Positive
56- }
56+ }
57+
58+ typedef unsigned char BYTE;
59+ using FOO = BYTE*;
60+
61+ void NonStringFalsePositiveTest3 (FOO buffer)
62+ {
63+ wchar_t *lpWchar = NULL ;
64+ lpWchar = (LPWSTR)buffer; // GOOD
65+ }
66+
67+ #define UNICODE 0x8
68+
69+ // assume EMPTY_MACRO is tied to if UNICODE is enabled
70+ #ifdef EMPTY_MACRO
71+ typedef WCHAR* LPTSTR;
72+ #else
73+ typedef char * LPTSTR;
74+ #endif
75+
76+ void CheckedConversionFalsePositiveTest3 (unsigned short flags, LPTSTR buffer)
77+ {
78+ wchar_t *lpWchar = NULL ;
79+ if (flags & UNICODE)
80+ lpWchar = (LPWSTR)buffer; // GOOD
81+ else
82+ lpWchar = (LPWSTR)buffer; // BUG
83+
84+ if ((flags & UNICODE) == 0x8 )
85+ lpWchar = (LPWSTR)buffer; // GOOD
86+ else
87+ lpWchar = (LPWSTR)buffer; // BUG
88+
89+ if ((flags & UNICODE) != 0x8 )
90+ lpWchar = (LPWSTR)buffer; // BUG
91+ else
92+ lpWchar = (LPWSTR)buffer; // GOOD
93+
94+ // Bad operator precedence
95+ if (flags & UNICODE == 0x8 )
96+ lpWchar = (LPWSTR)buffer; // BUG
97+ else
98+ lpWchar = (LPWSTR)buffer; // BUG
99+
100+ if ((flags & UNICODE) != 0 )
101+ lpWchar = (LPWSTR)buffer; // GOOD
102+ else
103+ lpWchar = (LPWSTR)buffer; // BUG
104+
105+ if ((flags & UNICODE) == 0 )
106+ lpWchar = (LPWSTR)buffer; // BUG
107+ else
108+ lpWchar = (LPWSTR)buffer; // GOOD
109+
110+ lpWchar = (LPWSTR)buffer; // BUG
111+ }
0 commit comments