File tree Expand file tree Collapse file tree 2 files changed +38
-5
lines changed
internal/js/modules/k6/experimental/websockets Expand file tree Collapse file tree 2 files changed +38
-5
lines changed Original file line number Diff line number Diff line change @@ -642,13 +642,17 @@ func (w *webSocket) send(msg sobek.Value) {
642642 common .Throw (rt , fmt .Errorf ("unsupported send type %T" , o ))
643643 }
644644
645- buffer := msg . ToObject ( rt ). Get ( "buffer" )
646- ab , ok := buffer . Export ().(sobek. ArrayBuffer )
647- if ! ok {
645+ var b [] byte
646+ err = rt . ExportTo ( msg , & b )
647+ if err != nil {
648648 common .Throw (rt ,
649- fmt .Errorf ("buffer of an ArrayBufferView was not an ArrayBuffer but %T" , buffer .Export ()))
649+ fmt .Errorf ("got error while trying to export ArrayBufferView to bytes: %w" , err ))
650+ }
651+ w .writeQueueCh <- message {
652+ mtype : websocket .BinaryMessage ,
653+ data : b ,
654+ t : time .Now (),
650655 }
651- w .sendArrayBuffer (ab )
652656 }
653657}
654658
Original file line number Diff line number Diff line change @@ -427,6 +427,35 @@ func TestBinaryType_ArrayBuffer(t *testing.T) {
427427 require .Len (t , logs , 0 )
428428}
429429
430+ func TestBinaryType_ArrayBuffer_issue_5226 (t * testing.T ) {
431+ t .Parallel ()
432+ ts := newTestState (t )
433+ logger , hook := testutils .NewLoggerWithHook (t , logrus .WarnLevel )
434+ ts .runtime .VU .StateField .Logger = logger
435+ _ , err := ts .runtime .RunOnEventLoop (ts .tb .Replacer .Replace (`
436+ var ws = new WebSocket("WSBIN_URL/ws-echo")
437+ ws.binaryType = "arraybuffer"
438+ ws.addEventListener("open", () => {
439+ const sent = new Uint8Array(1024)
440+ ws.send(sent.subarray(0, 1))
441+ ws.onmessage = (e) => {
442+ if (!(e.data instanceof ArrayBuffer)) {
443+ throw new Error("Wrong event.data type; expected: ArrayBuffer, got: "+ typeof e.data);
444+ }
445+
446+ if (e.data.byteLength != 1) {
447+ throw new Error("The data received isn't equal to the data sent " + e.data.byteLength);
448+ }
449+
450+ ws.close();
451+ }
452+ })
453+ ` ))
454+ require .NoError (t , err )
455+ logs := hook .Drain ()
456+ require .Len (t , logs , 0 )
457+ }
458+
430459func TestExceptionDontPanic (t * testing.T ) {
431460 t .Parallel ()
432461 cases := map [string ]struct {
You can’t perform that action at this time.
0 commit comments