diff options
Diffstat (limited to 'modules/core/c++')
-rw-r--r-- | modules/core/c++/buffer.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/modules/core/c++/buffer.cpp b/modules/core/c++/buffer.cpp index 3793226..12df1ab 100644 --- a/modules/core/c++/buffer.cpp +++ b/modules/core/c++/buffer.cpp @@ -427,8 +427,17 @@ const uint8_t &array_buffer::write(size_t i) const { } error array_buffer::write_require_length(size_t bytes) { size_t write_remain = write_composite_length(); + if (bytes > write_remain) { - return make_error<err::buffer_exhausted>(); + + uint64_t resize_that_much = bytes - write_remain; + uint64_t resize_to_that_size = resize_that_much + buffer_.size(); + + try { + buffer_.resize(resize_to_that_size); + }catch(const std::exception&e){ + return make_error<err::out_of_memory>(); + } } return no_error(); } |