fs: fix cb/sync writev empty array behavior

PR-URL: https://github.com/nodejs/node/pull/41932
Refs: https://github.com/nodejs/node/issues/41910
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Robert Nagy <ronagy@icloud.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
Benjamin Gruenbaum committed 2022-02-14 18:29:44 +02:00
1 parent 98cbbbb9b0
commit aff8b874e3
3 files changed
+40 -2

No files matched your search

+9
View File
@@ -906,6 +906,11 @@ function writev(fd, buffers, position, callback) {
validateBufferArray(buffers);
callback = maybeCallback(callback || position);
if (buffers.length === 0) {
process.nextTick(callback, null, 0, buffers);
return;
}
const req = new FSReqCallback();
req.oncomplete = wrapper;
@@ -932,6 +937,10 @@ function writevSync(fd, buffers, position) {
fd = getValidatedFd(fd);
validateBufferArray(buffers);
if (buffers.length === 0) {
return 0;
}
const ctx = {};
if (typeof position !== 'number')
+11 -1
View File
@@ -56,11 +56,21 @@ const getFileName = (i) => path.join(tmpdir.path, `writev_sync_${i}.txt`);
assert(Buffer.concat(bufferArr).equals(fs.readFileSync(filename)));
}
// fs.writevSync with empty array of buffers
{
const filename = getFileName(3);
const fd = fs.openSync(filename, 'w');
const written = fs.writevSync(fd, []);
assert.strictEqual(written, 0);
fs.closeSync(fd);
}
/**
* Testing with wrong input types
*/
{
const filename = getFileName(3);
const filename = getFileName(4);
const fd = fs.openSync(filename, 'w');
[false, 'test', {}, [{}], ['sdf'], null, undefined].forEach((i) => {
+20 -1
View File
@@ -57,11 +57,30 @@ const getFileName = (i) => path.join(tmpdir.path, `writev_${i}.txt`);
fs.writev(fd, bufferArr, done);
}
// fs.writev with empty array of buffers
{
const filename = getFileName(3);
const fd = fs.openSync(filename, 'w');
const bufferArr = [];
let afterSyncCall = false;
const done = common.mustSucceed((written, buffers) => {
assert.strictEqual(buffers.length, 0);
assert.strictEqual(written, 0);
assert(afterSyncCall);
fs.closeSync(fd);
});
fs.writev(fd, bufferArr, done);
afterSyncCall = true;
}
/**
* Testing with wrong input types
*/
{
const filename = getFileName(3);
const filename = getFileName(4);
const fd = fs.openSync(filename, 'w');
[false, 'test', {}, [{}], ['sdf'], null, undefined].forEach((i) => {