@@ -903,7 +903,20 @@ MaybeLocal<Object> X509Certificate::New(Environment* env,
903
903
if (!ctor->NewInstance (env->context ()).ToLocal (&obj))
904
904
return MaybeLocal<Object>();
905
905
906
- new X509Certificate (env, obj, std::move (cert), issuer_chain);
906
+ Local<Object> issuer_chain_obj;
907
+ if (issuer_chain != nullptr && sk_X509_num (issuer_chain)) {
908
+ X509Pointer cert (X509_dup (sk_X509_value (issuer_chain, 0 )));
909
+ sk_X509_delete (issuer_chain, 0 );
910
+ auto maybeObj =
911
+ sk_X509_num (issuer_chain)
912
+ ? X509Certificate::New (env, std::move (cert), issuer_chain)
913
+ : X509Certificate::New (env, std::move (cert));
914
+ if (!maybeObj.ToLocal (&issuer_chain_obj)) [[unlikely]] {
915
+ return MaybeLocal<Object>();
916
+ }
917
+ }
918
+
919
+ new X509Certificate (env, obj, std::move (cert), issuer_chain_obj);
907
920
return scope.Escape (obj);
908
921
}
909
922
@@ -948,24 +961,15 @@ v8::MaybeLocal<v8::Value> X509Certificate::toObject(Environment* env,
948
961
return X509ToObject (env, cert).FromMaybe (Local<Value>());
949
962
}
950
963
951
- X509Certificate::X509Certificate (
952
- Environment* env,
953
- Local<Object> object,
954
- std::shared_ptr<ManagedX509> cert,
955
- STACK_OF (X509)* issuer_chain)
956
- : BaseObject(env, object),
957
- cert_(std::move(cert)) {
964
+ X509Certificate::X509Certificate (Environment* env,
965
+ Local<Object> object,
966
+ std::shared_ptr<ManagedX509> cert,
967
+ Local<Object> issuer_chain)
968
+ : BaseObject(env, object), cert_(std::move(cert)) {
958
969
MakeWeak ();
959
970
960
- if (issuer_chain != nullptr && sk_X509_num (issuer_chain)) {
961
- X509Pointer cert (X509_dup (sk_X509_value (issuer_chain, 0 )));
962
- sk_X509_delete (issuer_chain, 0 );
963
- Local<Object> obj = sk_X509_num (issuer_chain)
964
- ? X509Certificate::New (env, std::move (cert), issuer_chain)
965
- .ToLocalChecked ()
966
- : X509Certificate::New (env, std::move (cert))
967
- .ToLocalChecked ();
968
- issuer_cert_.reset (Unwrap<X509Certificate>(obj));
971
+ if (!issuer_chain.IsEmpty ()) {
972
+ issuer_cert_.reset (Unwrap<X509Certificate>(issuer_chain));
969
973
}
970
974
}
971
975
0 commit comments