buffer: standardize array index check
ParseArrayIndex() was requesting a Uint32Value(), but assigning it to an in32_t. This caused slight differences in error message reported in edge cases of argument parsing. Fixed by getting the IntegerValue() before checking if the value is < 0. Added test of API that was affected. PR-URL: https://github.com/nodejs/node/pull/6084 Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
parent
945454894b
commit
9d94cc584e
@ -169,7 +169,7 @@ inline MUST_USE_RESULT bool ParseArrayIndex(v8::Local<v8::Value> arg,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t tmp_i = arg->Uint32Value();
|
int64_t tmp_i = arg->IntegerValue();
|
||||||
|
|
||||||
if (tmp_i < 0)
|
if (tmp_i < 0)
|
||||||
return false;
|
return false;
|
||||||
|
@ -1440,3 +1440,9 @@ assert.equal(Buffer.prototype.parent, undefined);
|
|||||||
assert.equal(Buffer.prototype.offset, undefined);
|
assert.equal(Buffer.prototype.offset, undefined);
|
||||||
assert.equal(SlowBuffer.prototype.parent, undefined);
|
assert.equal(SlowBuffer.prototype.parent, undefined);
|
||||||
assert.equal(SlowBuffer.prototype.offset, undefined);
|
assert.equal(SlowBuffer.prototype.offset, undefined);
|
||||||
|
|
||||||
|
|
||||||
|
// Test that ParseArrayIndex handles full uint32
|
||||||
|
assert.throws(function() {
|
||||||
|
Buffer.from(new ArrayBuffer(0), -1 >>> 0);
|
||||||
|
}, /RangeError: 'offset' is out of bounds/);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user