mirror of
https://github.com/github/codeql.git
synced 2026-04-30 11:15:13 +02:00
C++: Add formatLiteral test.
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
| test.c:14:9:14:10 | | 1 |
|
||||
| test.c:15:9:15:14 | | 2 |
|
||||
| test.c:16:9:16:12 | \t | 2 |
|
||||
| test.c:17:9:17:12 | %% | 2 |
|
||||
| test.c:20:9:20:12 | %c | 2 |
|
||||
| test.c:21:9:21:16 | %c%c%c | 4 |
|
||||
| test.c:24:9:24:23 | Hello, world! | 14 |
|
||||
| test.c:25:9:25:12 | %s | 14 |
|
||||
| test.c:26:9:26:14 | %.4s | 5 |
|
||||
| test.c:27:9:27:16 | %s, %s | 14 |
|
||||
| test.c:30:9:30:12 | %i | 12 |
|
||||
| test.c:31:9:31:14 | %lli | 12 |
|
||||
| test.c:32:9:32:12 | %i | 12 |
|
||||
| test.c:33:9:33:14 | %lli | 21 |
|
||||
| test.c:34:9:34:12 | %d | 12 |
|
||||
| test.c:35:9:35:12 | %u | 11 |
|
||||
| test.c:36:9:36:12 | %x | 9 |
|
||||
| test.c:37:9:37:12 | %X | 9 |
|
||||
| test.c:38:9:38:13 | %#x | 11 |
|
||||
| test.c:39:9:39:12 | %o | 12 |
|
||||
| test.c:40:9:40:13 | %#o | 13 |
|
||||
| test.c:43:9:43:12 | %f | 318 |
|
||||
| test.c:44:9:44:14 | %.2f | |
|
||||
| test.c:45:9:45:12 | %e | 15 |
|
||||
| test.c:59:10:59:14 | %Ii | 12 |
|
||||
| test.c:66:10:66:14 | %zu | 21 |
|
||||
| test.c:67:10:67:14 | %Zu | 21 |
|
||||
| test.c:74:10:74:14 | %lc | 2 |
|
||||
| test.c:78:9:78:20 | %2$i, %1$i | 5 |
|
||||
| test.c:79:9:79:20 | %2$i, %1$i | 25 |
|
||||
| test.c:81:9:81:24 | %2$02i %1$4.2f | |
|
||||
| test.c:85:10:85:18 | %2$*1$d | |
|
||||
| test.c:86:10:86:19 | %2$0*1$d | |
|
||||
| test.c:92:10:92:19 | %2$.*1$f | |
|
||||
| test.c:99:10:99:12 | # | 2 |
|
||||
| test.c:100:10:100:13 | %% | 2 |
|
||||
| test.c:101:10:101:15 | %%%% | 3 |
|
||||
| test.c:102:10:102:15 | %%%f | 319 |
|
||||
| test.c:103:10:103:17 | %%%%%f | 320 |
|
||||
| test.c:104:10:104:18 | %4.2f%% | |
|
||||
| test.c:105:10:105:17 | %%%f%% | 320 |
|
||||
@@ -0,0 +1,4 @@
|
||||
import semmle.code.cpp.commons.Printf
|
||||
|
||||
from FormatLiteral fl
|
||||
select fl, concat(fl.getMaxConvertedLength().toString(), ", ")
|
||||
@@ -0,0 +1,39 @@
|
||||
| test.c:20:9:20:12 | %c | 0 | | c | | file://:0:0:0:0 | char |
|
||||
| test.c:21:9:21:16 | %c%c%c | 0 | | c | | file://:0:0:0:0 | char |
|
||||
| test.c:21:9:21:16 | %c%c%c | 1 | | c | | file://:0:0:0:0 | char |
|
||||
| test.c:21:9:21:16 | %c%c%c | 2 | | c | | file://:0:0:0:0 | char |
|
||||
| test.c:25:9:25:12 | %s | 0 | | s | | file://:0:0:0:0 | char * |
|
||||
| test.c:26:9:26:14 | %.4s | 0 | | s | | file://:0:0:0:0 | char * |
|
||||
| test.c:27:9:27:16 | %s, %s | 0 | | s | | file://:0:0:0:0 | char * |
|
||||
| test.c:27:9:27:16 | %s, %s | 1 | | s | | file://:0:0:0:0 | char * |
|
||||
| test.c:30:9:30:12 | %i | 0 | | i | | file://:0:0:0:0 | int |
|
||||
| test.c:31:9:31:14 | %lli | 0 | | i | ll | file://:0:0:0:0 | long long |
|
||||
| test.c:32:9:32:12 | %i | 0 | | i | | file://:0:0:0:0 | int |
|
||||
| test.c:33:9:33:14 | %lli | 0 | | i | ll | file://:0:0:0:0 | long long |
|
||||
| test.c:34:9:34:12 | %d | 0 | | d | | file://:0:0:0:0 | int |
|
||||
| test.c:35:9:35:12 | %u | 0 | | u | | file://:0:0:0:0 | unsigned int |
|
||||
| test.c:36:9:36:12 | %x | 0 | | x | | file://:0:0:0:0 | unsigned int |
|
||||
| test.c:37:9:37:12 | %X | 0 | | X | | file://:0:0:0:0 | unsigned int |
|
||||
| test.c:38:9:38:13 | %#x | 0 | | x | | file://:0:0:0:0 | unsigned int |
|
||||
| test.c:39:9:39:12 | %o | 0 | | o | | file://:0:0:0:0 | unsigned int |
|
||||
| test.c:40:9:40:13 | %#o | 0 | | o | | file://:0:0:0:0 | unsigned int |
|
||||
| test.c:43:9:43:12 | %f | 0 | | f | | file://:0:0:0:0 | double |
|
||||
| test.c:44:9:44:14 | %.2f | 0 | | f | | file://:0:0:0:0 | double |
|
||||
| test.c:45:9:45:12 | %e | 0 | | e | | file://:0:0:0:0 | double |
|
||||
| test.c:59:10:59:14 | %Ii | 0 | | i | | file://:0:0:0:0 | int |
|
||||
| test.c:66:10:66:14 | %zu | 0 | | u | z | test.c:50:27:50:32 | size_t |
|
||||
| test.c:67:10:67:14 | %Zu | 0 | | u | Z | test.c:50:27:50:32 | size_t |
|
||||
| test.c:74:10:74:14 | %lc | 0 | | c | l | file://:0:0:0:0 | wchar_t |
|
||||
| test.c:78:9:78:20 | %2$i, %1$i | 0 | 2$ | i | | file://:0:0:0:0 | int |
|
||||
| test.c:78:9:78:20 | %2$i, %1$i | 1 | 1$ | i | | file://:0:0:0:0 | int |
|
||||
| test.c:79:9:79:20 | %2$i, %1$i | 0 | 2$ | i | | file://:0:0:0:0 | int |
|
||||
| test.c:79:9:79:20 | %2$i, %1$i | 1 | 1$ | i | | file://:0:0:0:0 | int |
|
||||
| test.c:81:9:81:24 | %2$02i %1$4.2f | 0 | 2$ | i | | file://:0:0:0:0 | int |
|
||||
| test.c:81:9:81:24 | %2$02i %1$4.2f | 1 | 1$ | f | | file://:0:0:0:0 | double |
|
||||
| test.c:85:10:85:18 | %2$*1$d | 0 | 2$ | d | | file://:0:0:0:0 | int |
|
||||
| test.c:86:10:86:19 | %2$0*1$d | 0 | 2$ | d | | file://:0:0:0:0 | int |
|
||||
| test.c:92:10:92:19 | %2$.*1$f | 0 | 2$ | f | | file://:0:0:0:0 | double |
|
||||
| test.c:102:10:102:15 | %%%f | 0 | | f | | file://:0:0:0:0 | double |
|
||||
| test.c:103:10:103:17 | %%%%%f | 0 | | f | | file://:0:0:0:0 | double |
|
||||
| test.c:104:10:104:18 | %4.2f%% | 0 | | f | | file://:0:0:0:0 | double |
|
||||
| test.c:105:10:105:17 | %%%f%% | 0 | | f | | file://:0:0:0:0 | double |
|
||||
11
cpp/ql/test/library-tests/printf/formatLiteral/formatType.ql
Normal file
11
cpp/ql/test/library-tests/printf/formatLiteral/formatType.ql
Normal file
@@ -0,0 +1,11 @@
|
||||
import semmle.code.cpp.commons.Printf
|
||||
|
||||
from FormatLiteral fl, int i
|
||||
select
|
||||
fl,
|
||||
i,
|
||||
concat(fl.getParameterField(i).toString(), ", "),
|
||||
fl.getConversionChar(i),
|
||||
fl.getLength(i),
|
||||
concat(fl.getConversionType(i).getLocation().toString(), ", "),
|
||||
concat(fl.getConversionType(i).toString(), ", ")
|
||||
107
cpp/ql/test/library-tests/printf/formatLiteral/test.c
Normal file
107
cpp/ql/test/library-tests/printf/formatLiteral/test.c
Normal file
@@ -0,0 +1,107 @@
|
||||
/** standard printf functions */
|
||||
|
||||
int printf(const char *format, ...);
|
||||
|
||||
/** test program */
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
long long int lli;
|
||||
double d;
|
||||
int i;
|
||||
|
||||
// constant expressions
|
||||
printf("");
|
||||
printf("\x20");
|
||||
printf("\t");
|
||||
printf("%%");
|
||||
|
||||
// characters
|
||||
printf("%c", 'a');
|
||||
printf("%c%c%c", 'a', 'b', 'c');
|
||||
|
||||
// strings
|
||||
printf("Hello, world!");
|
||||
printf("%s", "Hello, world!");
|
||||
printf("%.4s", "Hello, world!");
|
||||
printf("%s, %s", "Hello", "world!");
|
||||
|
||||
// integers
|
||||
printf("%i", i);
|
||||
printf("%lli", i);
|
||||
printf("%i", lli);
|
||||
printf("%lli", lli);
|
||||
printf("%d", i);
|
||||
printf("%u", i);
|
||||
printf("%x", i);
|
||||
printf("%X", i);
|
||||
printf("%#x", i);
|
||||
printf("%o", i);
|
||||
printf("%#o", i);
|
||||
|
||||
// doubles
|
||||
printf("%f", d);
|
||||
printf("%.2f", d);
|
||||
printf("%e", d);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
typedef long unsigned int size_t;
|
||||
typedef unsigned int wint_t;
|
||||
|
||||
void more_cases(int a, int b)
|
||||
{
|
||||
// integers
|
||||
{
|
||||
int i;
|
||||
|
||||
printf("%Ii", i); // glibc 2.2 'I' prefix
|
||||
}
|
||||
|
||||
// size_t
|
||||
{
|
||||
size_t st;
|
||||
|
||||
printf("%zu", st); // size_t
|
||||
printf("%Zu", st); // non-standard synonym for 'z'
|
||||
}
|
||||
|
||||
// wint_t
|
||||
{
|
||||
wint_t wt;
|
||||
|
||||
printf("%lc", wt); // wide character
|
||||
}
|
||||
|
||||
// posix indexed format arguments
|
||||
printf("%2$i, %1$i", 1, 2); // '2, 1'
|
||||
printf("%2$i, %1$i", a, b);
|
||||
|
||||
printf("%2$02i %1$4.2f", 3.3333f, 6); // 06, 3.33
|
||||
{
|
||||
int width, num;
|
||||
|
||||
printf("%2$*1$d", width, num);
|
||||
printf("%2$0*1$d", width, num);
|
||||
}
|
||||
{
|
||||
int precision;
|
||||
float num;
|
||||
|
||||
printf("%2$.*1$f", precision, num);
|
||||
}
|
||||
|
||||
// %%
|
||||
{
|
||||
float num;
|
||||
|
||||
printf("#");
|
||||
printf("%%");
|
||||
printf("%%%%");
|
||||
printf("%%%f", num);
|
||||
printf("%%%%%f", num);
|
||||
printf("%4.2f%%", num);
|
||||
printf("%%%f%%", num);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user