From 9d94cc584e50066150b4d2819eb3e7657a0edb4a Mon Sep 17 00:00:00 2001 From: Trevor Norris Date: Wed, 6 Apr 2016 16:04:40 -0600 Subject: [PATCH] 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 --- src/node_internals.h | 2 +- test/parallel/test-buffer-alloc.js | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/node_internals.h b/src/node_internals.h index efdc82e531fe82..485ba18b3c742e 100644 --- a/src/node_internals.h +++ b/src/node_internals.h @@ -169,7 +169,7 @@ inline MUST_USE_RESULT bool ParseArrayIndex(v8::Local arg, return true; } - int32_t tmp_i = arg->Uint32Value(); + int64_t tmp_i = arg->IntegerValue(); if (tmp_i < 0) return false; diff --git a/test/parallel/test-buffer-alloc.js b/test/parallel/test-buffer-alloc.js index b88b12f7f67526..733fa105043c1c 100644 --- a/test/parallel/test-buffer-alloc.js +++ b/test/parallel/test-buffer-alloc.js @@ -1440,3 +1440,9 @@ assert.equal(Buffer.prototype.parent, undefined); assert.equal(Buffer.prototype.offset, undefined); assert.equal(SlowBuffer.prototype.parent, 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/);