diff options
| author | sin | 2015-03-04 13:12:58 +0000 |
|---|---|---|
| committer | sin | 2015-03-04 13:12:58 +0000 |
| commit | 3d237352de2832b07b2f61349cf618f5880a1e7b (patch) | |
| tree | 775f10d72b2b82f5749b67af92f6c4d0e1e83eb9 | |
| parent | 911f402e9479c16a567adcf36711517732683f3d (diff) | |
Add wctomb() check
| -rw-r--r-- | include/wchar.h | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/include/wchar.h b/include/wchar.h index 07ab119..4d329a8 100644 --- a/include/wchar.h +++ b/include/wchar.h | |||
| @@ -150,6 +150,17 @@ __fortify_wcstombs(char *s, const wchar_t *ws, size_t n) | |||
| 150 | } | 150 | } |
| 151 | 151 | ||
| 152 | static inline __attribute__ ((always_inline)) | 152 | static inline __attribute__ ((always_inline)) |
| 153 | int | ||
| 154 | __fortify_wctomb(char *s, wchar_t wc) | ||
| 155 | { | ||
| 156 | size_t bos = __builtin_object_size(s, 0); | ||
| 157 | |||
| 158 | if (MB_CUR_MAX > bos) | ||
| 159 | __builtin_trap(); | ||
| 160 | return wctomb(s, wc); | ||
| 161 | } | ||
| 162 | |||
| 163 | static inline __attribute__ ((always_inline)) | ||
| 153 | wchar_t * | 164 | wchar_t * |
| 154 | __fortify_wmemcpy(wchar_t *d, const wchar_t *s, size_t n) | 165 | __fortify_wmemcpy(wchar_t *d, const wchar_t *s, size_t n) |
| 155 | { | 166 | { |
| @@ -206,6 +217,8 @@ __fortify_wmemset(wchar_t *s, wchar_t c, size_t n) | |||
| 206 | #define wcsrtombs(d, s, n, st) __fortify_wcsrtombs(d, s, n, st) | 217 | #define wcsrtombs(d, s, n, st) __fortify_wcsrtombs(d, s, n, st) |
| 207 | #undef wcstombs | 218 | #undef wcstombs |
| 208 | #define wcstombs(s, ws, n) __fortify_wcstombs(s, ws, n) | 219 | #define wcstombs(s, ws, n) __fortify_wcstombs(s, ws, n) |
| 220 | #undef wctomb | ||
| 221 | #define wctomb(s, wc) __fortify_wctomb(s, wc) | ||
| 209 | #undef wmemcpy | 222 | #undef wmemcpy |
| 210 | #define wmemcpy(d, s, n) __fortify_wmemcpy(d, s, n) | 223 | #define wmemcpy(d, s, n) __fortify_wmemcpy(d, s, n) |
| 211 | #undef wmemmove | 224 | #undef wmemmove |
