https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79234

            Bug ID: 79234
           Summary: warn on past the end reads by library functions
           Product: gcc
           Version: 7.0
            Status: UNCONFIRMED
          Severity: enhancement
          Priority: P3
         Component: middle-end
          Assignee: unassigned at gcc dot gnu.org
          Reporter: msebor at gcc dot gnu.org
  Target Milestone: ---

The -Wstringop-overflow option can detect calls to some standard library
functions that write past the end of a destination object, but it doesn't
detect calls that attempt to read beyond the end of an object.  As the
following test case shows, even though all three functions access memory beyond
the end of an object only the first one that writes past the end is diagnosed.

This is an enhancement request to add an option to also detect and diagnose
past the end reads.  The feature should be a straightforward extension of the
-Wstringop-overflow approach (though under it own option).

$ cat t.c && gcc  -O2 -S -Wall -Wextra -Wpedantic t.c
#include <string.h>

char a[5];

void f (size_t n)
{
  memcpy (a, "01234567", n < 7 ? 7 : n);
}

void g (void *d, size_t n)
{
  memcpy (d, a, n < 7 ? 7 : n);
}

int h (size_t n)
{
  return memcmp (a, "01234567", n < 7 ? 7 : n);
}

t.c: In function ‘f’:
t.c:7:3: warning: ‘memcpy’ writing between 7 and 18446744073709551615 bytes
into a region of size 5 overflows the destination [-Wstringop-overflow=]
   memcpy (a, "01234567", n < 7 ? 7 : n);
   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tmp$

Reply via email to