diff options
author | James M Snell <jasnell@gmail.com> | 2016-06-07 16:03:27 -0700 |
---|---|---|
committer | James M Snell <jasnell@gmail.com> | 2016-06-21 09:28:38 -0700 |
commit | 6dd093da261bc12fe5c2d2669eaca96ef4583f10 (patch) | |
tree | c5e59fdade5983d4b13279aafd5329b5573dd49d /lib/string_decoder.js | |
parent | 193afef3b03ecb65c4905843f4bca7b5d7b2ea31 (diff) | |
download | android-node-v8-6dd093da261bc12fe5c2d2669eaca96ef4583f10.tar.gz android-node-v8-6dd093da261bc12fe5c2d2669eaca96ef4583f10.tar.bz2 android-node-v8-6dd093da261bc12fe5c2d2669eaca96ef4583f10.zip |
buffer,string_decoder: consolidate encoding validation logic
Buffer.isEncoding and string_decoder.normalizeEncoding shared
quite a bit of logic. This moves the primary logic into
internal/util. The userland modules that monkey patch Buffer.isEncoding
should still work.
PR-URL: https://github.com/nodejs/node/pull/7207
Reviewed-By: Brian White <mscdex@mscdex.net>
Reviewed-By: Trevor Norris <trev.norris@gmail.com>
Diffstat (limited to 'lib/string_decoder.js')
-rw-r--r-- | lib/string_decoder.js | 35 |
1 files changed, 7 insertions, 28 deletions
diff --git a/lib/string_decoder.js b/lib/string_decoder.js index 6eb71efc07..005c07ed9e 100644 --- a/lib/string_decoder.js +++ b/lib/string_decoder.js @@ -1,38 +1,17 @@ 'use strict'; const Buffer = require('buffer').Buffer; +const internalUtil = require('internal/util'); +const isEncoding = Buffer[internalUtil.kIsEncodingSymbol]; // Do not cache `Buffer.isEncoding` when checking encoding names as some // modules monkey-patch it to support additional encodings function normalizeEncoding(enc) { - if (!enc) return 'utf8'; - var low; - for (;;) { - switch (enc) { - case 'utf8': - case 'utf-8': - return 'utf8'; - case 'ucs2': - case 'utf16le': - case 'ucs-2': - case 'utf-16le': - return 'utf16le'; - case 'base64': - case 'ascii': - case 'latin1': - case 'binary': - case 'hex': - return enc; - default: - if (low) { - if (!Buffer.isEncoding(enc)) - throw new Error('Unknown encoding: ' + enc); - return enc; - } - low = true; - enc = ('' + enc).toLowerCase(); - } - } + const nenc = internalUtil.normalizeEncoding(enc); + if (typeof nenc !== 'string' && + (Buffer.isEncoding === isEncoding || !Buffer.isEncoding(enc))) + throw new Error(`Unknown encoding: ${enc}`); + return nenc || enc; } // StringDecoder provides an interface for efficiently splitting a series of |