diff --git a/lib/internal/fs/promises.js b/lib/internal/fs/promises.js index 34fd0f586766dd..f93ecd0cf2f85b 100644 --- a/lib/internal/fs/promises.js +++ b/lib/internal/fs/promises.js @@ -77,6 +77,7 @@ const { validateBuffer, validateEncoding, validateInteger, + validateObject, validateString, } = require('internal/validators'); const pathModule = require('path'); @@ -517,6 +518,9 @@ async function read(handle, bufferOrParams, offset, length, position) { let buffer = bufferOrParams; if (!isArrayBufferView(buffer)) { // This is fh.read(params) + if (bufferOrParams !== undefined) { + validateObject(bufferOrParams, 'options', { nullable: true }); + } ({ buffer = Buffer.alloc(16384), offset = 0, diff --git a/test/parallel/test-fs-promises.js b/test/parallel/test-fs-promises.js index 03f71069897345..c0cfb468a2aed9 100644 --- a/test/parallel/test-fs-promises.js +++ b/test/parallel/test-fs-promises.js @@ -153,14 +153,24 @@ async function executeOnHandle(dest, func) { }); } - // Use fallback buffer allocation when input not buffer + // Use fallback buffer allocation when first argument is null { await executeOnHandle(dest, async (handle) => { - const ret = await handle.read(0, 0, 0, 0); + const ret = await handle.read(null, 0, 0, 0); assert.strictEqual(ret.buffer.length, 16384); }); } + // TypeError if buffer is not ArrayBufferView or nullable object + { + await executeOnHandle(dest, async (handle) => { + await assert.rejects( + async () => handle.read(0, 0, 0, 0), + { code: 'ERR_INVALID_ARG_TYPE' } + ); + }); + } + // Bytes written to file match buffer { await executeOnHandle(dest, async (handle) => {