From af7480d0190cb5dcf279a7ddfab320ff084a3471 Mon Sep 17 00:00:00 2001 From: jvoisin Date: Thu, 22 Jun 2023 17:58:58 +0200 Subject: Add tests for stpcpy --- include/string.h | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'include/string.h') diff --git a/include/string.h b/include/string.h index f416a51..f738901 100644 --- a/include/string.h +++ b/include/string.h @@ -85,9 +85,16 @@ __access(write_only, 1) __access(read_only, 2) _FORTIFY_FN(stpcpy) char *stpcpy(char *__d, const char *__s) { - size_t __b = __bos(__d, 0); + size_t __n = strlen(__s) + 1; - if (strlen(__s) + 1 > __b) + /* trap if pointers are overlapping but not if dst == src. + * gcc seems to like to generate code that relies on dst == src */ + if ((__d < __s && __d + __n > __s) || + (__s < __d && __s + __n > __d)) + __builtin_trap(); + + size_t __b = __bos(__d, 0); + if (__n > __b) __builtin_trap(); return __orig_stpcpy(__d, __s); } @@ -129,7 +136,7 @@ _FORTIFY_FN(strcpy) char *strcpy(char *__d, const char *__s) __builtin_trap(); size_t __b = __bos(__d, 0); - if (strlen(__s) + 1 > __b) + if (__n > __b) __builtin_trap(); return __orig_strcpy(__d, __s); } -- cgit v1.3