src: fix erroneous fallthrough in ParseEncoding()
A missing 'break' statement unintentionally allowed "linary" and "luffer" as alternatives for "binary" and "buffer". Regression introduced in commit 54cc7212 ("buffer: introduce latin1 encoding term".) PR-URL: https://github.com/nodejs/node/pull/7262 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Trevor Norris <trev.norris@gmail.com>
This commit is contained in:
parent
9ce888274c
commit
6b48324363
2
Makefile
2
Makefile
@ -145,7 +145,7 @@ ADDONS_BINDING_GYPS := \
|
|||||||
|
|
||||||
ADDONS_BINDING_SOURCES := \
|
ADDONS_BINDING_SOURCES := \
|
||||||
$(filter-out test/addons/??_*/*.cc, $(wildcard test/addons/*/*.cc)) \
|
$(filter-out test/addons/??_*/*.cc, $(wildcard test/addons/*/*.cc)) \
|
||||||
$(filter-out test/addons/??_*/*.h, $(wildcard test/addons/*/*.h)) \
|
$(filter-out test/addons/??_*/*.h, $(wildcard test/addons/*/*.h))
|
||||||
|
|
||||||
# Implicitly depends on $(NODE_EXE), see the build-addons rule for rationale.
|
# Implicitly depends on $(NODE_EXE), see the build-addons rule for rationale.
|
||||||
# Depends on node-gyp package.json so that build-addons is (re)executed when
|
# Depends on node-gyp package.json so that build-addons is (re)executed when
|
||||||
|
@ -1319,6 +1319,7 @@ enum encoding ParseEncoding(const char* encoding,
|
|||||||
if (strncmp(encoding + 2, "tin1", 4) == 0)
|
if (strncmp(encoding + 2, "tin1", 4) == 0)
|
||||||
return LATIN1;
|
return LATIN1;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
case 'b':
|
case 'b':
|
||||||
// binary
|
// binary
|
||||||
if (encoding[1] == 'i') {
|
if (encoding[1] == 'i') {
|
||||||
|
36
test/addons/parse-encoding/binding.cc
Normal file
36
test/addons/parse-encoding/binding.cc
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
#include "node.h"
|
||||||
|
#include "v8.h"
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
#define ENCODING_MAP(V) \
|
||||||
|
V(ASCII) \
|
||||||
|
V(BASE64) \
|
||||||
|
V(BUFFER) \
|
||||||
|
V(HEX) \
|
||||||
|
V(LATIN1) \
|
||||||
|
V(UCS2) \
|
||||||
|
V(UTF8) \
|
||||||
|
|
||||||
|
void ParseEncoding(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
||||||
|
const node::encoding encoding =
|
||||||
|
node::ParseEncoding(args.GetIsolate(), args[0],
|
||||||
|
static_cast<node::encoding>(-1));
|
||||||
|
const char* encoding_name = "UNKNOWN";
|
||||||
|
#define V(name) if (encoding == node::name) encoding_name = #name;
|
||||||
|
ENCODING_MAP(V)
|
||||||
|
#undef V
|
||||||
|
auto encoding_string =
|
||||||
|
v8::String::NewFromUtf8(args.GetIsolate(), encoding_name,
|
||||||
|
v8::NewStringType::kNormal)
|
||||||
|
.ToLocalChecked();
|
||||||
|
args.GetReturnValue().Set(encoding_string);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Initialize(v8::Local<v8::Object> target) {
|
||||||
|
NODE_SET_METHOD(target, "parseEncoding", ParseEncoding);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // anonymous namespace
|
||||||
|
|
||||||
|
NODE_MODULE(binding, Initialize);
|
9
test/addons/parse-encoding/binding.gyp
Normal file
9
test/addons/parse-encoding/binding.gyp
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
'targets': [
|
||||||
|
{
|
||||||
|
'target_name': 'binding',
|
||||||
|
'defines': [ 'V8_DEPRECATION_WARNINGS=1' ],
|
||||||
|
'sources': [ 'binding.cc' ]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
19
test/addons/parse-encoding/test.js
Normal file
19
test/addons/parse-encoding/test.js
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
require('../../common');
|
||||||
|
const assert = require('assert');
|
||||||
|
const { parseEncoding } = require('./build/Release/binding');
|
||||||
|
|
||||||
|
assert.strictEqual(parseEncoding(''), 'UNKNOWN');
|
||||||
|
|
||||||
|
assert.strictEqual(parseEncoding('ascii'), 'ASCII');
|
||||||
|
assert.strictEqual(parseEncoding('base64'), 'BASE64');
|
||||||
|
assert.strictEqual(parseEncoding('binary'), 'LATIN1');
|
||||||
|
assert.strictEqual(parseEncoding('buffer'), 'BUFFER');
|
||||||
|
assert.strictEqual(parseEncoding('hex'), 'HEX');
|
||||||
|
assert.strictEqual(parseEncoding('latin1'), 'LATIN1');
|
||||||
|
assert.strictEqual(parseEncoding('ucs2'), 'UCS2');
|
||||||
|
assert.strictEqual(parseEncoding('utf8'), 'UTF8');
|
||||||
|
|
||||||
|
assert.strictEqual(parseEncoding('linary'), 'UNKNOWN');
|
||||||
|
assert.strictEqual(parseEncoding('luffer'), 'UNKNOWN');
|
Loading…
x
Reference in New Issue
Block a user