diff options
Diffstat (limited to 'include/stdio.h')
| -rw-r--r-- | include/stdio.h | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/include/stdio.h b/include/stdio.h index 1217a0f..41b09e1 100644 --- a/include/stdio.h +++ b/include/stdio.h | |||
| @@ -41,7 +41,21 @@ __fortify_vsnprintf(char *s, size_t n, const char *fmt, __builtin_va_list ap) | |||
| 41 | size_t bos = __builtin_object_size(s, 0); \ | 41 | size_t bos = __builtin_object_size(s, 0); \ |
| 42 | if (_n > bos) \ | 42 | if (_n > bos) \ |
| 43 | __builtin_trap(); \ | 43 | __builtin_trap(); \ |
| 44 | snprintf(s, _n, fmt, ## __VA_ARGS__); \ | 44 | (snprintf)(s, _n, fmt, ## __VA_ARGS__); \ |
| 45 | }) | ||
| 46 | |||
| 47 | #undef sprintf | ||
| 48 | #define sprintf(s, fmt, ...) ({ \ | ||
| 49 | size_t bos = __builtin_object_size(s, 0); \ | ||
| 50 | int r; \ | ||
| 51 | if (bos != -1) { \ | ||
| 52 | r = (snprintf)(s, bos, fmt, ## __VA_ARGS__); \ | ||
| 53 | if (r == -1 || r >= bos) \ | ||
| 54 | __builtin_trap(); \ | ||
| 55 | } else { \ | ||
| 56 | r = (sprintf)(s, fmt, ## __VA_ARGS__); \ | ||
| 57 | } \ | ||
| 58 | r; \ | ||
| 45 | }) | 59 | }) |
| 46 | 60 | ||
| 47 | #endif | 61 | #endif |
