summaryrefslogtreecommitdiff
path: root/lib/string_decoder.js
diff options
context:
space:
mode:
authorJames M Snell <jasnell@gmail.com>2016-06-07 16:03:27 -0700
committerJames M Snell <jasnell@gmail.com>2016-06-21 09:28:38 -0700
commit6dd093da261bc12fe5c2d2669eaca96ef4583f10 (patch)
treec5e59fdade5983d4b13279aafd5329b5573dd49d /lib/string_decoder.js
parent193afef3b03ecb65c4905843f4bca7b5d7b2ea31 (diff)
downloadandroid-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.js35
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