Skip to content
Closed
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
fs: extract out validateOffsetLengthWrite function
  • Loading branch information
maclover7 committed Dec 31, 2017
commit b2a72961936af5ae69be22e01c346479d799d1c7
27 changes: 17 additions & 10 deletions lib/fs.js
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,21 @@ function validateOffsetLengthRead(offset, length, bufferLength) {
}
}

function validateOffsetLengthWrite(offset, length, byteLength) {
let err;

if (offset > byteLength) {
err = new errors.RangeError('ERR_OUT_OF_RANGE', 'offset');
} else if (offset + length > byteLength || offset + length > kMaxLength) {
err = new errors.RangeError('ERR_OUT_OF_RANGE', 'length');
}

if (err !== undefined) {
Error.captureStackTrace(err, validateOffsetLengthWrite);
throw err;
}
}

// Special case of `makeCallback()` that is specific to async `*stat()` calls as
// an optimization, since the data passed back to the callback needs to be
// transformed anyway.
Expand Down Expand Up @@ -826,11 +841,7 @@ fs.write = function(fd, buffer, offset, length, position, callback) {
length = buffer.length - offset;
if (typeof position !== 'number')
position = null;
const byteLength = buffer.byteLength;
if (offset > byteLength)
throw new errors.RangeError('ERR_OUT_OF_RANGE', 'offset');
if (offset + length > byteLength || offset + length > kMaxLength)
throw new errors.RangeError('ERR_OUT_OF_RANGE', 'length');
validateOffsetLengthWrite(offset, length, buffer.byteLength);
return binding.writeBuffer(fd, buffer, offset, length, position, req);
}

Expand Down Expand Up @@ -865,11 +876,7 @@ fs.writeSync = function(fd, buffer, offset, length, position) {
offset = 0;
if (typeof length !== 'number')
length = buffer.length - offset;
const byteLength = buffer.byteLength;
if (offset > byteLength)
throw new errors.RangeError('ERR_OUT_OF_RANGE', 'offset');
if (offset + length > byteLength || offset + length > kMaxLength)
throw new errors.RangeError('ERR_OUT_OF_RANGE', 'length');
validateOffsetLengthWrite(offset, length, buffer.byteLength);
return binding.writeBuffer(fd, buffer, offset, length, position);
}
if (typeof buffer !== 'string')
Expand Down