@@ -59,6 +59,7 @@ const {
59
59
} = require ( 'v8' ) ;
60
60
61
61
const {
62
+ validateBuffer,
62
63
validateObject,
63
64
} = require ( 'internal/validators' ) ;
64
65
@@ -101,6 +102,7 @@ const {
101
102
extractHighWaterMark,
102
103
extractSizeAlgorithm,
103
104
lazyTransfer,
105
+ isDetachedBuffer,
104
106
isViewedArrayBufferDetached,
105
107
isBrandCheck,
106
108
resetQueue,
@@ -658,11 +660,13 @@ class ReadableStreamBYOBRequest {
658
660
const viewBuffer = ArrayBufferViewGetBuffer ( view ) ;
659
661
const viewBufferByteLength = ArrayBufferGetByteLength ( viewBuffer ) ;
660
662
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' ) ;
664
665
}
665
666
667
+ assert ( viewByteLength > 0 ) ;
668
+ assert ( viewBufferByteLength > 0 ) ;
669
+
666
670
readableByteStreamControllerRespond ( controller , bytesWritten ) ;
667
671
}
668
672
@@ -681,6 +685,8 @@ class ReadableStreamBYOBRequest {
681
685
'This BYOB request has been invalidated' ) ;
682
686
}
683
687
688
+ validateBuffer ( view , 'view' ) ;
689
+
684
690
if ( isViewedArrayBufferDetached ( view ) ) {
685
691
throw new ERR_INVALID_STATE . TypeError ( 'Viewed ArrayBuffer is detached' ) ;
686
692
}
@@ -894,15 +900,19 @@ class ReadableStreamBYOBReader {
894
900
] ,
895
901
view ) ) ;
896
902
}
903
+
897
904
const viewByteLength = ArrayBufferViewGetByteLength ( view ) ;
898
905
const viewBuffer = ArrayBufferViewGetBuffer ( view ) ;
899
906
const viewBufferByteLength = ArrayBufferGetByteLength ( viewBuffer ) ;
900
907
901
908
if ( viewByteLength === 0 || viewBufferByteLength === 0 ) {
902
909
return PromiseReject (
903
910
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
+ ) ;
905
914
}
915
+
906
916
// Supposed to assert here that the view's buffer is not
907
917
// detached, but there's no API available to use to check that.
908
918
if ( this [ kState ] . stream === undefined ) {
@@ -2298,11 +2308,10 @@ function readableByteStreamControllerEnqueue(
2298
2308
if ( pendingPullIntos . length ) {
2299
2309
const firstPendingPullInto = pendingPullIntos [ 0 ] ;
2300
2310
2301
- const pendingBufferByteLength =
2302
- ArrayBufferGetByteLength ( firstPendingPullInto . buffer ) ;
2303
- if ( pendingBufferByteLength === 0 ) {
2311
+ if ( isDetachedBuffer ( firstPendingPullInto . buffer ) ) {
2304
2312
throw new ERR_INVALID_STATE . TypeError (
2305
- 'Destination ArrayBuffer is zero-length or detached' ) ;
2313
+ 'Destination ArrayBuffer is detached' ,
2314
+ ) ;
2306
2315
}
2307
2316
2308
2317
firstPendingPullInto . buffer =
@@ -2501,16 +2510,6 @@ function readableByteStreamControllerRespondWithNewView(controller, view) {
2501
2510
const desc = pendingPullIntos [ 0 ] ;
2502
2511
assert ( stream [ kState ] . state !== 'errored' ) ;
2503
2512
2504
- if ( ! isArrayBufferView ( view ) ) {
2505
- throw new ERR_INVALID_ARG_TYPE (
2506
- 'view' ,
2507
- [
2508
- 'Buffer' ,
2509
- 'TypedArray' ,
2510
- 'DataView' ,
2511
- ] ,
2512
- view ) ;
2513
- }
2514
2513
const viewByteLength = ArrayBufferViewGetByteLength ( view ) ;
2515
2514
const viewByteOffset = ArrayBufferViewGetByteOffset ( view ) ;
2516
2515
const viewBuffer = ArrayBufferViewGetBuffer ( view ) ;
0 commit comments