Fix an overflow in format_to_n (#2029)

This commit is contained in:
Victor Zverovich 2020-11-18 06:43:47 -08:00
parent 6cdd1be93e
commit 2c734c9bca
2 changed files with 6 additions and 1 deletions

View File

@ -766,7 +766,7 @@ class fixed_buffer_traits {
explicit fixed_buffer_traits(size_t limit) : limit_(limit) {}
size_t count() const { return count_; }
size_t limit(size_t size) {
size_t n = limit_ - count_;
size_t n = limit_ > count_ ? limit_ - count_ : 0;
count_ += size;
return size < n ? size : n;
}

View File

@ -2031,6 +2031,11 @@ TEST(FormatTest, FormatToN) {
result = fmt::format_to_n(buffer, 4, "{}", "ABCDE");
EXPECT_EQ(5u, result.size);
EXPECT_EQ("ABCD", fmt::string_view(buffer, 4));
buffer[3] = 'x';
result = fmt::format_to_n(buffer, 3, "{}", std::string(1000, '*'));
EXPECT_EQ(1000u, result.size);
EXPECT_EQ("***x", fmt::string_view(buffer, 4));
}
TEST(FormatTest, WideFormatToN) {