Skip to content

Commit

Permalink
Fix an overflow in format_to_n (#2029)
Browse files Browse the repository at this point in the history
  • Loading branch information
vitaut committed Nov 18, 2020
1 parent 6cdd1be commit 2c734c9
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 1 deletion.
2 changes: 1 addition & 1 deletion include/fmt/core.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down
5 changes: 5 additions & 0 deletions test/format-test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down

0 comments on commit 2c734c9

Please sign in to comment.