Out-of-Bounds Read when Compiling WebAssembly Source Buffers in WebKit
When a source buffer is compiled, it is first copied into a read-only buffer by the function getWasmBufferFromValue. This function returns the code buffer as follows: return arrayBufferView ? static_cast<uint8_t*>(arrayBufferView->vector()) : static_cast<uint8_t*>(arrayBuffer->impl()->data()). If the source buffer is a view (DataView or TypedArray), arrayBufferView->vector() is returned. The vector() method returns the start of the data in the buffer, including any offset. However, the function createSourceBufferFromValue copies the output of this function as follows: memcpy(result.data(), data + byteOffset, byteSize). This means that if the buffer is a view, the offset is added to the buffer twice before this is copied. This could allow memory off the heap to be read out of the source buffer, either though parsing exceptions or data sections when they are copied.