summaryrefslogtreecommitdiff
path: root/modules/core/c++
diff options
context:
space:
mode:
Diffstat (limited to 'modules/core/c++')
-rw-r--r--modules/core/c++/buffer.cpp11
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();
}