1 // RUN: %clang_dfsan %s -o %t && %run %t
2
3 #include <assert.h>
4 #include <stdio.h>
5
main(int argc,char * argv[])6 int main(int argc, char *argv[]) {
7 {
8 char buf[256] = "10000000000-100000000000 rw-p 00000000 00:00 0";
9 long rss = 0;
10 // This test exposes a bug in DFSan's sscanf, that leads to flakiness
11 // in release_shadow_space.c (see
12 // https://github.com/llvm/llvm-project/issues/91287)
13 int r = sscanf(buf, "Garbage text before, %ld, Garbage text after", &rss);
14 assert(r == 0);
15 }
16
17 // Testing other variations of sscanf behavior.
18 {
19 int a = 0;
20 int b = 0;
21 int r = sscanf("abc42 cat 99", "abc%d cat %d", &a, &b);
22 assert(a == 42);
23 assert(b == 99);
24 assert(r == 2);
25 }
26
27 {
28 int a = 0;
29 int b = 0;
30 int r = sscanf("abc42 cat 99", "abc%d dog %d", &a, &b);
31 assert(a == 42);
32 assert(r == 1);
33 }
34
35 {
36 int a = 0;
37 int b = 0;
38 int r = sscanf("abx42 dog 99", "abc%d dog %d", &a, &b);
39 assert(r == 0);
40 }
41
42 {
43 int r = sscanf("abx", "abc");
44 assert(r == 0);
45 }
46
47 {
48 int r = sscanf("abc", "abc");
49 assert(r == 0);
50 }
51
52 {
53 int n = 0;
54 int r = sscanf("abc", "abc%n", &n);
55 assert(n == 3);
56 assert(r == 0);
57 }
58
59 {
60 int n = 1234;
61 int r = sscanf("abxy", "abcd%n", &n);
62 assert(n == 1234);
63 assert(r == 0);
64 }
65
66 {
67 int a = 0;
68 int n = 1234;
69 int r = sscanf("abcd99", "abcd%d%n", &a, &n);
70 assert(a == 99);
71 assert(n == 6);
72 assert(r == 1);
73 }
74
75 {
76 int n = 1234;
77 int r = sscanf("abcdsuffix", "abcd%n", &n);
78 assert(n == 4);
79 assert(r == 0);
80 }
81
82 {
83 int n = 1234;
84 int r = sscanf("abxxsuffix", "abcd%n", &n);
85 assert(n == 1234);
86 assert(r == 0);
87 }
88
89 {
90 int a = 0;
91 int b = 0;
92 int n = 1234;
93 int r = sscanf("abcd99 xy100", "abcd%d xy%d%n", &a, &b, &n);
94 assert(a == 99);
95 assert(b == 100);
96 assert(n == 12);
97 assert(r == 2);
98 }
99
100 {
101 int a = 0;
102 int b = 0;
103 int n = 1234;
104 int r = sscanf("abcd99 xy100", "abcd%d zz%d%n", &a, &b, &n);
105 assert(a == 99);
106 assert(b == 0);
107 assert(n == 1234);
108 assert(r == 1);
109 }
110
111 return 0;
112 }
113