* commit '4691325d48406033632fe84a944ac9c3bd2e5097': Wrap sprintf()/snprintf() macros to prevent expansion errors.
This commit is contained in:
commit
8161b23689
2 changed files with 22 additions and 2 deletions
|
@ -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)
|
||||
|
|
|
@ -825,3 +825,21 @@ TEST(TEST_NAME, memcpy_chk_max_int_size) {
|
|||
ASSERT_EQ('8', buf[8]);
|
||||
ASSERT_EQ('\0', buf[9]);
|
||||
}
|
||||
|
||||
// Verify that macro expansion is done properly for sprintf/snprintf (which
|
||||
// are defined as macros in stdio.h under clang).
|
||||
#define CONTENTS "macro expansion"
|
||||
#define BUF_AND_SIZE(A) A, sizeof(A)
|
||||
#define BUF_AND_CONTENTS(A) A, CONTENTS
|
||||
#define BUF_AND_SIZE_AND_CONTENTS(A) A, sizeof(A), CONTENTS
|
||||
TEST(TEST_NAME, s_n_printf_macro_expansion) {
|
||||
char buf[BUFSIZ];
|
||||
snprintf(BUF_AND_SIZE(buf), CONTENTS);
|
||||
EXPECT_STREQ(CONTENTS, buf);
|
||||
|
||||
snprintf(BUF_AND_SIZE_AND_CONTENTS(buf));
|
||||
EXPECT_STREQ(CONTENTS, buf);
|
||||
|
||||
sprintf(BUF_AND_CONTENTS(buf));
|
||||
EXPECT_STREQ(CONTENTS, buf);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue