From 4c453dbf88cb04ba67c6c4262b91147f5d5a2258 Mon Sep 17 00:00:00 2001 From: Nikolai Vavilov Date: Thu, 2 Feb 2017 16:39:39 +0200 Subject: [PATCH 1/4] buffer: stricter argument checking in toString This prevents the confusing behavior of `buf.toString(0, 5)` by disallowing passing `0` as the encoding. --- lib/buffer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/buffer.js b/lib/buffer.js index 0a8724bda48e48..cb93d7e2488f3b 100644 --- a/lib/buffer.js +++ b/lib/buffer.js @@ -463,7 +463,7 @@ function slowToString(encoding, start, end) { if (end <= start) return ''; - if (!encoding) encoding = 'utf8'; + if (encoding === undefined) encoding = 'utf8'; while (true) { switch (encoding) { From 0635c4ac4bfcffb13a5cbf809dbf10879a269f7d Mon Sep 17 00:00:00 2001 From: Nikolai Vavilov Date: Thu, 2 Feb 2017 19:35:16 +0200 Subject: [PATCH 2/4] add test --- test/parallel/test-buffer-tostring-range.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/parallel/test-buffer-tostring-range.js b/test/parallel/test-buffer-tostring-range.js index c7ab356e4661ff..7781489e620f9e 100644 --- a/test/parallel/test-buffer-tostring-range.js +++ b/test/parallel/test-buffer-tostring-range.js @@ -82,3 +82,6 @@ assert.strictEqual(rangeBuffer.toString('ascii', 0, true), 'a'); assert.strictEqual(rangeBuffer.toString({toString: function() { return 'ascii'; }}), 'abc'); + +// try toString() with 0 as the encoding +assert.throws(() => rangeBuffer.toString(0, 1, 2), /Unknown encoding/); From 21082996da2876aa9f0038e025d7817f7b994082 Mon Sep 17 00:00:00 2001 From: Nikolai Vavilov Date: Thu, 2 Feb 2017 20:09:00 +0200 Subject: [PATCH 3/4] add test for null, check for full error --- test/parallel/test-buffer-tostring-range.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/test/parallel/test-buffer-tostring-range.js b/test/parallel/test-buffer-tostring-range.js index 7781489e620f9e..d91877a138811e 100644 --- a/test/parallel/test-buffer-tostring-range.js +++ b/test/parallel/test-buffer-tostring-range.js @@ -83,5 +83,6 @@ assert.strictEqual(rangeBuffer.toString({toString: function() { return 'ascii'; }}), 'abc'); -// try toString() with 0 as the encoding -assert.throws(() => rangeBuffer.toString(0, 1, 2), /Unknown encoding/); +// try toString() with 0 and null as the encoding +assert.throws(() => rangeBuffer.toString(0, 1, 2), /^TypeError: Unknown encoding: 0$/); +assert.throws(() => rangeBuffer.toString(null, 1, 2), /^TypeError: Unknown encoding: null$/); From d96ed87a19b1689b91554d2273e8932a7f0dc64d Mon Sep 17 00:00:00 2001 From: Nikolai Vavilov Date: Fri, 3 Feb 2017 21:10:59 +0200 Subject: [PATCH 4/4] fix lint --- test/parallel/test-buffer-tostring-range.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/test/parallel/test-buffer-tostring-range.js b/test/parallel/test-buffer-tostring-range.js index d91877a138811e..a550906912a480 100644 --- a/test/parallel/test-buffer-tostring-range.js +++ b/test/parallel/test-buffer-tostring-range.js @@ -84,5 +84,9 @@ assert.strictEqual(rangeBuffer.toString({toString: function() { }}), 'abc'); // try toString() with 0 and null as the encoding -assert.throws(() => rangeBuffer.toString(0, 1, 2), /^TypeError: Unknown encoding: 0$/); -assert.throws(() => rangeBuffer.toString(null, 1, 2), /^TypeError: Unknown encoding: null$/); +assert.throws(() => { + rangeBuffer.toString(0, 1, 2); +}, /^TypeError: Unknown encoding: 0$/); +assert.throws(() => { + rangeBuffer.toString(null, 1, 2); +}, /^TypeError: Unknown encoding: null$/);