diff --git a/packages/webgpu/cpp/rnwgpu/ArrayBuffer.h b/packages/webgpu/cpp/rnwgpu/ArrayBuffer.h index 231e2924a..e3a6e5cfc 100644 --- a/packages/webgpu/cpp/rnwgpu/ArrayBuffer.h +++ b/packages/webgpu/cpp/rnwgpu/ArrayBuffer.h @@ -54,6 +54,17 @@ template <> struct JSIConverter> { obj.getProperty(runtime, "byteOffset").asNumber()); auto byteLength = static_cast( obj.getProperty(runtime, "byteLength").asNumber()); + if (bytesPerElements <= 0 || bytesPerElements > 8) { + throw std::runtime_error( + "ArrayBuffer::fromJSI: BYTES_PER_ELEMENT must be a positive " + "integer between 1 and 8"); + } + auto bufferSize = arrayBuffer.size(runtime); + if (byteOffset > bufferSize || byteLength > bufferSize - byteOffset) { + throw std::runtime_error( + "ArrayBuffer::fromJSI: byteOffset + byteLength exceeds buffer " + "size"); + } return std::make_shared( arrayBuffer.data(runtime) + byteOffset, byteLength, static_cast(bytesPerElements));