From 0fb07c24d8321bdec2d5d5a254acbb9ceaee807a Mon Sep 17 00:00:00 2001 From: Brian Potchik Date: Fri, 3 Oct 2025 18:48:17 -0400 Subject: Add zero-copy data pointer access for BinaryData objects for API-side container transforms. --- view/kernelcache/core/transformers/KernelCacheTransforms.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'view/kernelcache') diff --git a/view/kernelcache/core/transformers/KernelCacheTransforms.cpp b/view/kernelcache/core/transformers/KernelCacheTransforms.cpp index 6158e7ad..be06ad9e 100644 --- a/view/kernelcache/core/transformers/KernelCacheTransforms.cpp +++ b/view/kernelcache/core/transformers/KernelCacheTransforms.cpp @@ -41,11 +41,14 @@ public: if (!context || !context->GetInput()) return false; - // TODO: DataBuffers are not zero-copy, so this is inefficient. Investigate a better way. - auto input = context->GetInput()->ReadBuffer(0, context->GetInput()->GetLength()); + const uint8_t* dataPtr = context->GetInput()->GetDataPointer(); + size_t dataLength = context->GetInput()->GetDataLength(); + if (!dataPtr || !dataLength) + return false; + DERItem item = {}; - item.data = (DERByte *)input.GetData(); - item.length = static_cast(std::min(input.GetLength(), (size_t)std::numeric_limits::max())); + item.data = (DERByte *)dataPtr; + item.length = static_cast(std::min(dataLength, (size_t)std::numeric_limits::max())); Img4Payload payload = {}; if (auto result = DERImg4DecodePayload(&item, &payload); (result != DR_Success) && (result != DR_DecodeError)) return false; -- cgit v1.3.1