fmt/7d01859ef16e6b65bc023ad8bebfedecb088bf81.patch

47 lines
1.4 KiB
Diff
Raw Normal View History

From 7d01859ef16e6b65bc023ad8bebfedecb088bf81 Mon Sep 17 00:00:00 2001
From: Victor Zverovich <viz@fb.com>
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 <typename Context> struct arg_mapper {
static_assert(std::is_same<char_type, char>::value, "invalid string type");
return reinterpret_cast<const char*>(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;