From c013a0e8d6bb57247074c748a05bbe7f43bdec6f Mon Sep 17 00:00:00 2001 From: Marco Paland Date: Wed, 16 Jan 2019 10:44:13 +0100 Subject: [PATCH] fix(printf): fctprintf() must not append null terminator Fixes #39, references #19 --- printf.c | 6 ++++-- test/test_suite.cpp | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/printf.c b/printf.c index df88d3d7..c9a11755 100644 --- a/printf.c +++ b/printf.c @@ -134,8 +134,10 @@ static inline void _out_char(char character, void* buffer, size_t idx, size_t ma static inline void _out_fct(char character, void* buffer, size_t idx, size_t maxlen) { (void)idx; (void)maxlen; - // buffer is the output fct pointer - ((out_fct_wrap_type*)buffer)->fct(character, ((out_fct_wrap_type*)buffer)->arg); + if (character) { + // buffer is the output fct pointer + ((out_fct_wrap_type*)buffer)->fct(character, ((out_fct_wrap_type*)buffer)->arg); + } } diff --git a/test/test_suite.cpp b/test/test_suite.cpp index bcddd4fc..100b59f9 100644 --- a/test/test_suite.cpp +++ b/test/test_suite.cpp @@ -69,7 +69,8 @@ TEST_CASE("fctprintf", "[]" ) { printf_idx = 0U; memset(printf_buffer, 0xCC, 100U); test::fctprintf(&_out_fct, nullptr, "This is a test of %X", 0x12EFU); - REQUIRE(!strcmp(printf_buffer, "This is a test of 12EF")); + REQUIRE(!strncmp(printf_buffer, "This is a test of 12EF", 22U)); + REQUIRE(printf_buffer[22] == (char)0xCC); }