Skip to content

Commit 8462844

Browse files
committed
EXP43-C: Add test cases
1 parent 741ab39 commit 8462844

File tree

1 file changed

+76
-0
lines changed
  • c/cert/test/rules/EXP43-C

1 file changed

+76
-0
lines changed

c/cert/test/rules/EXP43-C/test.c

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
#include <stddef.h>
2+
#include <string.h>
3+
4+
int *restrict g1;
5+
int *restrict g2;
6+
7+
void test_global_local() {
8+
int *restrict i1 = g1; // COMPLIANT
9+
int *restrict i2 = g2; // COMPLIANT
10+
int *restrict i3 = i2; // NON_COMPLIANT
11+
g1 = g2; // NON_COMPLIANT
12+
i1 = i2; // NON_COMPLIANT
13+
}
14+
15+
void copy(int *restrict p1, int *restrict p2, size_t s) {
16+
for (size_t i = 0; i < s; ++i) {
17+
p2[i] = p1[i];
18+
}
19+
}
20+
21+
void test_restrict_params() {
22+
int i1 = 1;
23+
int i2 = 2;
24+
copy(&i1, &i1, 1); // NON_COMPLIANT
25+
copy(&i1, &i2, 1); // COMPLIANT
26+
27+
int x[10];
28+
copy(x[0], x[1], 1); // COMPLIANT - non overlapping
29+
copy(x[0], x[1], 2); // NON_COMPLIANT - overlapping
30+
}
31+
32+
void test_strcpy() {
33+
char s1[] = "my test string";
34+
char s2[] = "my other string";
35+
strcpy(&s1, &s1 + 3); // NON_COMPLIANT
36+
strcpy(&s2, &s1); // COMPLIANT
37+
}
38+
39+
void test_strcpy_s() {
40+
char s1[] = "my test string";
41+
char s2[] = "my other string";
42+
strcpy_s(&s1, &s1 + 3); // NON_COMPLIANT
43+
strcpy_s(&s2, sizeof(s2), &s1); // COMPLIANT
44+
}
45+
46+
void test_memcpy() {
47+
char s1[] = "my test string";
48+
char s2[] = "my other string";
49+
memcpy(&s1, &s1 + 3, 5); // NON_COMPLIANT
50+
memcpy(&s2, &s1 + 3, 5); // COMPLIANT
51+
}
52+
53+
void test_memcpy_s() {
54+
char s1[] = "my test string";
55+
char s2[] = "my other string";
56+
memcpy_s(&s1, sizeof(s1), &s1 + 3, 5); // NON_COMPLIANT
57+
memcpy_s(&s2, sizeof(s2), &s1 + 3, 5); // COMPLIANT
58+
}
59+
60+
void test_memmove() {
61+
char s1[] = "my test string";
62+
char s2[] = "my other string";
63+
memmove(&s1, &s1 + 3, 5); // COMPLIANT
64+
memmove(&s2, &s1 + 3, 5); // COMPLIANT
65+
}
66+
67+
void test_scanf() {
68+
char s1[200] = "%10s";
69+
scanf(&s2, &s2 + 4); // NON_COMPLIANT
70+
}
71+
72+
// TODO also consider the following:
73+
// strncpy(), strncpy_s()
74+
// strcat(), strcat_s()
75+
// strncat(), strncat_s()
76+
// strtok_s()

0 commit comments

Comments
 (0)