diff --git a/src/ox/ptrarith/nodebuffer.hpp b/src/ox/ptrarith/nodebuffer.hpp index 5a795e6a3..798797f60 100644 --- a/src/ox/ptrarith/nodebuffer.hpp +++ b/src/ox/ptrarith/nodebuffer.hpp @@ -278,6 +278,7 @@ typename NodeBuffer::ItemPtr NodeBuffer::malloc(size m_header.bytesUsed += out.size(); } else { oxTrace("ox::ptrarith::NodeBuffer::malloc::fail") << "Unknown"; + return nullptr; } oxTrace("ox::ptrarith::NodeBuffer::malloc") << "Offset:" << out.offset(); return out; @@ -293,8 +294,8 @@ Error NodeBuffer::free(ItemPtr item) { auto next = this->next(item); if (prev.valid() && next.valid()) { if (next != item) { - prev->next = next.offset(); - next->prev = prev.offset(); + prev->next = next; + next->prev = prev; if (item.offset() == m_header.firstItem) { m_header.firstItem = next; } @@ -319,8 +320,11 @@ Error NodeBuffer::free(ItemPtr item) { template Error NodeBuffer::setSize(size_t size) { + oxTrace("ox::ptrarith::NodeBuffer::setSize") << size; auto last = lastItem(); - if ((last.valid() && last.end() >= size) || size < sizeof(m_header)) { + auto end = last.valid() ? last.end() : sizeof(m_header); + oxTrace("ox::ptrarith::NodeBuffer::setSize") << "end:" << end; + if (end > size) { return OxError(1); } else { m_header.size = size; @@ -358,7 +362,7 @@ void NodeBuffer::compact(F cb) { ox_memcpy(dest, src, src.size()); cb(src, dest); // update surrounding nodes - auto prev = ptr(dest->next); + auto prev = ptr(dest->prev); if (prev.valid()) { prev->next = dest; }