Skip to content

Commit 300ea73

Browse files
maclover7joyeecheung
authored andcommitted
fs: extract out validateOffsetLengthWrite function
PR-URL: #17682 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Anatoli Papirovski <apapirovski@mac.com> Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Tobias Nießen <tniessen@tnie.de>
1 parent 8983405 commit 300ea73

File tree

1 file changed

+17
-10
lines changed

1 file changed

+17
-10
lines changed

lib/fs.js

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)