@@ -535,6 +535,7 @@ async function readFileHandle(filehandle, options) {
535535 throw new ERR_FS_FILE_TOO_LARGE ( size ) ;
536536
537537 let totalRead = 0 ;
538+ const noSize = size === 0 ;
538539 let buffer = Buffer . allocUnsafeSlow ( length ) ;
539540 let result = '' ;
540541 let offset = 0 ;
@@ -557,7 +558,7 @@ async function readFileHandle(filehandle, options) {
557558
558559 if ( bytesRead === 0 ||
559560 totalRead === size ||
560- ( bytesRead !== buffer . length && ! chunkedRead ) ) {
561+ ( bytesRead !== buffer . length && ! chunkedRead && ! noSize ) ) {
561562 const singleRead = bytesRead === totalRead ;
562563
563564 const bytesToCheck = chunkedRead ? totalRead : bytesRead ;
@@ -567,7 +568,7 @@ async function readFileHandle(filehandle, options) {
567568 }
568569
569570 if ( ! encoding ) {
570- if ( size === 0 && ! singleRead ) {
571+ if ( noSize && ! singleRead ) {
571572 ArrayPrototypePush ( buffers , buffer ) ;
572573 return Buffer . concat ( buffers , totalRead ) ;
573574 }
@@ -580,15 +581,17 @@ async function readFileHandle(filehandle, options) {
580581 result += decoder . end ( buffer ) ;
581582 return result ;
582583 }
583-
584+ const writeBuffer = bytesRead !== buffer . length ?
585+ buffer . subarray ( 0 , bytesRead ) :
586+ buffer ;
584587 if ( encoding ) {
585- result += decoder . write ( buffer ) ;
588+ result += decoder . write ( writeBuffer ) ;
586589 } else if ( size !== 0 ) {
587590 offset = totalRead ;
588591 } else {
589592 buffers ??= [ ] ;
590593 // Unknown file size requires chunks.
591- ArrayPrototypePush ( buffers , buffer ) ;
594+ ArrayPrototypePush ( buffers , writeBuffer ) ;
592595 buffer = Buffer . allocUnsafeSlow ( kReadFileUnknownBufferLength ) ;
593596 }
594597 }
0 commit comments