From 95f63b308458f6459bf9b04142a68a8b01cdd902 Mon Sep 17 00:00:00 2001 From: sin Date: Tue, 3 Mar 2015 20:36:35 +0000 Subject: [PATCH] Add mbstowcs() check --- include/wchar.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/include/wchar.h b/include/wchar.h index ac4441b..20630ac 100644 --- a/include/wchar.h +++ b/include/wchar.h @@ -40,6 +40,17 @@ __fortify_mbsrtowcs(wchar_t *d, const char **s, return mbsrtowcs(d, s, wn, st); } +static inline __attribute__ ((always_inline)) +size_t +__fortify_mbstowcs(wchar_t *d, const char *s, size_t wn) +{ + size_t bos = __builtin_object_size(d, 0); + + if (wn > bos / sizeof(wchar_t)) + __builtin_trap(); + return mbstowcs(d, s, wn); +} + static inline __attribute__ ((always_inline)) wchar_t * __fortify_wmemcpy(wchar_t *d, const wchar_t *s, size_t n) @@ -79,6 +90,8 @@ __fortify_wmemset(wchar_t *s, wchar_t c, size_t n) #define mbsnrtowcs(d, s, n, wn, st) __fortify_mbsnrtowcs(d, s, n, wn, st) #undef mbsrtowcs #define mbsrtowcs(d, s, wn, st) __fortify_mbsrtowcs(d, s, wn, st) +#undef mbstowcs +#define mbstowcs(d, s, wn) __fortify_mbstowcs(d, s, wn) #undef wmemcpy #define wmemcpy(d, s, n) __fortify_wmemcpy(d, s, n) #undef wmemmove