diff options
author | Ben Noordhuis <info@bnoordhuis.nl> | 2016-06-10 11:36:42 +0200 |
---|---|---|
committer | Ben Noordhuis <info@bnoordhuis.nl> | 2016-06-13 11:24:28 +0200 |
commit | 6b48324363723dcd0e11444043b6c11f35d52ce2 (patch) | |
tree | 57963ceabdf4fa54eba9ff388feca8dd3a4924e7 /test/addons/parse-encoding | |
parent | 9ce888274c77e1b91161656e75e990faf9ef548f (diff) | |
download | android-node-v8-6b48324363723dcd0e11444043b6c11f35d52ce2.tar.gz android-node-v8-6b48324363723dcd0e11444043b6c11f35d52ce2.tar.bz2 android-node-v8-6b48324363723dcd0e11444043b6c11f35d52ce2.zip |
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>
Diffstat (limited to 'test/addons/parse-encoding')
-rw-r--r-- | test/addons/parse-encoding/binding.cc | 36 | ||||
-rw-r--r-- | test/addons/parse-encoding/binding.gyp | 9 | ||||
-rw-r--r-- | test/addons/parse-encoding/test.js | 19 |
3 files changed, 64 insertions, 0 deletions
diff --git a/test/addons/parse-encoding/binding.cc b/test/addons/parse-encoding/binding.cc new file mode 100644 index 0000000000..def91901f0 --- /dev/null +++ b/test/addons/parse-encoding/binding.cc @@ -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); diff --git a/test/addons/parse-encoding/binding.gyp b/test/addons/parse-encoding/binding.gyp new file mode 100644 index 0000000000..7ede63d94a --- /dev/null +++ b/test/addons/parse-encoding/binding.gyp @@ -0,0 +1,9 @@ +{ + 'targets': [ + { + 'target_name': 'binding', + 'defines': [ 'V8_DEPRECATION_WARNINGS=1' ], + 'sources': [ 'binding.cc' ] + } + ] +} diff --git a/test/addons/parse-encoding/test.js b/test/addons/parse-encoding/test.js new file mode 100644 index 0000000000..6c32374ca6 --- /dev/null +++ b/test/addons/parse-encoding/test.js @@ -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'); |