blob: 469e6a817d0d7cd8ebbb55ba380c7c1637b1e4f7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
/* See e.g. https://en.cppreference.com/w/c/string/byte/strstr */
/* { dg-additional-options "-fpermissive" { target c++ } } */
#include "../../gcc.dg/analyzer/analyzer-decls.h"
extern char *strstr (const char* str, const char* substr);
char *
test_passthrough (const char* str, const char* substr)
{
return strstr (str, substr);
}
char *
test_NULL_str (const char *substr)
{
return strstr (NULL, substr); /* { dg-warning "use of NULL where non-null expected" } */
}
char *
test_unterminated_str (const char *substr)
{
char str[3] = "abc"; /* { dg-warning "initializer-string for '\[^\n\]*' is too long" "" { target c++ } } */
return strstr (str, substr); /* { dg-warning "stack-based buffer over-read" } */
/* { dg-message "while looking for null terminator for argument 1" "note" { target *-*-* } .-1 } */
}
char *
test_uninitialized_str (const char *substr)
{
char str[16];
return strstr (str, substr); /* { dg-warning "use of uninitialized value 'str\\\[0\\\]'" } */
}
char *
test_NULL_substr (const char *str)
{
return strstr (str, NULL); /* { dg-warning "use of NULL where non-null expected" } */
}
char *
test_unterminated_substr (const char *str)
{
char substr[3] = "abc"; /* { dg-warning "initializer-string for '\[^\n\]*' is too long" "" { target c++ } } */
return strstr (str, substr); /* { dg-warning "stack-based buffer over-read" } */
/* { dg-message "while looking for null terminator for argument 2" "note" { target *-*-* } .-1 } */
}
char *test_uninitialized_substr (const char *str)
{
char substr[16];
return strstr (str, substr); /* { dg-warning "use of uninitialized value 'substr\\\[0\\\]'" } */
}
|