aboutsummaryrefslogtreecommitdiff
path: root/zencore/sharedbuffer.cpp
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2021-05-13 12:51:43 +0200
committerStefan Boberg <[email protected]>2021-05-13 12:51:43 +0200
commit99bc8dae81b469ce0a9907e94ab47c16ef8c0539 (patch)
tree4073f0d436d3675d3375d23c0c4a532ff91ed46f /zencore/sharedbuffer.cpp
parentCbWriter::Save now returns an immutable payload buffer (diff)
downloadzen-99bc8dae81b469ce0a9907e94ab47c16ef8c0539.tar.xz
zen-99bc8dae81b469ce0a9907e94ab47c16ef8c0539.zip
SharedBuffer::MakeView now validates range against outer
Diffstat (limited to 'zencore/sharedbuffer.cpp')
-rw-r--r--zencore/sharedbuffer.cpp13
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