Re: [whatwg/streams] Meta: implement `TransferArrayBuffer` correctly in reference implementation (PR #1353)

@MattiasBuelens commented on this pull request.



> +  const byteOffset = view.byteOffset;
+  const byteLength = view.byteLength;

The reference implementation was doing [steps 8 and 9](https://streams.spec.whatwg.org/commit-snapshots/4f2a2c1012342885b2c2d7608fa58ef81631b058/#readable-byte-stream-controller-pull-into) *after* calling `TransferArrayBuffer`, which meant that `view.byteLength` was already `0`. We didn't notice this, because we weren't *actually* transferring before. 😛

Fortunately, all "real" implementations already do this correctly.

>  exports.TransferArrayBuffer = O => {
   assert(!exports.IsDetachedBuffer(O));
-  const transferredIshVersion = O.slice();
-
-  // This is specifically to fool tests that test "is transferred" by taking a non-zero-length
-  // ArrayBuffer and checking if its byteLength starts returning 0.
-  Object.defineProperty(O, 'byteLength', {
-    get() {
-      return 0;
-    }
-  });
-  O[isFakeDetached] = true;
-
-  return transferredIshVersion;
+  return ArrayBufferPrototypeTransferToFixedLength.call(O);

I'm using `transferToFixedLength()` since we don't (yet) support [resizable `ArrayBuffer`s](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer#resizing_arraybuffers).

I think we can loosen that restriction, but we should do that in an *actual* spec change. 😉

-- 
Reply to this email directly or view it on GitHub:
https://github.com/whatwg/streams/pull/1353#pullrequestreview-3123610022
You are receiving this because you are subscribed to this thread.

Message ID: <whatwg/streams/pull/1353/review/3123610022@github.com>

Received on Friday, 15 August 2025 11:06:47 UTC