summaryrefslogtreecommitdiff
path: root/test/addons/parse-encoding
diff options
context:
space:
mode:
authorBen Noordhuis <info@bnoordhuis.nl>2016-06-10 11:36:42 +0200
committerBen Noordhuis <info@bnoordhuis.nl>2016-06-13 11:24:28 +0200
commit6b48324363723dcd0e11444043b6c11f35d52ce2 (patch)
tree57963ceabdf4fa54eba9ff388feca8dd3a4924e7 /test/addons/parse-encoding
parent9ce888274c77e1b91161656e75e990faf9ef548f (diff)
downloadandroid-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.cc36
-rw-r--r--test/addons/parse-encoding/binding.gyp9
-rw-r--r--test/addons/parse-encoding/test.js19
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');