Skip to content

Commit fa63474

Browse files
committed
buffer: handle detached instances
1 parent 6386d3f commit fa63474

File tree

2 files changed

+12
-8
lines changed

2 files changed

+12
-8
lines changed

src/node_buffer.cc

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1404,14 +1404,8 @@ std::pair<void*, size_t> DecomposeBufferToParts(Local<Value> buffer) {
14041404
Local<ArrayBufferView> view = buffer.As<ArrayBufferView>();
14051405
Local<ArrayBuffer> buffer = view->Buffer();
14061406

1407-
// Handle potential detached buffer case
1408-
if (buffer.IsEmpty() || buffer->Data() == nullptr) {
1409-
pointer = nullptr;
1410-
byte_length = 0;
1411-
} else {
1412-
pointer = static_cast<uint8_t*>(buffer->Data()) + view->ByteOffset();
1413-
byte_length = view->ByteLength();
1414-
}
1407+
pointer = static_cast<uint8_t*>(buffer->Data()) + view->ByteOffset();
1408+
byte_length = view->ByteLength();
14151409
} else if (buffer->IsArrayBuffer()) {
14161410
Local<ArrayBuffer> ab = buffer.As<ArrayBuffer>();
14171411
pointer = ab->Data();

test/parallel/test-buffer-copy-within.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,16 @@ describe('Buffer.copy', () => {
6161
Buffer.copy(src, dst, 0);
6262
assert.deepStrictEqual(new Uint8Array(ab), new Uint8Array([1, 2, 1, 2, 3, 4, 5]));
6363
});
64+
65+
test("should handle detached instances", () => {
66+
const src = new Uint8Array([5, 6]).buffer;
67+
src.transfer()
68+
const dst = Buffer.from([0, 0, 0, 0]);
69+
70+
Buffer.copy(src, dst, 1);
71+
72+
assert.deepStrictEqual(dst, Buffer.from([0, 0, 0, 0]));
73+
})
6474
});
6575

6676
describe('DataView to Buffer', () => {

0 commit comments

Comments
 (0)