src: fix creating an ArrayBuffer from a Blob created with openAsBlob

Signed-off-by: Daeyeon Jeong <daeyeon.dev@gmail.com>
PR-URL: https://github.com/nodejs/node/pull/47691
Fixes: https://github.com/nodejs/node/issues/47683
Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
Daeyeon Jeong 2023-04-24 14:01:43 +09:00 committed by James M Snell
parent d2d5789daa
commit af9b48a2f1
2 changed files with 19 additions and 2 deletions

View File

@ -817,7 +817,7 @@ class FdEntry final : public EntryImpl {
uint64_t new_start = start_ + start;
uint64_t new_end = end_;
if (end.has_value()) {
new_end = std::min(end.value() + start, new_end);
new_end = std::min(end.value(), end_);
}
CHECK(new_start >= start_);
@ -881,7 +881,7 @@ class FdEntry final : public EntryImpl {
file,
Local<Object>(),
entry->start_,
entry->end_)),
entry->end_ - entry->start_)),
entry);
}

View File

@ -68,6 +68,23 @@ writeFileSync(testfile3, '');
await unlink(testfile);
})().then(common.mustCall());
(async () => {
// Refs: https://github.com/nodejs/node/issues/47683
const blob = await openAsBlob(testfile);
const res = blob.slice(10, 20);
const ab = await res.arrayBuffer();
strictEqual(res.size, ab.byteLength);
let length = 0;
const stream = await res.stream();
for await (const chunk of stream)
length += chunk.length;
strictEqual(res.size, length);
const res1 = blob.slice(995, 1005);
strictEqual(await res1.text(), data.slice(995, 1005));
})().then(common.mustCall());
(async () => {
const blob = await openAsBlob(testfile2);
const stream = blob.stream();