From afa3e1b64bbbeeb65afb31b75f4c72aed079316f Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Thu, 23 Mar 2017 16:27:02 -0700 Subject: [PATCH] buffer: remove error for malformatted hex string Remove error message when a hex string of an incorrect length is sent to .write() or .fill(). Fixes: https://github.com/nodejs/node/issues/3770 --- src/node_buffer.cc | 6 ------ test/parallel/test-buffer-alloc.js | 10 ++++++---- test/parallel/test-buffer-fill.js | 18 ++++++++++++++---- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/node_buffer.cc b/src/node_buffer.cc index 04c0161eddd2ae..d8879094fa9547 100644 --- a/src/node_buffer.cc +++ b/src/node_buffer.cc @@ -615,9 +615,6 @@ void Fill(const FunctionCallbackInfo& args) { enc == UTF8 ? str_obj->Utf8Length() : enc == UCS2 ? str_obj->Length() * sizeof(uint16_t) : str_obj->Length(); - if (enc == HEX && str_length % 2 != 0) - return env->ThrowTypeError("Invalid hex string"); - if (str_length == 0) return; @@ -685,9 +682,6 @@ void StringWrite(const FunctionCallbackInfo& args) { Local str = args[0]->ToString(env->isolate()); - if (encoding == HEX && str->Length() % 2 != 0) - return env->ThrowTypeError("Invalid hex string"); - size_t offset; size_t max_length; diff --git a/test/parallel/test-buffer-alloc.js b/test/parallel/test-buffer-alloc.js index f567c3c806a5d6..901b335d5265df 100644 --- a/test/parallel/test-buffer-alloc.js +++ b/test/parallel/test-buffer-alloc.js @@ -510,11 +510,13 @@ assert.strictEqual(Buffer.from('=bad'.repeat(1e4), 'base64').length, 0); } } -// Test single hex character throws TypeError -// - https://github.com/nodejs/node/issues/6770 -assert.throws(() => Buffer.from('A', 'hex'), TypeError); +// Test single hex character is discarded. +assert.strictEqual(Buffer.from('A', 'hex').length, 0); -// Test single base64 char encodes as 0 +// Test that if a trailing character is discarded, rest of string is processed. +assert.deepStrictEqual(Buffer.from('Abx', 'hex'), Buffer.from('Ab', 'hex')); + +// Test single base64 char encodes as 0. assert.strictEqual(Buffer.from('A', 'base64').length, 0); diff --git a/test/parallel/test-buffer-fill.js b/test/parallel/test-buffer-fill.js index 06a9044bec3103..46ebc79b620727 100644 --- a/test/parallel/test-buffer-fill.js +++ b/test/parallel/test-buffer-fill.js @@ -132,11 +132,21 @@ testBufs('c8a26161', 8, 1, 'hex'); testBufs('61c8b462c8b563c8b6', 4, -1, 'hex'); testBufs('61c8b462c8b563c8b6', 4, 1, 'hex'); testBufs('61c8b462c8b563c8b6', 12, 1, 'hex'); -// Make sure this operation doesn't go on forever -buf1.fill('yKJh', 'hex'); -assert.throws(() => - buf1.fill('\u0222', 'hex'), /^TypeError: Invalid hex string$/); +{ + const buf = Buffer.allocUnsafe(SIZE); + assert.doesNotThrow(() => { + // Make sure this operation doesn't go on forever. + buf.fill('yKJh', 'hex'); + }); +} + +{ + const buf = Buffer.allocUnsafe(SIZE); + assert.doesNotThrow(() => { + buf.fill('\u0222', 'hex'); + }); +} // BASE64 testBufs('YWJj', 'ucs2');