]> zoso.dev Git - buffer.git/commitdiff
add length check
authorjkkang <jkkang@smartauth.kr>
Wed, 4 Nov 2020 10:31:35 +0000 (19:31 +0900)
committerjkkang <jkkang@smartauth.kr>
Wed, 4 Nov 2020 10:31:35 +0000 (19:31 +0900)
index.js
test/methods.js

index ba68f7b576bf2333909f597870e616b6858f4086..94c71ea686f2382627d3363433697e1c9c87d9ea 100644 (file)
--- a/index.js
+++ b/index.js
@@ -409,11 +409,15 @@ Buffer.concat = function concat (list, length) {
   for (i = 0; i < list.length; ++i) {
     const buf = list[i]
     if (isInstance(buf, Uint8Array)) {
-      Uint8Array.prototype.set.call(
-        buffer,
-        buf,
-        pos
-      )
+      if (pos + buf.length > buffer.length) {
+        Buffer.from(buf).copy(buffer, pos)
+      } else {
+        Uint8Array.prototype.set.call(
+          buffer,
+          buf,
+          pos
+        )
+      }
     } else if (!Buffer.isBuffer(buf)) {
       throw new TypeError('"list" argument must be an Array of Buffers')
     } else {
index 20f445c6bd51bd347a1d1a25e340522135a24a3b..b1bf75bab4f1885812d8c13e9a33be785ebf6660 100644 (file)
@@ -67,6 +67,13 @@ test('concat() works on Uint8Array instances', function (t) {
   t.end()
 })
 
+test('concat() works on Uint8Array instances for smaller provided totalLength', function (t) {
+  const result = B.concat([new Uint8Array([1, 2]), new Uint8Array([3, 4])], 3)
+  const expected = B.from([1, 2, 3])
+  t.deepEqual(result, expected)
+  t.end()
+})
+
 test('fill', function (t) {
   const b = new B(10)
   b.fill(2)