summaryrefslogtreecommitdiff
path: root/src/node_crypto.cc
diff options
context:
space:
mode:
authorAnna Henningsen <anna@addaleax.net>2019-01-27 14:22:34 +0100
committerAnna Henningsen <anna@addaleax.net>2019-01-29 20:02:03 +0100
commit620209628af6c8489300abe5c5b7bee69509ab35 (patch)
tree000acb600004b8ab7c4f1f592108fa7910b41b79 /src/node_crypto.cc
parent77fa310949cf926bf7befffff32616cb1ba1c41b (diff)
downloadandroid-node-v8-620209628af6c8489300abe5c5b7bee69509ab35.tar.gz
android-node-v8-620209628af6c8489300abe5c5b7bee69509ab35.tar.bz2
android-node-v8-620209628af6c8489300abe5c5b7bee69509ab35.zip
src: pass along errors from KeyObject instantiation
PR-URL: https://github.com/nodejs/node/pull/25734 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Gus Caplan <me@gus.host>
Diffstat (limited to 'src/node_crypto.cc')
-rw-r--r--src/node_crypto.cc35
1 files changed, 18 insertions, 17 deletions
diff --git a/src/node_crypto.cc b/src/node_crypto.cc
index 270f74153a..be6f22a1ac 100644
--- a/src/node_crypto.cc
+++ b/src/node_crypto.cc
@@ -3329,15 +3329,18 @@ Local<Function> KeyObject::Initialize(Environment* env, Local<Object> target) {
return function;
}
-Local<Object> KeyObject::Create(Environment* env,
- KeyType key_type,
- const ManagedEVPPKey& pkey) {
+MaybeLocal<Object> KeyObject::Create(Environment* env,
+ KeyType key_type,
+ const ManagedEVPPKey& pkey) {
CHECK_NE(key_type, kKeyTypeSecret);
Local<Value> type = Integer::New(env->isolate(), key_type);
- Local<Object> obj =
- env->crypto_key_object_constructor()->NewInstance(env->context(),
- 1, &type)
- .ToLocalChecked();
+ Local<Object> obj;
+ if (!env->crypto_key_object_constructor()
+ ->NewInstance(env->context(), 1, &type)
+ .ToLocal(&obj)) {
+ return MaybeLocal<Object>();
+ }
+
KeyObject* key = Unwrap<KeyObject>(obj);
CHECK(key);
if (key_type == kKeyTypePublic)
@@ -5825,24 +5828,22 @@ class GenerateKeyPairJob : public CryptoJob {
if (public_key_encoding_.output_key_object_) {
// Note that this has the downside of containing sensitive data of the
// private key.
- *pubkey = KeyObject::Create(env, kKeyTypePublic, pkey_);
+ if (!KeyObject::Create(env, kKeyTypePublic, pkey_).ToLocal(pubkey))
+ return false;
} else {
- MaybeLocal<Value> maybe_pubkey =
- WritePublicKey(env, pkey_.get(), public_key_encoding_);
- if (maybe_pubkey.IsEmpty())
+ if (!WritePublicKey(env, pkey_.get(), public_key_encoding_)
+ .ToLocal(pubkey))
return false;
- *pubkey = maybe_pubkey.ToLocalChecked();
}
// Now do the same for the private key.
if (private_key_encoding_.output_key_object_) {
- *privkey = KeyObject::Create(env, kKeyTypePrivate, pkey_);
+ if (!KeyObject::Create(env, kKeyTypePrivate, pkey_).ToLocal(privkey))
+ return false;
} else {
- MaybeLocal<Value> maybe_privkey =
- WritePrivateKey(env, pkey_.get(), private_key_encoding_);
- if (maybe_privkey.IsEmpty())
+ if (!WritePrivateKey(env, pkey_.get(), private_key_encoding_)
+ .ToLocal(privkey))
return false;
- *privkey = maybe_privkey.ToLocalChecked();
}
return true;