From 212c84564495fe99a337d0407cea91e8b71258be Mon Sep 17 00:00:00 2001 From: zhenweijin Date: Thu, 21 Mar 2024 23:25:01 +0800 Subject: [PATCH] fs: keep fs.promises.readFile read until EOF is reached --- lib/internal/fs/promises.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/internal/fs/promises.js b/lib/internal/fs/promises.js index 676583ffea5d00..0a5725915261f6 100644 --- a/lib/internal/fs/promises.js +++ b/lib/internal/fs/promises.js @@ -535,6 +535,7 @@ async function readFileHandle(filehandle, options) { throw new ERR_FS_FILE_TOO_LARGE(size); let totalRead = 0; + const noSize = size === 0; let buffer = Buffer.allocUnsafeSlow(length); let result = ''; let offset = 0; @@ -557,7 +558,7 @@ async function readFileHandle(filehandle, options) { if (bytesRead === 0 || totalRead === size || - (bytesRead !== buffer.length && !chunkedRead)) { + (bytesRead !== buffer.length && !chunkedRead && !noSize)) { const singleRead = bytesRead === totalRead; const bytesToCheck = chunkedRead ? totalRead : bytesRead; @@ -567,7 +568,7 @@ async function readFileHandle(filehandle, options) { } if (!encoding) { - if (size === 0 && !singleRead) { + if (noSize && !singleRead) { ArrayPrototypePush(buffers, buffer); return Buffer.concat(buffers, totalRead); } @@ -582,7 +583,8 @@ async function readFileHandle(filehandle, options) { } if (encoding) { - result += decoder.write(buffer); + result += decoder.write(noSize && bytesRead !== kReadFileUnknownBufferLength ? + buffer.subarray(0, bytesRead) : buffer); } else if (size !== 0) { offset = totalRead; } else {