39 lines
1.4 KiB
Diff
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());
|
|
}
|
|
|