https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82652
Bug ID: 82652
Summary: missing -Wstringop-overflow on strncpy with
-fcheck-pointer-bounds
Product: gcc
Version: 8.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: middle-end
Assignee: unassigned at gcc dot gnu.org
Reporter: msebor at gcc dot gnu.org
Target Milestone: ---
When compiling without -fcheck-pointer-bounds the buffer overflow in all of the
calls below are diagnosed. But when using -fcheck-pointer-bounds -mmpx none of
them is.
$ cat a.c && gcc -O2 -S -Wall -fcheck-pointer-bounds -mmpx a.c
extern char* stpncpy (char*, const char*, __SIZE_TYPE__);
extern char* strncpy (char*, const char*, __SIZE_TYPE__);
#define S "01234567"
char a[4];
char* f0 (void)
{
return strncpy (a, S, sizeof S); // missing -Wstringop-overflow
}
char* f1 (void)
{
char b[sizeof S];
__builtin_strcpy (b, S);
return strncpy (a, b, sizeof b); // missing -Wstringop-overflow
}
char* g0 (void)
{
return stpncpy (a, S, sizeof S); // missing -Wstringop-overflow
}
char* g1 (void)
{
char b[sizeof S];
__builtin_strcpy (b, S);
return stpncpy (a, b, sizeof b); // missing -Wstringop-overflow
}
The expected output is something like this (from the trunk of GCC 8.0; GCC 7.2
only diagnoses f0 and f1):
a.c: In function ‘f0’:
a.c:10:10: warning: ‘__builtin_memcpy’ writing 9 bytes into a region of size 4
overflows the destination [-Wstringop-overflow=]
return strncpy (a, S, sizeof S);
^~~~~~~~~~~~~~~~~~~~~~~~
a.c: In function ‘f1’:
a.c:18:10: warning: ‘strncpy’ writing 9 bytes into a region of size 4 overflows
the destination [-Wstringop-overflow=]
return strncpy (a, b, sizeof b);
^~~~~~~~~~~~~~~~~~~~~~~~
a.c: In function ‘g0’:
a.c:23:10: warning: ‘stpncpy’ writing 9 bytes into a region of size 4 overflows
the destination [-Wstringop-overflow=]
return stpncpy (a, S, sizeof S);
^~~~~~~~~~~~~~~~~~~~~~~~
a.c: In function ‘g1’:
a.c:31:10: warning: ‘stpncpy’ writing 9 bytes into a region of size 4 overflows
the destination [-Wstringop-overflow=]
return stpncpy (a, b, sizeof b);
^~~~~~~~~~~~~~~~~~~~~~~~