]> zoso.dev Git - buffer.git/commitdiff
Fix Buffer.from for SharedArrayBuffer
authorNiklas Mischkulnig <mischnic@users.noreply.github.com>
Tue, 25 Feb 2020 14:01:34 +0000 (15:01 +0100)
committerNiklas Mischkulnig <mischnic@users.noreply.github.com>
Tue, 25 Feb 2020 14:07:41 +0000 (15:07 +0100)
index.js
package.json
test/node/test-buffer-alloc.js

index 19b0468a0abe20e311c0015cb694415e45fed5a7..8f8b708111eaf9cb9eaa0b4bb2e3ab3fec9e448b 100644 (file)
--- a/index.js
+++ b/index.js
@@ -142,6 +142,11 @@ function from (value, encodingOrOffset, length) {
     return fromArrayBuffer(value, encodingOrOffset, length)
   }
 
+  if (isInstance(value, SharedArrayBuffer) ||
+      (value && isInstance(value.buffer, SharedArrayBuffer))) {
+    return fromArrayBuffer(value, encodingOrOffset, length)
+  }
+
   if (typeof value === 'number') {
     throw new TypeError(
       'The "value" argument must not be of type number. Received type number'
index 9d9c6e07184205ae60c13f03fafe453545daf1f4..494c282355b84b49acef5773d3d8af8d4a60ef22 100644 (file)
@@ -74,6 +74,9 @@
       "test/common.js",
       "test/_polyfill.js",
       "perf/**/*.js"
+    ],
+    "globals": [
+      "SharedArrayBuffer"
     ]
   }
 }
index 030bad35e49a859045b6d4d0d9fbfafa4fbdbea7..5d96e0a490c8fe5ea3617fcab016c89785f990a3 100644 (file)
@@ -51,6 +51,14 @@ assert.strictEqual(0, d.length);
     assert.deepStrictEqual(value, ui32[key]);
   }
 }
+{
+  const sab = new SharedArrayBuffer(Uint8Array.BYTES_PER_ELEMENT * 4);
+  const ui32 = new Uint8Array(sab).fill(42);
+  const e = Buffer(sab);
+  for (const [key, value] of e.entries()) {
+    assert.deepStrictEqual(value, ui32[key]);
+  }
+}
 
 // Test invalid encoding for Buffer.toString
 assert.throws(() => b.toString('invalid'),