diff options
| author | sin | 2015-03-04 12:42:55 +0000 |
|---|---|---|
| committer | sin | 2015-03-04 12:42:55 +0000 |
| commit | ce3377dbb20b5ff41349b195d2a3c21317012c98 (patch) | |
| tree | 66d6c8f51e9abaca67b1892001063b73808f6410 /include/wchar.h | |
| parent | a28cd72ce6fa6f5619f0952a9569f046a13770d2 (diff) | |
Add wcsncat() and wcsncpy() checks
Diffstat (limited to 'include/wchar.h')
| -rw-r--r-- | include/wchar.h | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/include/wchar.h b/include/wchar.h index 69c2188..2f405b9 100644 --- a/include/wchar.h +++ b/include/wchar.h | |||
| @@ -87,6 +87,35 @@ __fortify_wcscpy(wchar_t *d, const wchar_t *s) | |||
| 87 | 87 | ||
| 88 | static inline __attribute__ ((always_inline)) | 88 | static inline __attribute__ ((always_inline)) |
| 89 | wchar_t * | 89 | wchar_t * |
| 90 | __fortify_wcsncat(wchar_t *d, const wchar_t *s, size_t n) | ||
| 91 | { | ||
| 92 | size_t bos = __builtin_object_size(d, 0); | ||
| 93 | size_t slen, dlen; | ||
| 94 | |||
| 95 | if (n > bos / sizeof(wchar_t)) { | ||
| 96 | slen = wcslen(s); | ||
| 97 | dlen = wcslen(d); | ||
| 98 | if (slen > n) | ||
| 99 | slen = n; | ||
| 100 | if (slen + dlen + 1 > bos / sizeof(wchar_t)) | ||
| 101 | __builtin_trap(); | ||
| 102 | } | ||
| 103 | return wcsncat(d, s, n); | ||
| 104 | } | ||
| 105 | |||
| 106 | static inline __attribute__ ((always_inline)) | ||
| 107 | wchar_t * | ||
| 108 | __fortify_wcsncpy(wchar_t *d, const wchar_t *s, size_t n) | ||
| 109 | { | ||
| 110 | size_t bos = __builtin_object_size(d, 0); | ||
| 111 | |||
| 112 | if (n > bos / sizeof(wchar_t)) | ||
| 113 | __builtin_trap(); | ||
| 114 | return wcsncpy(d, s, n); | ||
| 115 | } | ||
| 116 | |||
| 117 | static inline __attribute__ ((always_inline)) | ||
| 118 | wchar_t * | ||
| 90 | __fortify_wmemcpy(wchar_t *d, const wchar_t *s, size_t n) | 119 | __fortify_wmemcpy(wchar_t *d, const wchar_t *s, size_t n) |
| 91 | { | 120 | { |
| 92 | size_t bos = __builtin_object_size(d, 0); | 121 | size_t bos = __builtin_object_size(d, 0); |
| @@ -132,6 +161,10 @@ __fortify_wmemset(wchar_t *s, wchar_t c, size_t n) | |||
| 132 | #define wcscat(d, s) __fortify_wcscat(d, s) | 161 | #define wcscat(d, s) __fortify_wcscat(d, s) |
| 133 | #undef wcscpy | 162 | #undef wcscpy |
| 134 | #define wcscpy(d, s) __fortify_wcscpy(d, s) | 163 | #define wcscpy(d, s) __fortify_wcscpy(d, s) |
| 164 | #undef wcsncat | ||
| 165 | #define wcsncat(d, s, n) __fortify_wcsncat(d, s, n) | ||
| 166 | #undef wcsncpy | ||
| 167 | #define wcsncpy(d, s, n) __fortify_wcsncpy(d, s, n) | ||
| 135 | #undef wmemcpy | 168 | #undef wmemcpy |
| 136 | #define wmemcpy(d, s, n) __fortify_wmemcpy(d, s, n) | 169 | #define wmemcpy(d, s, n) __fortify_wmemcpy(d, s, n) |
| 137 | #undef wmemmove | 170 | #undef wmemmove |
