@@ -536,6 +536,7 @@ async function readFileHandle(filehandle, options) {
536536 throw new ERR_FS_FILE_TOO_LARGE ( size ) ;
537537
538538 let totalRead = 0 ;
539+ const noSize = size === 0 ;
539540 let buffer = Buffer . allocUnsafeSlow ( length ) ;
540541 let result = '' ;
541542 let offset = 0 ;
@@ -558,7 +559,7 @@ async function readFileHandle(filehandle, options) {
558559
559560 if ( bytesRead === 0 ||
560561 totalRead === size ||
561- ( bytesRead !== buffer . length && ! chunkedRead ) ) {
562+ ( bytesRead !== buffer . length && ! chunkedRead && ! noSize ) ) {
562563 const singleRead = bytesRead === totalRead ;
563564
564565 const bytesToCheck = chunkedRead ? totalRead : bytesRead ;
@@ -568,7 +569,7 @@ async function readFileHandle(filehandle, options) {
568569 }
569570
570571 if ( ! encoding ) {
571- if ( size === 0 && ! singleRead ) {
572+ if ( noSize && ! singleRead ) {
572573 ArrayPrototypePush ( buffers , buffer ) ;
573574 return Buffer . concat ( buffers , totalRead ) ;
574575 }
@@ -581,15 +582,17 @@ async function readFileHandle(filehandle, options) {
581582 result += decoder . end ( buffer ) ;
582583 return result ;
583584 }
584-
585+ const readBuffer = bytesRead !== buffer . length ?
586+ buffer . subarray ( 0 , bytesRead ) :
587+ buffer ;
585588 if ( encoding ) {
586- result += decoder . write ( buffer ) ;
589+ result += decoder . write ( readBuffer ) ;
587590 } else if ( size !== 0 ) {
588591 offset = totalRead ;
589592 } else {
590593 buffers ??= [ ] ;
591594 // Unknown file size requires chunks.
592- ArrayPrototypePush ( buffers , buffer ) ;
595+ ArrayPrototypePush ( buffers , readBuffer ) ;
593596 buffer = Buffer . allocUnsafeSlow ( kReadFileUnknownBufferLength ) ;
594597 }
595598 }
0 commit comments