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

Skip to content

Commit 9f97120

Browse files
committed
CPP: Add a few more tests of '%c'.
1 parent eb08dcf commit 9f97120

5 files changed

Lines changed: 39 additions & 0 deletions

File tree

cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Linux_unsigned_chars/common.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ typedef struct _IO_FILE FILE;
1212
extern int printf(const char *fmt, ...);
1313
extern int vprintf(const char *fmt, va_list ap);
1414
extern int vfprintf(FILE *stream, const char *format, va_list ap);
15+
extern int wprintf(const wchar_t *format, ...);
1516

1617
#include "printf1.h"
1718
#include "real_world.h"
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
| common.h:12:12:12:17 | printf | char | wchar_t | wchar_t |
2+
| common.h:15:12:15:18 | wprintf | wchar_t | char | wchar_t |
23
| format.h:4:13:4:17 | error | char | wchar_t | wchar_t |
34
| real_world.h:8:12:8:18 | fprintf | char | wchar_t | wchar_t |
45
| real_world.h:33:6:33:12 | msg_out | char | wchar_t | wchar_t |

cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Linux_unsigned_chars/printf1.h

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,3 +101,21 @@ void fun1(unsigned char* a, unsigned char* b) {
101101
printf("%td\n", pdt); // GOOD
102102
printf("%td\n", a-b); // GOOD
103103
}
104+
105+
typedef unsigned int wint_t;
106+
107+
void test_chars(char c, wchar_t wc, wint_t wt)
108+
{
109+
printf("%c", c); // GOOD
110+
printf("%c", wc); // BAD [NOT DETECTED]
111+
printf("%c", wt); // BAD [NOT DETECTED]
112+
printf("%C", c); // BAD [NOT DETECTED]
113+
printf("%C", wc); // GOOD (converts to wint_t)
114+
printf("%C", wt); // GOOD
115+
wprintf(L"%c", c); // GOOD
116+
wprintf(L"%c", wc); // BAD [NOT DETECTED]
117+
wprintf(L"%c", wt); // BAD [NOT DETECTED]
118+
wprintf(L"%C", c); // BAD [NOT DETECTED]
119+
wprintf(L"%C", wc); // GOOD (converts to wint_t)
120+
wprintf(L"%C", wt); // GOOD
121+
}

cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Microsoft/common.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ typedef struct _IO_FILE FILE;
1212
extern int printf(const char *fmt, ...);
1313
extern int vprintf(const char *fmt, va_list ap);
1414
extern int vfprintf(FILE *stream, const char *format, va_list ap);
15+
extern int wprintf(const wchar_t *format, ...);
1516

1617
#include "printf1.h"
1718
#include "real_world.h"

cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Microsoft/printf1.h

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,3 +101,21 @@ void fun1(unsigned char* a, unsigned char* b) {
101101
printf("%td\n", pdt); // GOOD
102102
printf("%td\n", a-b); // GOOD
103103
}
104+
105+
typedef unsigned int wint_t;
106+
107+
void test_chars(char c, wchar_t wc, wint_t wt)
108+
{
109+
printf("%c", c); // GOOD
110+
printf("%c", wc); // BAD [NOT DETECTED]
111+
printf("%c", wt); // BAD [NOT DETECTED]
112+
printf("%C", c); // BAD [NOT DETECTED]
113+
printf("%C", wc); // GOOD (converts to wint_t)
114+
printf("%C", wt); // GOOD
115+
wprintf(L"%c", c); // BAD [NOT DETECTED]
116+
wprintf(L"%c", wc); // GOOD (converts to wint_t)
117+
wprintf(L"%c", wt); // GOOD
118+
wprintf(L"%C", c); // GOOD
119+
wprintf(L"%C", wc); // BAD [NOT DETECTED]
120+
wprintf(L"%C", wt); // BAD [NOT DETECTED]
121+
}

0 commit comments

Comments
 (0)