diff options
Diffstat (limited to 'libc/bionic/__vsprintf_chk.cpp')
-rw-r--r-- | libc/bionic/__vsprintf_chk.cpp | 43 |
1 files changed, 14 insertions, 29 deletions
diff --git a/libc/bionic/__vsprintf_chk.cpp b/libc/bionic/__vsprintf_chk.cpp index 3810694f0..feb6e6831 100644 --- a/libc/bionic/__vsprintf_chk.cpp +++ b/libc/bionic/__vsprintf_chk.cpp @@ -42,20 +42,13 @@ * This vsprintf check is called if _FORTIFY_SOURCE is defined and * greater than 0. */ -extern "C" int __vsprintf_chk( - char *dest, - int /*flags*/, - size_t dest_len_from_compiler, - const char *format, - va_list va) -{ - int ret = vsnprintf(dest, dest_len_from_compiler, format, va); - - if ((size_t) ret >= dest_len_from_compiler) { - __fortify_chk_fail("vsprintf prevented write past end of buffer", 0); - } - - return ret; +extern "C" int __vsprintf_chk(char* dest, int /*flags*/, + size_t dest_len_from_compiler, const char* format, va_list va) { + int result = vsnprintf(dest, dest_len_from_compiler, format, va); + if ((size_t) result >= dest_len_from_compiler) { + __fortify_chk_fail("vsprintf: prevented write past end of buffer", 0); + } + return result; } /* @@ -69,19 +62,11 @@ extern "C" int __vsprintf_chk( * This sprintf check is called if _FORTIFY_SOURCE is defined and * greater than 0. */ -extern "C" int __sprintf_chk( - char *dest, - int flags, - size_t dest_len_from_compiler, - const char *format, ...) -{ - va_list va; - int retval; - - va_start(va, format); - retval = __vsprintf_chk(dest, flags, - dest_len_from_compiler, format, va); - va_end(va); - - return retval; +extern "C" int __sprintf_chk(char* dest, int flags, + size_t dest_len_from_compiler, const char* format, ...) { + va_list va; + va_start(va, format); + int result = __vsprintf_chk(dest, flags, dest_len_from_compiler, format, va); + va_end(va); + return result; } |