From 951e3aa334376efd7b006acad66c446cae9ba738 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Zasso?= Date: Fri, 29 Jan 2016 14:00:02 +0100 Subject: [PATCH] buffer: validate list elements in Buffer.concat Without this change, if any of the elements in the list to be concatenated is not a Buffer instance, the method fails with "buf.copy is not a function". Make an isBuffer check before using the copy method so that we can throw with a better message. Fixes: https://github.com/nodejs/node/issues/4949 PR-URL: https://github.com/nodejs/node/pull/4951 Reviewed-By: Colin Ihrig Reviewed-By: Sakthipriyan Vairamani Reviewed-By: Roman Klauke --- lib/buffer.js | 2 ++ test/parallel/test-buffer-concat.js | 18 ++++++++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/lib/buffer.js b/lib/buffer.js index 33bea88d9b6fdd..c1f240edb4241c 100644 --- a/lib/buffer.js +++ b/lib/buffer.js @@ -241,6 +241,8 @@ Buffer.concat = function(list, length) { var pos = 0; for (let i = 0; i < list.length; i++) { var buf = list[i]; + if (!Buffer.isBuffer(buf)) + throw new TypeError('"list" argument must be an Array of Buffers'); buf.copy(buffer, pos); pos += buf.length; } diff --git a/test/parallel/test-buffer-concat.js b/test/parallel/test-buffer-concat.js index 07f763a76dc419..7aec8117204b62 100644 --- a/test/parallel/test-buffer-concat.js +++ b/test/parallel/test-buffer-concat.js @@ -20,8 +20,18 @@ assert(flatOne !== one[0]); assert(flatLong.toString() === (new Array(10 + 1).join('asdf'))); assert(flatLongLen.toString() === (new Array(10 + 1).join('asdf'))); -assert.throws(function() { - Buffer.concat([42]); -}, TypeError); +assertWrongList(); +assertWrongList(null); +assertWrongList(new Buffer('hello')); +assertWrongList([42]); +assertWrongList(['hello', 'world']); +assertWrongList(['hello', new Buffer('world')]); -console.log('ok'); +function assertWrongList(value) { + assert.throws(function() { + Buffer.concat(value); + }, function(err) { + return err instanceof TypeError && + err.message === '"list" argument must be an Array of Buffers'; + }); +}