From af9b48a2f17b11b66a8b81beeaba3c408b863795 Mon Sep 17 00:00:00 2001 From: Daeyeon Jeong Date: Mon, 24 Apr 2023 14:01:43 +0900 Subject: [PATCH] src: fix creating an ArrayBuffer from a Blob created with `openAsBlob` Signed-off-by: Daeyeon Jeong PR-URL: https://github.com/nodejs/node/pull/47691 Fixes: https://github.com/nodejs/node/issues/47683 Reviewed-By: James M Snell --- src/dataqueue/queue.cc | 4 ++-- test/parallel/test-blob-file-backed.js | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/dataqueue/queue.cc b/src/dataqueue/queue.cc index 8224b82eba2e7c..8ae28f9d0a791b 100644 --- a/src/dataqueue/queue.cc +++ b/src/dataqueue/queue.cc @@ -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(), entry->start_, - entry->end_)), + entry->end_ - entry->start_)), entry); } diff --git a/test/parallel/test-blob-file-backed.js b/test/parallel/test-blob-file-backed.js index b25137a34c3d01..acf04a44386b6a 100644 --- a/test/parallel/test-blob-file-backed.js +++ b/test/parallel/test-blob-file-backed.js @@ -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();