mirror of
https://github.com/nodejs/node.git
synced 2025-05-03 22:25:44 +00:00
crypto: fix getDecoder() encoding check
Normalize the encoding in getDecoder() before using it. Fixes an AssertionError: "Cannot change encoding" when encoding is "ucs2", "ucs-2" or "utf-16le" Fixes: https://github.com/nodejs/node/issues/8236 PR-URL: https://github.com/nodejs/node/pull/8301 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
parent
983775d457
commit
a6f7b13d02
@ -100,7 +100,7 @@ Hmac.prototype._transform = Hash.prototype._transform;
|
|||||||
|
|
||||||
|
|
||||||
function getDecoder(decoder, encoding) {
|
function getDecoder(decoder, encoding) {
|
||||||
if (encoding === 'utf-8') encoding = 'utf8'; // Normalize encoding.
|
encoding = internalUtil.normalizeEncoding(encoding);
|
||||||
decoder = decoder || new StringDecoder(encoding);
|
decoder = decoder || new StringDecoder(encoding);
|
||||||
assert(decoder.encoding === encoding, 'Cannot change encoding');
|
assert(decoder.encoding === encoding, 'Cannot change encoding');
|
||||||
return decoder;
|
return decoder;
|
||||||
|
@ -113,3 +113,29 @@ testCipher2(Buffer.from('0123456789abcdef'));
|
|||||||
c.update('update', 'utf-8');
|
c.update('update', 'utf-8');
|
||||||
c.final('utf8'); // Should not throw.
|
c.final('utf8'); // Should not throw.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Regression tests for https://github.com/nodejs/node/issues/8236.
|
||||||
|
{
|
||||||
|
const key = '0123456789abcdef';
|
||||||
|
const plaintext = 'Top secret!!!';
|
||||||
|
const c = crypto.createCipher('aes192', key);
|
||||||
|
var ciph = c.update(plaintext, 'utf16le', 'base64');
|
||||||
|
ciph += c.final('base64');
|
||||||
|
|
||||||
|
var decipher = crypto.createDecipher('aes192', key);
|
||||||
|
|
||||||
|
var txt;
|
||||||
|
assert.doesNotThrow(() => txt = decipher.update(ciph, 'base64', 'ucs2'));
|
||||||
|
assert.doesNotThrow(() => txt += decipher.final('ucs2'));
|
||||||
|
assert.strictEqual(txt, plaintext, 'decrypted result in ucs2');
|
||||||
|
|
||||||
|
decipher = crypto.createDecipher('aes192', key);
|
||||||
|
assert.doesNotThrow(() => txt = decipher.update(ciph, 'base64', 'ucs-2'));
|
||||||
|
assert.doesNotThrow(() => txt += decipher.final('ucs-2'));
|
||||||
|
assert.strictEqual(txt, plaintext, 'decrypted result in ucs-2');
|
||||||
|
|
||||||
|
decipher = crypto.createDecipher('aes192', key);
|
||||||
|
assert.doesNotThrow(() => txt = decipher.update(ciph, 'base64', 'utf-16le'));
|
||||||
|
assert.doesNotThrow(() => txt += decipher.final('utf-16le'));
|
||||||
|
assert.strictEqual(txt, plaintext, 'decrypted result in utf-16le');
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user