diff --git a/include/boost/json/impl/array.ipp b/include/boost/json/impl/array.ipp index 61b451dc..6df6cf97 100644 --- a/include/boost/json/impl/array.ipp +++ b/include/boost/json/impl/array.ipp @@ -621,7 +621,7 @@ reserve_impl(size_type capacity) // 2x growth auto const hint = impl_.capacity * 2; #endif - if(hint < impl_.capacity) + if(hint < impl_.capacity) // overflow capacity = max_size(); else if(capacity < hint) capacity = hint; diff --git a/test/array.cpp b/test/array.cpp index 139a9006..b5ac38fc 100644 --- a/test/array.cpp +++ b/test/array.cpp @@ -621,6 +621,16 @@ public: a.reserve(50); BEAST_EXPECT(a.capacity() >= 50); } + + fail_loop([&](storage_ptr const& sp) + { + array a(min_capacity_, 'c', sp); + a.reserve(a.capacity() + 1); + auto const new_cap = a.capacity(); + BEAST_EXPECT(new_cap > min_capacity_); + a.reserve((min_capacity_ + new_cap) / 2); + BEAST_EXPECT(a.capacity() == new_cap); + }); } // capacity()