Skip to content

Commit 2959b39

Browse files
committed
fix writing to websocketstream with SharedArrayBuffer/SharedArrayBuffer view
1 parent 89f9a52 commit 2959b39

File tree

3 files changed

+15
-4
lines changed

3 files changed

+15
-4
lines changed

lib/web/websocket/stream/websocketstream.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,9 @@ class WebSocketStream {
199199
}
200200

201201
#write (chunk) {
202+
// See /websockets/stream/tentative/write.any.html
203+
chunk = webidl.converters.WebSocketStreamWrite(chunk)
204+
202205
// 1. Let promise be a new promise created in stream ’s relevant realm .
203206
const promise = createDeferredPromise()
204207

@@ -484,4 +487,12 @@ webidl.converters.WebSocketCloseInfo = webidl.dictionaryConverter([
484487
}
485488
])
486489

490+
webidl.converters.WebSocketStreamWrite = function (V) {
491+
if (typeof V === 'string') {
492+
return webidl.converters.USVString(V)
493+
}
494+
495+
return webidl.converters.BufferSource(V)
496+
}
497+
487498
module.exports = { WebSocketStream }

test/web-platform-tests/expectation.json

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39837,13 +39837,11 @@
3983739837
},
3983839838
{
3983939839
"name": "writing a resizable ArrayBuffer should be rejected",
39840-
"success": false,
39841-
"message": "assert_unreached: Should have rejected: write() should reject Reached unreachable code"
39840+
"success": true
3984239841
},
3984339842
{
3984439843
"name": "writing a view on a shared buffer should be rejected",
39845-
"success": false,
39846-
"message": "promise_rejects_js: write() should reject function \"function() { throw e; }\" threw object \"RangeError: Invalid string length\" (\"RangeError\") expected instance of function \"function TypeError() { [native code] }\" (\"TypeError\")"
39844+
"success": true
3984739845
},
3984839846
{
3984939847
"name": "Garbage collecting a WebSocket stream doesn't crash while write promise is pending",

types/webidl.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,8 @@ interface WebidlConverters {
247247
*/
248248
EventHandlerNonNull (V: unknown): Function | null
249249

250+
WebSocketStreamWrite (V: unknown): ArrayBuffer | NodeJS.TypedArray | string
251+
250252
[Key: string]: (...args: any[]) => unknown
251253
}
252254

0 commit comments

Comments
 (0)