@@ -189,6 +189,21 @@ function validateOffsetLengthRead(offset, length, bufferLength) {
189189  } 
190190} 
191191
192+ function  validateOffsetLengthWrite ( offset ,  length ,  byteLength )  { 
193+   let  err ; 
194+ 
195+   if  ( offset  >  byteLength )  { 
196+     err  =  new  errors . RangeError ( 'ERR_OUT_OF_RANGE' ,  'offset' ) ; 
197+   }  else  if  ( offset  +  length  >  byteLength  ||  offset  +  length  >  kMaxLength )  { 
198+     err  =  new  errors . RangeError ( 'ERR_OUT_OF_RANGE' ,  'length' ) ; 
199+   } 
200+ 
201+   if  ( err  !==  undefined )  { 
202+     Error . captureStackTrace ( err ,  validateOffsetLengthWrite ) ; 
203+     throw  err ; 
204+   } 
205+ } 
206+ 
192207// Special case of `makeCallback()` that is specific to async `*stat()` calls as 
193208// an optimization, since the data passed back to the callback needs to be 
194209// transformed anyway. 
@@ -826,11 +841,7 @@ fs.write = function(fd, buffer, offset, length, position, callback) {
826841      length  =  buffer . length  -  offset ; 
827842    if  ( typeof  position  !==  'number' ) 
828843      position  =  null ; 
829-     const  byteLength  =  buffer . byteLength ; 
830-     if  ( offset  >  byteLength ) 
831-       throw  new  errors . RangeError ( 'ERR_OUT_OF_RANGE' ,  'offset' ) ; 
832-     if  ( offset  +  length  >  byteLength  ||  offset  +  length  >  kMaxLength ) 
833-       throw  new  errors . RangeError ( 'ERR_OUT_OF_RANGE' ,  'length' ) ; 
844+     validateOffsetLengthWrite ( offset ,  length ,  buffer . byteLength ) ; 
834845    return  binding . writeBuffer ( fd ,  buffer ,  offset ,  length ,  position ,  req ) ; 
835846  } 
836847
@@ -865,11 +876,7 @@ fs.writeSync = function(fd, buffer, offset, length, position) {
865876      offset  =  0 ; 
866877    if  ( typeof  length  !==  'number' ) 
867878      length  =  buffer . length  -  offset ; 
868-     const  byteLength  =  buffer . byteLength ; 
869-     if  ( offset  >  byteLength ) 
870-       throw  new  errors . RangeError ( 'ERR_OUT_OF_RANGE' ,  'offset' ) ; 
871-     if  ( offset  +  length  >  byteLength  ||  offset  +  length  >  kMaxLength ) 
872-       throw  new  errors . RangeError ( 'ERR_OUT_OF_RANGE' ,  'length' ) ; 
879+     validateOffsetLengthWrite ( offset ,  length ,  buffer . byteLength ) ; 
873880    return  binding . writeBuffer ( fd ,  buffer ,  offset ,  length ,  position ) ; 
874881  } 
875882  if  ( typeof  buffer  !==  'string' ) 
0 commit comments