This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/82456] New: missing -Wstringop-overflow on strcpy reading past the end of an array
- From: "msebor at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Fri, 06 Oct 2017 17:48:26 +0000
- Subject: [Bug tree-optimization/82456] New: missing -Wstringop-overflow on strcpy reading past the end of an array
- Auto-submitted: auto-generated
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82456
Bug ID: 82456
Summary: missing -Wstringop-overflow on strcpy reading past the
end of an array
Product: gcc
Version: 8.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: msebor at gcc dot gnu.org
Target Milestone: ---
The -Wstringop-overflow warning is supposed to detect not just writing but also
reading past the end of arrays. The following test case shows a number of
instances of the latter bug the warning fails to detect. (The missing
-Warray-bounds is discussed in bug 82455.)
$ cat z.c && gcc -O2 -S -Wall -Wextra z.c
void fcst (char *d)
{
char a[2] = "0";
__builtin_strcpy (d, a + 3); // -Warray-bounds (good)
// missing -Wstringop-overflow
}
void frng (char *d, int i)
{
char a[2] = "0";
if (i < 3)
i = 3;
__builtin_strcpy (d, a + i); // both warnings missing
// (array index out of bounds
// and reading past the end)
}
void gcst (char *d)
{
char a[2] = "0";
__builtin_strcpy (d, a + 2); // missing -Wstringop-overflow
// (reading past the end)
}
void grng (char *d, int i)
{
char a[2] = "0";
if (i < 2)
i = 2;
__builtin_strcpy (d, a + i); // missing -Wstringop-overflow
// (reading past the end)
}
z.c: In function ‘fcst’:
z.c:5:3: warning: array subscript is above array bounds [-Warray-bounds]
__builtin_strcpy (d, a + 3); // -Warray-bounds (good)
^~~~~~~~~~~~~~~~~~~~~~~~~~~