fix: prevent assertion crash when SharedArrayBuffer-backed views reach unsharedBuffer()#27318
fix: prevent assertion crash when SharedArrayBuffer-backed views reach unsharedBuffer()#27318
Conversation
…h unsharedBuffer()
|
No actionable comments were generated in the recent review. 🎉 WalkthroughAdds checks to reject cloning of shared ArrayBufferViews in two conversion paths: IDL conversion rejects them during conversion, and structured cloning throws a DataCloneError. Includes a test verifying Response.clone() handles SharedArrayBuffer-backed views without crashing. Changes
🚥 Pre-merge checks | ✅ 2✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. Comment |
|
✅ 9ff04 — Looks good! Reviewed 3 files across |
Crash
Assertion failure in
JSArrayBufferView::unsharedBuffer()when a typed array backed by aSharedArrayBufferis passed through a code path that assumes unshared buffers.Reproduction
Root Cause
structuredCloneForStreaminStructuredClone.cppcallsbufferView->unsharedBuffer()without checking whether the view is backed by aSharedArrayBuffer. TheunsharedBuffer()method asserts!result || !result->isShared(), so passing a shared-buffer-backed view triggers a crash. The same pattern exists inBunIDLConvert.h'sIDLArrayBufferRefconverter, which is used by the bindgen system for APIs acceptingArrayBufferarguments.Fix
StructuredClone.cpp: checkbufferView->isShared()before callingunsharedBuffer()and throw aDataCloneErrorif shared.BunIDLConvert.h: checkisShared()onJSArrayBufferViewandJSDataViewbefore callingunsharedBuffer(), returningstd::nullopt(conversion failure) if shared.Verification
DataCloneErrorinstead)test/js/web/streams/shared-array-buffer-clone.test.ts