@@ -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