diff options
author | Fedor Indutny <fedor@indutny.com> | 2016-03-02 14:43:39 +0300 |
---|---|---|
committer | Fedor Indutny <fedor@indutny.com> | 2016-03-02 21:25:04 +0300 |
commit | b010c8716498dca398e61c388859fea92296feb3 (patch) | |
tree | 7939c49278bcb05bdc34134a4bf4d1824355978a /src | |
parent | 0eda5f503a2fae915ae152bd221b523762a0ef97 (diff) | |
download | android-node-v8-b010c8716498dca398e61c388859fea92296feb3.tar.gz android-node-v8-b010c8716498dca398e61c388859fea92296feb3.tar.bz2 android-node-v8-b010c8716498dca398e61c388859fea92296feb3.zip |
crypto, string_bytes: treat `buffer` str as `utf8`
Do not treat crypto inputs as `binary` strings, convert them to Buffers
using `new Buffer(..., 'utf8')`, or using newly updated StringBytes
APIs.
PR-URL: https://github.com/nodejs/node/pull/5522
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: James M Snell <jasnell@gmail.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/node_crypto.cc | 15 | ||||
-rw-r--r-- | src/string_bytes.cc | 6 |
2 files changed, 10 insertions, 11 deletions
diff --git a/src/node_crypto.cc b/src/node_crypto.cc index 2cdc31ee4b..ccaa2c7657 100644 --- a/src/node_crypto.cc +++ b/src/node_crypto.cc @@ -3369,7 +3369,7 @@ void CipherBase::Update(const FunctionCallbackInfo<Value>& args) { // Only copy the data if we have to, because it's a string if (args[0]->IsString()) { StringBytes::InlineDecoder decoder; - if (!decoder.Decode(env, args[0].As<String>(), args[1], BINARY)) + if (!decoder.Decode(env, args[0].As<String>(), args[1], UTF8)) return; r = cipher->Update(decoder.out(), decoder.size(), &out, &out_len); } else { @@ -3548,7 +3548,7 @@ void Hmac::HmacUpdate(const FunctionCallbackInfo<Value>& args) { bool r; if (args[0]->IsString()) { StringBytes::InlineDecoder decoder; - if (!decoder.Decode(env, args[0].As<String>(), args[1], BINARY)) + if (!decoder.Decode(env, args[0].As<String>(), args[1], UTF8)) return; r = hmac->HmacUpdate(decoder.out(), decoder.size()); } else { @@ -3666,7 +3666,7 @@ void Hash::HashUpdate(const FunctionCallbackInfo<Value>& args) { bool r; if (args[0]->IsString()) { StringBytes::InlineDecoder decoder; - if (!decoder.Decode(env, args[0].As<String>(), args[1], BINARY)) + if (!decoder.Decode(env, args[0].As<String>(), args[1], UTF8)) return; r = hash->HashUpdate(decoder.out(), decoder.size()); } else { @@ -3818,7 +3818,7 @@ void Sign::SignUpdate(const FunctionCallbackInfo<Value>& args) { Error err; if (args[0]->IsString()) { StringBytes::InlineDecoder decoder; - if (!decoder.Decode(env, args[0].As<String>(), args[1], BINARY)) + if (!decoder.Decode(env, args[0].As<String>(), args[1], UTF8)) return; err = sign->SignUpdate(decoder.out(), decoder.size()); } else { @@ -4020,7 +4020,7 @@ void Verify::VerifyUpdate(const FunctionCallbackInfo<Value>& args) { Error err; if (args[0]->IsString()) { StringBytes::InlineDecoder decoder; - if (!decoder.Decode(env, args[0].As<String>(), args[1], BINARY)) + if (!decoder.Decode(env, args[0].As<String>(), args[1], UTF8)) return; err = verify->VerifyUpdate(decoder.out(), decoder.size()); } else { @@ -4119,12 +4119,11 @@ void Verify::VerifyFinal(const FunctionCallbackInfo<Value>& args) { THROW_AND_RETURN_IF_NOT_STRING_OR_BUFFER(args[1]); - // BINARY works for both buffers and binary strings. - enum encoding encoding = BINARY; + enum encoding encoding = UTF8; if (args.Length() >= 3) { encoding = ParseEncoding(env->isolate(), args[2]->ToString(env->isolate()), - BINARY); + UTF8); } ssize_t hlen = StringBytes::Size(env->isolate(), args[1], encoding); diff --git a/src/string_bytes.cc b/src/string_bytes.cc index a916caf75e..d9ca6e565e 100644 --- a/src/string_bytes.cc +++ b/src/string_bytes.cc @@ -368,7 +368,6 @@ size_t StringBytes::Write(Isolate* isolate, switch (encoding) { case ASCII: case BINARY: - case BUFFER: if (is_extern && str->IsOneByte()) { memcpy(buf, data, nbytes); } else { @@ -379,6 +378,7 @@ size_t StringBytes::Write(Isolate* isolate, *chars_written = nbytes; break; + case BUFFER: case UTF8: nbytes = str->WriteUtf8(buf, buflen, chars_written, flags); break; @@ -480,11 +480,11 @@ size_t StringBytes::StorageSize(Isolate* isolate, switch (encoding) { case BINARY: - case BUFFER: case ASCII: data_size = str->Length(); break; + case BUFFER: case UTF8: // A single UCS2 codepoint never takes up more than 3 utf8 bytes. // It is an exercise for the caller to decide when a string is @@ -532,11 +532,11 @@ size_t StringBytes::Size(Isolate* isolate, switch (encoding) { case BINARY: - case BUFFER: case ASCII: data_size = str->Length(); break; + case BUFFER: case UTF8: data_size = str->Utf8Length(); break; |