Wrap sprintf()/snprintf() macros to prevent expansion errors.
Previously, FORTIFY_SOURCE used single macros to define these standard functions for use with clang. This can cause conflicts with other macros used to call these functions, particularly when those macros expand the number of arguments to the function. This change wraps our macro definitions, so that expansion properly takes place for programmer arguments first. Change-Id: I55929b1fd2a643b9d14a17631c4bcab3b0b712cf
This commit is contained in:
@@ -469,7 +469,8 @@ int vsprintf(char *dest, const char *format, __va_list ap)
|
||||
}
|
||||
|
||||
#if defined(__clang__)
|
||||
#define snprintf(dest, size, ...) __builtin___snprintf_chk(dest, size, 0, __bos(dest), __VA_ARGS__)
|
||||
#define __wrap_snprintf(dest, size, ...) __builtin___snprintf_chk(dest, size, 0, __bos(dest), __VA_ARGS__)
|
||||
#define snprintf(...) __wrap_snprintf(__VA_ARGS__)
|
||||
#else
|
||||
__BIONIC_FORTIFY_INLINE
|
||||
__printflike(3, 4)
|
||||
@@ -481,7 +482,8 @@ int snprintf(char *dest, size_t size, const char *format, ...)
|
||||
#endif
|
||||
|
||||
#if defined(__clang__)
|
||||
#define sprintf(dest, ...) __builtin___sprintf_chk(dest, 0, __bos(dest), __VA_ARGS__)
|
||||
#define __wrap_sprintf(dest, ...) __builtin___sprintf_chk(dest, 0, __bos(dest), __VA_ARGS__)
|
||||
#define sprintf(...) __wrap_sprintf(__VA_ARGS__)
|
||||
#else
|
||||
__BIONIC_FORTIFY_INLINE
|
||||
__printflike(2, 3)
|
||||
|
Reference in New Issue
Block a user