From 0826c593bee3c68261318decc5475e45c4b030ec Mon Sep 17 00:00:00 2001 From: sin Date: Sun, 1 Mar 2015 11:09:13 +0000 Subject: [PATCH] Add sprintf() check --- include/stdio.h | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) 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) size_t bos = __builtin_object_size(s, 0); \ if (_n > bos) \ __builtin_trap(); \ - snprintf(s, _n, fmt, ## __VA_ARGS__); \ + (snprintf)(s, _n, fmt, ## __VA_ARGS__); \ +}) + +#undef sprintf +#define sprintf(s, fmt, ...) ({ \ + size_t bos = __builtin_object_size(s, 0); \ + int r; \ + if (bos != -1) { \ + r = (snprintf)(s, bos, fmt, ## __VA_ARGS__); \ + if (r == -1 || r >= bos) \ + __builtin_trap(); \ + } else { \ + r = (sprintf)(s, fmt, ## __VA_ARGS__); \ + } \ + r; \ }) #endif