mirror of
https://github.com/nlohmann/json.git
synced 2026-09-01 05:57:14 +00:00
Assert the destination buffer size in get_bytes
get_elements() only receives a raw pointer and cannot know the size of its destination, so the destination-size guarantee is asserted at the caller that owns the buffer: after resizing `result`, assert it has room for `wanted` bytes at `old_size`. Together with the `copied <= wanted` assert at the memcpy, this makes the "destination is large enough" invariant explicit on both sides of the call. Signed-off-by: Niels Lohmann <mail@nlohmann.me> Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
79a8c279c0
commit
0c8ec0a2fc
@@ -13176,6 +13176,9 @@ class binary_reader
|
||||
: chunk_size;
|
||||
const std::size_t old_size = result.size();
|
||||
result.resize(old_size + wanted);
|
||||
// the destination now has room for `wanted` bytes at offset
|
||||
// old_size, which is what get_elements() is allowed to write
|
||||
JSON_ASSERT(result.size() >= old_size + wanted);
|
||||
const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
|
||||
chars_read += bytes_read;
|
||||
if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
|
||||
|
||||
Reference in New Issue
Block a user