fmt/fmt_test8_segfault.patch
2017-08-12 08:13:25 -06:00

39 lines
1.4 KiB
Diff

From 032c83807f95d83f2355f1c436909bb577b920bc Mon Sep 17 00:00:00 2001
From: Victor Zverovich <victor.zverovich@gmail.com>
Date: Thu, 10 Aug 2017 09:27:06 -0700
Subject: [PATCH] Fix a segfault in test on glibc 2.26 #551, take 2
NOTE: Added ::internal so it would apply - DLJ
---
test/util-test.cc | 17 +++++++++++++++--
1 file changed, 15 insertions(+), 2 deletions(-)
diff --git a/test/util-test.cc b/test/util-test.cc
index 6cef7e81..6617b857 100644
--- a/test/util-test.cc
+++ b/test/util-test.cc
@@ -837,8 +837,21 @@ TEST(UtilTest, FormatSystemError) {
fmt::internal::format_system_error(message, EDOM, "test");
EXPECT_EQ(fmt::format("test: {}", get_system_error(EDOM)), message.str());
message.clear();
- fmt::internal::format_system_error(
- message, EDOM, fmt::StringRef(0, std::numeric_limits<size_t>::max()));
+
+ // Check if std::allocator throws on allocating max size_t / 2 chars.
+ size_t max_size = std::numeric_limits<size_t>::max() / 2;
+ bool throws_on_alloc = false;
+ try {
+ std::allocator<char> alloc;
+ alloc.deallocate(alloc.allocate(max_size), max_size);
+ } catch (std::bad_alloc) {
+ throws_on_alloc = true;
+ }
+ if (!throws_on_alloc) {
+ fmt::print("warning: std::allocator allocates {} chars", max_size);
+ return;
+ }
+ fmt::internal::format_system_error(message, EDOM, fmt::StringRef(0, max_size));
EXPECT_EQ(fmt::format("error {}", EDOM), message.str());
}