mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 10:59:27 +00:00
fs: invalidate blob created from empty file when written to
Fixes: https://github.com/nodejs/node/issues/47161 PR-URL: https://github.com/nodejs/node/pull/47199 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Michaël Zasso <targos@protonmail.com>
This commit is contained in:
parent
f51c152f60
commit
73645d6227
@ -1,14 +1,12 @@
|
||||
'use strict';
|
||||
|
||||
const {
|
||||
ArrayBuffer,
|
||||
ArrayFrom,
|
||||
MathMax,
|
||||
MathMin,
|
||||
ObjectDefineProperties,
|
||||
ObjectDefineProperty,
|
||||
PromiseReject,
|
||||
PromiseResolve,
|
||||
ReflectConstruct,
|
||||
RegExpPrototypeExec,
|
||||
RegExpPrototypeSymbolReplace,
|
||||
@ -266,10 +264,6 @@ class Blob {
|
||||
if (!isBlob(this))
|
||||
return PromiseReject(new ERR_INVALID_THIS('Blob'));
|
||||
|
||||
if (this.size === 0) {
|
||||
return PromiseResolve(new ArrayBuffer(0));
|
||||
}
|
||||
|
||||
const { promise, resolve, reject } = createDeferredPromise();
|
||||
const reader = this[kHandle].getReader();
|
||||
const buffers = [];
|
||||
@ -316,12 +310,6 @@ class Blob {
|
||||
if (!isBlob(this))
|
||||
throw new ERR_INVALID_THIS('Blob');
|
||||
|
||||
if (this.size === 0) {
|
||||
return new lazyReadableStream({
|
||||
start(c) { c.close(); },
|
||||
});
|
||||
}
|
||||
|
||||
const reader = this[kHandle].getReader();
|
||||
return new lazyReadableStream({
|
||||
start(c) {
|
||||
|
@ -20,12 +20,14 @@ const { Blob } = require('buffer');
|
||||
const tmpdir = require('../common/tmpdir');
|
||||
const testfile = path.join(tmpdir.path, 'test-file-backed-blob.txt');
|
||||
const testfile2 = path.join(tmpdir.path, 'test-file-backed-blob2.txt');
|
||||
const testfile3 = path.join(tmpdir.path, 'test-file-backed-blob3.txt');
|
||||
tmpdir.refresh();
|
||||
|
||||
const data = `${'a'.repeat(1000)}${'b'.repeat(2000)}`;
|
||||
|
||||
writeFileSync(testfile, data);
|
||||
writeFileSync(testfile2, data.repeat(100));
|
||||
writeFileSync(testfile3, '');
|
||||
|
||||
(async () => {
|
||||
const blob = await openAsBlob(testfile);
|
||||
@ -79,3 +81,21 @@ writeFileSync(testfile2, data.repeat(100));
|
||||
|
||||
await unlink(testfile2);
|
||||
})().then(common.mustCall());
|
||||
|
||||
(async () => {
|
||||
const blob = await openAsBlob(testfile3);
|
||||
strictEqual(blob.size, 0);
|
||||
strictEqual(await blob.text(), '');
|
||||
writeFileSync(testfile3, 'abc');
|
||||
await rejects(blob.text(), { name: 'NotReadableError' });
|
||||
await unlink(testfile3);
|
||||
})().then(common.mustCall());
|
||||
|
||||
(async () => {
|
||||
const blob = await openAsBlob(testfile3);
|
||||
strictEqual(blob.size, 0);
|
||||
writeFileSync(testfile3, 'abc');
|
||||
const stream = blob.stream();
|
||||
const reader = stream.getReader();
|
||||
await rejects(() => reader.read(), { name: 'NotReadableError' });
|
||||
})().then(common.mustCall());
|
||||
|
Loading…
Reference in New Issue
Block a user