From 7d01859ef16e6b65bc023ad8bebfedecb088bf81 Mon Sep 17 00:00:00 2001 From: Victor Zverovich Date: Wed, 8 Apr 2020 12:32:34 -0700 Subject: [PATCH] Fix handling of unsigned char strings in printf --- include/fmt/core.h | 8 ++++++++ test/printf-test.cc | 6 ++++++ 2 files changed, 14 insertions(+) diff --git a/include/fmt/core.h b/include/fmt/core.h index 6df2875ac..dc10722bf 100644 --- a/include/fmt/core.h +++ b/include/fmt/core.h @@ -972,6 +972,14 @@ template struct arg_mapper { static_assert(std::is_same::value, "invalid string type"); return reinterpret_cast(val); } + FMT_CONSTEXPR const char* map(signed char* val) { + const auto* const_val = val; + return map(const_val); + } + FMT_CONSTEXPR const char* map(unsigned char* val) { + const auto* const_val = val; + return map(const_val); + } FMT_CONSTEXPR const void* map(void* val) { return val; } FMT_CONSTEXPR const void* map(const void* val) { return val; } diff --git a/test/printf-test.cc b/test/printf-test.cc index 5aaa27b13..545e02aab 100644 --- a/test/printf-test.cc +++ b/test/printf-test.cc @@ -447,6 +447,12 @@ TEST(PrintfTest, String) { EXPECT_PRINTF(L" (null)", L"%10s", null_wstr); } +TEST(PrintfTest, UCharString) { + unsigned char str[] = "test"; + unsigned char* pstr = str; + EXPECT_EQ("test", fmt::sprintf("%s", pstr)); +} + TEST(PrintfTest, Pointer) { int n; void* p = &n;