diff options
| author | Stefan Boberg <[email protected]> | 2021-05-13 12:51:43 +0200 |
|---|---|---|
| committer | Stefan Boberg <[email protected]> | 2021-05-13 12:51:43 +0200 |
| commit | 99bc8dae81b469ce0a9907e94ab47c16ef8c0539 (patch) | |
| tree | 4073f0d436d3675d3375d23c0c4a532ff91ed46f /zencore/sharedbuffer.cpp | |
| parent | CbWriter::Save now returns an immutable payload buffer (diff) | |
| download | zen-99bc8dae81b469ce0a9907e94ab47c16ef8c0539.tar.xz zen-99bc8dae81b469ce0a9907e94ab47c16ef8c0539.zip | |
SharedBuffer::MakeView now validates range against outer
Diffstat (limited to 'zencore/sharedbuffer.cpp')
| -rw-r--r-- | zencore/sharedbuffer.cpp | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/zencore/sharedbuffer.cpp b/zencore/sharedbuffer.cpp index db6deff38..bbbaa0b24 100644 --- a/zencore/sharedbuffer.cpp +++ b/zencore/sharedbuffer.cpp @@ -49,7 +49,7 @@ SharedBuffer::MakeOwned() const uint64_t Size = m_Buffer->DataBytes(); void* Buffer = Memory::Alloc(Size, 16); - auto NewOwner = new IoBufferCore(Buffer, Size); + IoBufferCore* NewOwner = new IoBufferCore(Buffer, Size); NewOwner->SetIsOwnedByThis(true); memcpy(Buffer, m_Buffer->DataPointer(), Size); @@ -60,9 +60,14 @@ SharedBuffer::MakeOwned() SharedBuffer SharedBuffer::MakeView(MemoryView View, SharedBuffer OuterBuffer) { - // Todo: verify that view is within the shared buffer - - return SharedBuffer(new IoBufferCore(OuterBuffer.m_Buffer, const_cast<void*>(View.GetData()), View.GetSize())); + if (OuterBuffer) + { + ZEN_ASSERT(OuterBuffer.GetView().Contains(View)); + } + + IoBufferCore* NewCore = new IoBufferCore(OuterBuffer.m_Buffer, View.GetData(), View.GetSize()); + NewCore->SetIsImmutable(true); + return SharedBuffer(NewCore); } SharedBuffer |