diff --git a/lib/buffer.js b/lib/buffer.js index 515f841fd36507..a4bd2a2f874bda 100644 --- a/lib/buffer.js +++ b/lib/buffer.js @@ -225,11 +225,11 @@ function fromString(string, encoding) { if (!Buffer.isEncoding(encoding)) throw new TypeError('"encoding" must be a valid string encoding'); - var length = byteLength(string, encoding); - - if (length === 0) + if (string.length === 0) return Buffer.alloc(0); + var length = byteLength(string, encoding); + if (length >= (Buffer.poolSize >>> 1)) return binding.createFromString(string, encoding); diff --git a/test/parallel/test-buffer.js b/test/parallel/test-buffer.js index 62fd488efe525e..f48cfc2a328647 100644 --- a/test/parallel/test-buffer.js +++ b/test/parallel/test-buffer.js @@ -749,6 +749,15 @@ for (let i = 0; i < 256; i++) { assert.equal(hexb2[i], hexb[i]); } +// Test single hex character throws TypeError +// - https://github.com/nodejs/node/issues/6770 +assert.throws(function() { + Buffer.from('A', 'hex'); +}, TypeError); + +// Test single base64 char encodes as 0 +assert.strictEqual(Buffer.from('A', 'base64').length, 0); + { // test an invalid slice end. console.log('Try to slice off the end of the buffer');