Skip to content

Commit 42bded8

Browse files
AdityaSrivastjoyeecheung
authored andcommittedJul 15, 2018
fs: throw ERR_INVALID_ARG_VALUE when buffer being written is empty
Fixes: #21193 PR-URL: #21262 Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
1 parent c7707a1 commit 42bded8

File tree

4 files changed

+37
-1
lines changed

4 files changed

+37
-1
lines changed
 

‎lib/fs.js

+11
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ const { Buffer, kMaxLength } = require('buffer');
4747
const errors = require('internal/errors');
4848
const {
4949
ERR_FS_FILE_TOO_LARGE,
50+
ERR_INVALID_ARG_VALUE,
5051
ERR_INVALID_ARG_TYPE,
5152
ERR_INVALID_CALLBACK
5253
} = errors.codes;
@@ -457,6 +458,11 @@ function read(fd, buffer, offset, length, position, callback) {
457458
});
458459
}
459460

461+
if (buffer.length === 0) {
462+
throw new ERR_INVALID_ARG_VALUE('buffer', buffer,
463+
'is empty and cannot be written');
464+
}
465+
460466
validateOffsetLengthRead(offset, length, buffer.length);
461467

462468
if (!Number.isSafeInteger(position))
@@ -487,6 +493,11 @@ function readSync(fd, buffer, offset, length, position) {
487493
return 0;
488494
}
489495

496+
if (buffer.length === 0) {
497+
throw new ERR_INVALID_ARG_VALUE('buffer', buffer,
498+
'is empty and cannot be written');
499+
}
500+
490501
validateOffsetLengthRead(offset, length, buffer.length);
491502

492503
if (!Number.isSafeInteger(position))

‎lib/internal/fs/promises.js

+6
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ const { Buffer, kMaxLength } = require('buffer');
1212
const {
1313
ERR_FS_FILE_TOO_LARGE,
1414
ERR_INVALID_ARG_TYPE,
15+
ERR_INVALID_ARG_VALUE,
1516
ERR_METHOD_NOT_IMPLEMENTED
1617
} = require('internal/errors').codes;
1718
const { getPathFromURL } = require('internal/url');
@@ -208,6 +209,11 @@ async function read(handle, buffer, offset, length, position) {
208209
if (length === 0)
209210
return { bytesRead: length, buffer };
210211

212+
if (buffer.length === 0) {
213+
throw new ERR_INVALID_ARG_VALUE('buffer', buffer,
214+
'is empty and cannot be written');
215+
}
216+
211217
validateOffsetLengthRead(offset, length, buffer.length);
212218

213219
if (!Number.isSafeInteger(position))

‎lib/internal/fs/utils.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,8 @@ function validateOffsetLengthRead(offset, length, bufferLength) {
293293
let err;
294294

295295
if (offset < 0 || offset >= bufferLength) {
296-
err = new ERR_OUT_OF_RANGE('offset', `>= 0 && <= ${bufferLength}`, offset);
296+
err = new ERR_OUT_OF_RANGE('offset',
297+
`>= 0 && <= ${bufferLength}`, offset);
297298
} else if (length < 0 || offset + length > bufferLength) {
298299
err = new ERR_OUT_OF_RANGE('length',
299300
`>= 0 && <= ${bufferLength - offset}`, length);
+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
'use strict';
2+
require('../common');
3+
const fixtures = require('../common/fixtures');
4+
const assert = require('assert');
5+
const fs = require('fs');
6+
const filepath = fixtures.path('x.txt');
7+
const fd = fs.openSync(filepath, 'r');
8+
9+
const buffer = new Uint8Array();
10+
11+
assert.throws(
12+
() => fs.readSync(fd, buffer, 0, 10, 0),
13+
{
14+
code: 'ERR_INVALID_ARG_VALUE',
15+
message: 'The argument \'buffer\' is empty and cannot be written. ' +
16+
'Received Uint8Array [ ]'
17+
}
18+
);

0 commit comments

Comments
 (0)
Please sign in to comment.