summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/string.h17
1 files changed, 17 insertions, 0 deletions
diff --git a/include/string.h b/include/string.h
index d1bbac2..7e690c1 100644
--- a/include/string.h
+++ b/include/string.h
@@ -102,6 +102,18 @@ char *__fortify_strncpy(char *__restrict dest, const char *__restrict src, size_
102 return strncpy(dest, src, n); 102 return strncpy(dest, src, n);
103} 103}
104 104
105#if defined(_GNU_SOURCE)
106static inline __attribute__ ((always_inline))
107void *__fortify_mempcpy(void *__restrict dest, const void *__restrict src, size_t n)
108{
109 size_t bos = __builtin_object_size(dest, 0);
110
111 if (n > bos)
112 __builtin_trap();
113 return mempcpy(dest, src, n);
114}
115#endif
116
105#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) 117#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
106static inline __attribute__ ((always_inline)) 118static inline __attribute__ ((always_inline))
107size_t __fortify_strlcat(char *__restrict dest, const char *__restrict src, size_t n) 119size_t __fortify_strlcat(char *__restrict dest, const char *__restrict src, size_t n)
@@ -143,6 +155,11 @@ size_t __fortify_strlcpy(char *__restrict dest, const char *__restrict src, size
143#undef strncpy 155#undef strncpy
144#define strncpy(dest, src, n) __fortify_strcpy(dest, src, n) 156#define strncpy(dest, src, n) __fortify_strcpy(dest, src, n)
145 157
158#if defined(_GNU_SOURCE)
159#undef mempcpy
160#define mempcpy(dest, src, n) __fortify_mempcpy(dest, src, n)
161#endif
162
146#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) 163#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
147#undef strlcat 164#undef strlcat
148#define strlcat(dest, src, n) __fortify_strlcat(dest, src, n) 165#define strlcat(dest, src, n) __fortify_strlcat(dest, src, n)