mirror of https://github.com/nodejs/node.git
src: network interface names are UTF-8 encoded
Fixes a bug that was introduced in commit f674b09
when v8::String::New()
calls were replaced with calls to one-byte, two-byte and UTF-8 versions.
It turns out that for network interface names, using a one-byte encoding
can produce the wrong results on Windows. Use UTF-8 instead.
Libuv on Windows correctly encodes non-ASCII characters in the interface
name as UTF-8. On Unices however, the interface name is just a binary
string with no particular encoding; that's why on UNIX platforms, we
keep interpreting it as a one-byte string.
Fixes joyent/node#8633.
PR-URL: https://github.com/node-forward/node/pull/44
Reviewed-By: Bert Belder <bertbelder@gmail.com>
pull/1/head
parent
7ab73ff735
commit
e13663d647
|
@ -231,7 +231,17 @@ static void GetInterfaceAddresses(const FunctionCallbackInfo<Value>& args) {
|
|||
}
|
||||
|
||||
for (i = 0; i < count; i++) {
|
||||
name = OneByteString(env->isolate(), interfaces[i].name);
|
||||
const char* const raw_name = interfaces[i].name;
|
||||
|
||||
// On Windows, the interface name is the UTF8-encoded friendly name and may
|
||||
// contain non-ASCII characters. On UNIX, it's just a binary string with
|
||||
// no particular encoding but we treat it as a one-byte Latin-1 string.
|
||||
#ifdef _WIN32
|
||||
name = String::NewFromUtf8(env->isolate(), raw_name);
|
||||
#else
|
||||
name = OneByteString(env->isolate(), raw_name);
|
||||
#endif
|
||||
|
||||
if (ret->Has(name)) {
|
||||
ifarr = Local<Array>::Cast(ret->Get(name));
|
||||
} else {
|
||||
|
|
Loading…
Reference in New Issue