@@ -59,6 +59,7 @@ const {
5959} = require ( 'v8' ) ;
6060
6161const {
62+ validateBuffer,
6263 validateObject,
6364} = require ( 'internal/validators' ) ;
6465
@@ -101,6 +102,7 @@ const {
101102 extractHighWaterMark,
102103 extractSizeAlgorithm,
103104 lazyTransfer,
105+ isDetachedBuffer,
104106 isViewedArrayBufferDetached,
105107 isBrandCheck,
106108 resetQueue,
@@ -658,11 +660,13 @@ class ReadableStreamBYOBRequest {
658660 const viewBuffer = ArrayBufferViewGetBuffer ( view ) ;
659661 const viewBufferByteLength = ArrayBufferGetByteLength ( viewBuffer ) ;
660662
661- if ( viewByteLength === 0 || viewBufferByteLength === 0 ) {
662- throw new ERR_INVALID_STATE . TypeError (
663- 'View ArrayBuffer is zero-length or detached' ) ;
663+ if ( isDetachedBuffer ( viewBuffer ) ) {
664+ throw new ERR_INVALID_STATE . TypeError ( 'Viewed ArrayBuffer is detached' ) ;
664665 }
665666
667+ assert ( viewByteLength > 0 ) ;
668+ assert ( viewBufferByteLength > 0 ) ;
669+
666670 readableByteStreamControllerRespond ( controller , bytesWritten ) ;
667671 }
668672
@@ -681,6 +685,8 @@ class ReadableStreamBYOBRequest {
681685 'This BYOB request has been invalidated' ) ;
682686 }
683687
688+ validateBuffer ( view , 'view' ) ;
689+
684690 if ( isViewedArrayBufferDetached ( view ) ) {
685691 throw new ERR_INVALID_STATE . TypeError ( 'Viewed ArrayBuffer is detached' ) ;
686692 }
@@ -894,15 +900,19 @@ class ReadableStreamBYOBReader {
894900 ] ,
895901 view ) ) ;
896902 }
903+
897904 const viewByteLength = ArrayBufferViewGetByteLength ( view ) ;
898905 const viewBuffer = ArrayBufferViewGetBuffer ( view ) ;
899906 const viewBufferByteLength = ArrayBufferGetByteLength ( viewBuffer ) ;
900907
901908 if ( viewByteLength === 0 || viewBufferByteLength === 0 ) {
902909 return PromiseReject (
903910 new ERR_INVALID_STATE . TypeError (
904- 'View ArrayBuffer is zero-length or detached' ) ) ;
911+ 'View or Viewed ArrayBuffer is zero-length or detached' ,
912+ ) ,
913+ ) ;
905914 }
915+
906916 // Supposed to assert here that the view's buffer is not
907917 // detached, but there's no API available to use to check that.
908918 if ( this [ kState ] . stream === undefined ) {
@@ -2298,11 +2308,10 @@ function readableByteStreamControllerEnqueue(
22982308 if ( pendingPullIntos . length ) {
22992309 const firstPendingPullInto = pendingPullIntos [ 0 ] ;
23002310
2301- const pendingBufferByteLength =
2302- ArrayBufferGetByteLength ( firstPendingPullInto . buffer ) ;
2303- if ( pendingBufferByteLength === 0 ) {
2311+ if ( isDetachedBuffer ( firstPendingPullInto . buffer ) ) {
23042312 throw new ERR_INVALID_STATE . TypeError (
2305- 'Destination ArrayBuffer is zero-length or detached' ) ;
2313+ 'Destination ArrayBuffer is detached' ,
2314+ ) ;
23062315 }
23072316
23082317 firstPendingPullInto . buffer =
@@ -2501,16 +2510,6 @@ function readableByteStreamControllerRespondWithNewView(controller, view) {
25012510 const desc = pendingPullIntos [ 0 ] ;
25022511 assert ( stream [ kState ] . state !== 'errored' ) ;
25032512
2504- if ( ! isArrayBufferView ( view ) ) {
2505- throw new ERR_INVALID_ARG_TYPE (
2506- 'view' ,
2507- [
2508- 'Buffer' ,
2509- 'TypedArray' ,
2510- 'DataView' ,
2511- ] ,
2512- view ) ;
2513- }
25142513 const viewByteLength = ArrayBufferViewGetByteLength ( view ) ;
25152514 const viewByteOffset = ArrayBufferViewGetByteOffset ( view ) ;
25162515 const viewBuffer = ArrayBufferViewGetBuffer ( view ) ;
0 commit comments