Possible bug in fortified stpncpy

Zack Weinberg zackw@panix.com
Sat Aug 8 21:06:00 GMT 2015


GCC doesn't have a fortification builtin for stpncpy, so bits/string3.h has

__fortify_function char *
__NTH (stpncpy (char *__dest, const char *__src, size_t __n))
{
  if (__bos (__dest) != (size_t) -1
      && (!__builtin_constant_p (__n) || __n <= __bos (__dest)))
    return __stpncpy_chk (__dest, __src, __n, __bos (__dest));
  return __stpncpy_alias (__dest, __src, __n);
}

I think the last clause of the conditional,

    || __n <= __bos (__dest)

may be backward.  The code should call the runtime-checking function
if __n is not constant, or if __n is known to be LARGER than the size
of the destination.  Ne?

zw



More information about the Libc-alpha mailing list