111
|
1 /* Test whether buffer overflow warnings for __strncat_chk builtin
|
|
2 are emitted properly. */
|
|
3 /* { dg-do compile } */
|
|
4 /* { dg-options "-O2 -std=gnu99 -ftrack-macro-expansion=0" } */
|
|
5
|
|
6 extern void abort (void);
|
|
7
|
|
8 #include "../gcc.c-torture/execute/builtins/chk.h"
|
|
9
|
|
10 char buf1[20];
|
|
11 char *q;
|
|
12
|
|
13 void
|
|
14 test (int arg, ...)
|
|
15 {
|
|
16 char *p = &buf1[10];
|
|
17
|
|
18 *p = 0;
|
|
19 strncat (p, "abcdefg", 9);
|
|
20 *p = 0;
|
|
21 strncat (p, "abcdefghi", 9);
|
|
22 *p = 0;
|
|
23 strncat (p, "abcdefghij", 9);
|
|
24 *p = 0;
|
|
25 strncat (p, "abcdefghi", 10);
|
|
26 *p = 0;
|
|
27 strncat (p, "abcdefghij", 10); /* { dg-warning "writing 11 bytes into a region of size 10 overflows the destination" } */
|
|
28 *p = 0;
|
|
29 strncat (p, "abcdefgh", 11);
|
|
30 *p = 0;
|
|
31 strncat (p, "abcdefghijkl", 11); /* { dg-warning "specified bound 11 exceeds destination size 10" } */
|
|
32 *p = 0;
|
|
33 strncat (p, q, 9);
|
|
34 *p = 0;
|
|
35 strncat (p, q, 10); /* { dg-warning "specified bound 10 equals destination size" } */
|
|
36 *p = 0;
|
|
37 strncat (p, q, 11); /* { dg-warning "specified bound 11 exceeds destination size 10" } */
|
|
38 }
|