Skip to content

Commit

Permalink
buffer: remove error for malformatted hex string
Browse files Browse the repository at this point in the history
Remove error message when a hex string of an incorrect length is sent
to .write() or .fill().

PR-URL: #12012
Fixes: #3770
Reviewed-By: Anna Henningsen <[email protected]>
Reviewed-By: Michaël Zasso <[email protected]>
Reviewed-By: Colin Ihrig <[email protected]>
Reviewed-By: Luigi Pinca <[email protected]>
Reviewed-By: Sakthipriyan Vairamani <[email protected]>
  • Loading branch information
Trott committed Mar 28, 2017
1 parent a6f9494 commit 682573c
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 14 deletions.
6 changes: 0 additions & 6 deletions src/node_buffer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -615,9 +615,6 @@ void Fill(const FunctionCallbackInfo<Value>& 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;

Expand Down Expand Up @@ -685,9 +682,6 @@ void StringWrite(const FunctionCallbackInfo<Value>& args) {

Local<String> 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;

Expand Down
10 changes: 6 additions & 4 deletions test/parallel/test-buffer-alloc.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);


Expand Down
18 changes: 14 additions & 4 deletions test/parallel/test-buffer-fill.js
Original file line number Diff line number Diff line change
Expand Up @@ -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');
Expand Down

0 comments on commit 682573c

Please sign in to comment.