This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug tree-optimization/82456] New: missing -Wstringop-overflow on strcpy reading past the end of an array


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)
   ^~~~~~~~~~~~~~~~~~~~~~~~~~~

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]