buffer: fix check for .buffer property

isSharedArrayBuffer in fromObject was missing obj.buffer
moved the 'length' in obj check so that it is checked first making
the code slightly more performant and able to handle SharedArrayBuffer
without relying on an explicit check.

Ref: https://github.com/nodejs/node/pull/8510
PR-URL: https://github.com/nodejs/node/pull/8739
Reviewed-By: Ilkka Myller <ilkka.myller@nodefield.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
This commit is contained in:
Ojas Shirekar 2016-09-23 20:01:04 +05:30 committed by Anna Henningsen
parent 647e8e5ae4
commit 2154bc89d8
No known key found for this signature in database
GPG Key ID: D8B9F5AEAE84E4CF
2 changed files with 4 additions and 2 deletions

View File

@ -268,8 +268,8 @@ function fromObject(obj) {
}
if (obj) {
if (isArrayBuffer(obj.buffer) || 'length' in obj ||
isSharedArrayBuffer(obj)) {
if ('length' in obj || isArrayBuffer(obj.buffer) ||
isSharedArrayBuffer(obj.buffer)) {
if (typeof obj.length !== 'number' || obj.length !== obj.length) {
return new FastBuffer();
}

View File

@ -27,3 +27,5 @@ assert.deepStrictEqual(arr_buf, ar_buf, 0);
// Checks for calling Buffer.byteLength on a SharedArrayBuffer
assert.strictEqual(Buffer.byteLength(sab), sab.byteLength, 0);
assert.doesNotThrow(() => Buffer.from({buffer: sab}));