Browse Source

buffer: fix single digit hex string handling

Fixes single digit hex strings not raising TypeError on Buffer creation.

Fixes: https://github.com/nodejs/node/issues/6770
PR-URL: https://github.com/nodejs/node/pull/6775
Reviewed-By: Anna Henningsen <anna@addaleax.net>
v6.x
Justin Sprigg 9 years ago
committed by Rod Vagg
parent
commit
98270c6d15
  1. 6
      lib/buffer.js
  2. 9
      test/parallel/test-buffer.js

6
lib/buffer.js

@ -225,11 +225,11 @@ function fromString(string, encoding) {
if (!Buffer.isEncoding(encoding)) if (!Buffer.isEncoding(encoding))
throw new TypeError('"encoding" must be a valid string encoding'); throw new TypeError('"encoding" must be a valid string encoding');
var length = byteLength(string, encoding); if (string.length === 0)
if (length === 0)
return Buffer.alloc(0); return Buffer.alloc(0);
var length = byteLength(string, encoding);
if (length >= (Buffer.poolSize >>> 1)) if (length >= (Buffer.poolSize >>> 1))
return binding.createFromString(string, encoding); return binding.createFromString(string, encoding);

9
test/parallel/test-buffer.js

@ -749,6 +749,15 @@ for (let i = 0; i < 256; i++) {
assert.equal(hexb2[i], hexb[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. // test an invalid slice end.
console.log('Try to slice off the end of the buffer'); console.log('Try to slice off the end of the buffer');

Loading…
Cancel
Save