Skip to content
forked from nodejs/node

Commit aff8b87

Browse files
committed
fs: fix cb/sync writev empty array behavior
PR-URL: nodejs#41932 Refs: nodejs#41910 Reviewed-By: Antoine du Hamel <[email protected]> Reviewed-By: Robert Nagy <[email protected]> Reviewed-By: James M Snell <[email protected]>
1 parent 98cbbbb commit aff8b87

File tree

3 files changed

+40
-2
lines changed

3 files changed

+40
-2
lines changed

Diff for: lib/fs.js

+9
Original file line numberDiff line numberDiff line change
@@ -906,6 +906,11 @@ function writev(fd, buffers, position, callback) {
906906
validateBufferArray(buffers);
907907
callback = maybeCallback(callback || position);
908908

909+
if (buffers.length === 0) {
910+
process.nextTick(callback, null, 0, buffers);
911+
return;
912+
}
913+
909914
const req = new FSReqCallback();
910915
req.oncomplete = wrapper;
911916

@@ -932,6 +937,10 @@ function writevSync(fd, buffers, position) {
932937
fd = getValidatedFd(fd);
933938
validateBufferArray(buffers);
934939

940+
if (buffers.length === 0) {
941+
return 0;
942+
}
943+
935944
const ctx = {};
936945

937946
if (typeof position !== 'number')

Diff for: test/parallel/test-fs-writev-sync.js

+11-1
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,21 @@ const getFileName = (i) => path.join(tmpdir.path, `writev_sync_${i}.txt`);
5656
assert(Buffer.concat(bufferArr).equals(fs.readFileSync(filename)));
5757
}
5858

59+
// fs.writevSync with empty array of buffers
60+
{
61+
const filename = getFileName(3);
62+
const fd = fs.openSync(filename, 'w');
63+
const written = fs.writevSync(fd, []);
64+
assert.strictEqual(written, 0);
65+
fs.closeSync(fd);
66+
67+
}
68+
5969
/**
6070
* Testing with wrong input types
6171
*/
6272
{
63-
const filename = getFileName(3);
73+
const filename = getFileName(4);
6474
const fd = fs.openSync(filename, 'w');
6575

6676
[false, 'test', {}, [{}], ['sdf'], null, undefined].forEach((i) => {

Diff for: test/parallel/test-fs-writev.js

+20-1
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,30 @@ const getFileName = (i) => path.join(tmpdir.path, `writev_${i}.txt`);
5757
fs.writev(fd, bufferArr, done);
5858
}
5959

60+
61+
// fs.writev with empty array of buffers
62+
{
63+
const filename = getFileName(3);
64+
const fd = fs.openSync(filename, 'w');
65+
const bufferArr = [];
66+
let afterSyncCall = false;
67+
68+
const done = common.mustSucceed((written, buffers) => {
69+
assert.strictEqual(buffers.length, 0);
70+
assert.strictEqual(written, 0);
71+
assert(afterSyncCall);
72+
fs.closeSync(fd);
73+
});
74+
75+
fs.writev(fd, bufferArr, done);
76+
afterSyncCall = true;
77+
}
78+
6079
/**
6180
* Testing with wrong input types
6281
*/
6382
{
64-
const filename = getFileName(3);
83+
const filename = getFileName(4);
6584
const fd = fs.openSync(filename, 'w');
6685

6786
[false, 'test', {}, [{}], ['sdf'], null, undefined].forEach((i) => {

0 commit comments

Comments
 (0)