Trap if memcpy() pointers are overlapping

Maybe this should only be done if _FORTIFY_SOURCE > 1.
Этот коммит содержится в:
sin 2015-01-29 10:47:54 +00:00
родитель 52d4c97980
Коммит 1e306fd642

Просмотреть файл

@ -10,7 +10,13 @@ void *
__fortify_memcpy(void *__restrict dest, const void *__restrict src, size_t n)
{
size_t bos = __builtin_object_size(dest, 0);
char *d = dest;
const char *s = src;
/* trap if pointers are overlapping */
if ((d <= s && d + n > s) ||
(s <= d && s + n > d))
__builtin_trap();
if (n > bos)
__builtin_trap();
return memcpy(dest, src, n);