@@ -229,9 +229,33 @@ const createPointer = (filename, offset, size) => {
229
229
} ) ;
230
230
} ;
231
231
232
+ const readFileSectionToBuffer = ( fd , buffer , offset , position , callback ) => {
233
+ const remaining = buffer . length - offset ;
234
+ fs . read ( fd , buffer , offset , remaining , position , ( err , bytesRead ) => {
235
+ if ( err ) return callback ( err ) ;
236
+ if ( bytesRead === 0 ) {
237
+ return callback (
238
+ new Error (
239
+ `Unexpected end of file (${ remaining } bytes missing at pos ${ position } `
240
+ )
241
+ ) ;
242
+ }
243
+ if ( bytesRead < remaining ) {
244
+ return readFileSectionToBuffer (
245
+ fd ,
246
+ buffer ,
247
+ offset + bytesRead ,
248
+ position + bytesRead ,
249
+ callback
250
+ ) ;
251
+ }
252
+ return callback ( ) ;
253
+ } ) ;
254
+ } ;
255
+
232
256
const readSection = ( filename , file , offset , size , callback ) => {
233
257
const buffer = Buffer . alloc ( size ) ;
234
- fs . read ( file , buffer , 0 , size , offset , err => {
258
+ readFileSectionToBuffer ( file , buffer , 0 , offset , err => {
235
259
if ( err ) return callback ( err ) ;
236
260
237
261
const result = [ ] ;
@@ -345,7 +369,7 @@ class FileMiddleware extends SerializerMiddleware {
345
369
false ,
346
370
( file , callback ) => {
347
371
const sizeBuf = Buffer . alloc ( 4 ) ;
348
- fs . read ( file , sizeBuf , 0 , 4 , 0 , err => {
372
+ readFileSectionToBuffer ( file , sizeBuf , 0 , 0 , err => {
349
373
if ( err ) return callback ( err ) ;
350
374
351
375
const rootSize = sizeBuf . readUInt32LE ( 0 ) ;
0 commit comments