From 032c83807f95d83f2355f1c436909bb577b920bc Mon Sep 17 00:00:00 2001 From: Victor Zverovich Date: Thu, 10 Aug 2017 09:27:06 -0700 Subject: [PATCH] Fix a segfault in test on glibc 2.26 #551, take 2 --- 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::format_system_error(message, EDOM, "test"); EXPECT_EQ(fmt::format("test: {}", get_system_error(EDOM)), message.str()); message.clear(); - fmt::format_system_error( - message, EDOM, fmt::StringRef(0, std::numeric_limits::max())); + + // Check if std::allocator throws on allocating max size_t / 2 chars. + size_t max_size = std::numeric_limits::max() / 2; + bool throws_on_alloc = false; + try { + std::allocator 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::format_system_error(message, EDOM, fmt::StringRef(0, max_size)); EXPECT_EQ(fmt::format("error {}", EDOM), message.str()); }