am 8161b236: am 4691325d: am abeafbd6: Merge "Wrap sprintf()/snprintf() macros to prevent expansion errors."
* commit '8161b236891de223b0ebe9b76db57147d50a20f5': Wrap sprintf()/snprintf() macros to prevent expansion errors.
This commit is contained in:
commit
29f0db2148
@ -469,7 +469,8 @@ int vsprintf(char *dest, const char *format, __va_list ap)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if defined(__clang__)
|
#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
|
#else
|
||||||
__BIONIC_FORTIFY_INLINE
|
__BIONIC_FORTIFY_INLINE
|
||||||
__printflike(3, 4)
|
__printflike(3, 4)
|
||||||
@ -481,7 +482,8 @@ int snprintf(char *dest, size_t size, const char *format, ...)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__clang__)
|
#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
|
#else
|
||||||
__BIONIC_FORTIFY_INLINE
|
__BIONIC_FORTIFY_INLINE
|
||||||
__printflike(2, 3)
|
__printflike(2, 3)
|
||||||
|
@ -825,3 +825,21 @@ TEST(TEST_NAME, memcpy_chk_max_int_size) {
|
|||||||
ASSERT_EQ('8', buf[8]);
|
ASSERT_EQ('8', buf[8]);
|
||||||
ASSERT_EQ('\0', buf[9]);
|
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…
x
Reference in New Issue
Block a user