@@ -691,18 +691,38 @@ fs.openSync = function(path, flags, mode) {
691
691
} ;
692
692
693
693
fs . read = function ( fd , buffer , offset , length , position , callback ) {
694
+ if ( ! Number . isInteger ( fd ) )
695
+ throw new errors . TypeError ( 'ERR_INVALID_ARG_TYPE' , 'fd' , 'number' ) ;
696
+ if ( fd < 0 || fd > 0xFFFFFFFF )
697
+ throw new errors . RangeError ( 'ERR_OUT_OF_RANGE' , 'fd' ) ;
698
+ if ( ! isUint8Array ( buffer ) )
699
+ throw new errors . TypeError ( 'ERR_INVALID_ARG_TYPE' , 'buffer' ,
700
+ [ 'Buffer' , 'Uint8Array' ] ) ;
701
+
702
+ offset |= 0 ;
703
+ length |= 0 ;
704
+
694
705
if ( length === 0 ) {
695
706
return process . nextTick ( function ( ) {
696
707
callback && callback ( null , 0 , buffer ) ;
697
708
} ) ;
698
709
}
699
710
711
+ if ( offset < 0 || offset >= buffer . length )
712
+ throw new errors . RangeError ( 'ERR_OUT_OF_RANGE' , 'offset' ) ;
713
+
714
+ if ( length < 0 || offset + length > buffer . length )
715
+ throw new errors . RangeError ( 'ERR_OUT_OF_RANGE' , 'length' ) ;
716
+
717
+ if ( ! Number . isInteger ( position ) )
718
+ position = - 1 ;
719
+
700
720
function wrapper ( err , bytesRead ) {
701
721
// Retain a reference to buffer so that it can't be GC'ed too soon.
702
722
callback && callback ( err , bytesRead || 0 , buffer ) ;
703
723
}
704
724
705
- var req = new FSReqWrap ( ) ;
725
+ const req = new FSReqWrap ( ) ;
706
726
req . oncomplete = wrapper ;
707
727
708
728
binding . read ( fd , buffer , offset , length , position , req ) ;
@@ -712,10 +732,30 @@ Object.defineProperty(fs.read, internalUtil.customPromisifyArgs,
712
732
{ value : [ 'bytesRead' , 'buffer' ] , enumerable : false } ) ;
713
733
714
734
fs . readSync = function ( fd , buffer , offset , length , position ) {
735
+ if ( ! Number . isInteger ( fd ) )
736
+ throw new errors . TypeError ( 'ERR_INVALID_ARG_TYPE' , 'fd' , 'number' ) ;
737
+ if ( fd < 0 || fd > 0xFFFFFFFF )
738
+ throw new errors . RangeError ( 'ERR_OUT_OF_RANGE' , 'fd' ) ;
739
+ if ( ! isUint8Array ( buffer ) )
740
+ throw new errors . TypeError ( 'ERR_INVALID_ARG_TYPE' , 'buffer' ,
741
+ [ 'Buffer' , 'Uint8Array' ] ) ;
742
+
743
+ offset |= 0 ;
744
+ length |= 0 ;
745
+
715
746
if ( length === 0 ) {
716
747
return 0 ;
717
748
}
718
749
750
+ if ( offset < 0 || offset >= buffer . length )
751
+ throw new errors . RangeError ( 'ERR_OUT_OF_RANGE' , 'offset' ) ;
752
+
753
+ if ( length < 0 || offset + length > buffer . length )
754
+ throw new errors . RangeError ( 'ERR_OUT_OF_RANGE' , 'length' ) ;
755
+
756
+ if ( ! Number . isInteger ( position ) )
757
+ position = - 1 ;
758
+
719
759
return binding . read ( fd , buffer , offset , length , position ) ;
720
760
} ;
721
761
0 commit comments