Skip to content

Commit 78ca223

Browse files
committed
src: improve error handling in crypto_x509
Avoiding use of ToLocalChecked
1 parent f31c880 commit 78ca223

File tree

2 files changed

+17
-12
lines changed

2 files changed

+17
-12
lines changed

src/crypto/crypto_x509.cc

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -854,7 +854,19 @@ MaybeLocal<Object> X509Certificate::New(Environment* env,
854854
if (!ctor->NewInstance(env->context()).ToLocal(&obj))
855855
return MaybeLocal<Object>();
856856

857-
new X509Certificate(env, obj, std::move(cert), issuer_chain);
857+
Local<Object> issuer_chain_obj;
858+
if (issuer_chain != nullptr && sk_X509_num(issuer_chain)) {
859+
X509Pointer cert(X509_dup(sk_X509_value(issuer_chain, 0)));
860+
sk_X509_delete(issuer_chain, 0);
861+
auto maybeObj = sk_X509_num(issuer_chain) ?
862+
X509Certificate::New(env, std::move(cert), issuer_chain) :
863+
X509Certificate::New(env, std::move(cert));
864+
if (!maybeObj.ToLocal(&issuer_chain_obj)) [[unlikely]] {
865+
return MaybeLocal<Object>();
866+
}
867+
}
868+
869+
new X509Certificate(env, obj, std::move(cert), issuer_chain_obj);
858870
return scope.Escape(obj);
859871
}
860872

@@ -905,20 +917,13 @@ X509Certificate::X509Certificate(
905917
Environment* env,
906918
Local<Object> object,
907919
std::shared_ptr<ManagedX509> cert,
908-
STACK_OF(X509)* issuer_chain)
920+
Local<Object> issuer_chain)
909921
: BaseObject(env, object),
910922
cert_(std::move(cert)) {
911923
MakeWeak();
912924

913-
if (issuer_chain != nullptr && sk_X509_num(issuer_chain)) {
914-
X509Pointer cert(X509_dup(sk_X509_value(issuer_chain, 0)));
915-
sk_X509_delete(issuer_chain, 0);
916-
Local<Object> obj = sk_X509_num(issuer_chain)
917-
? X509Certificate::New(env, std::move(cert), issuer_chain)
918-
.ToLocalChecked()
919-
: X509Certificate::New(env, std::move(cert))
920-
.ToLocalChecked();
921-
issuer_cert_.reset(Unwrap<X509Certificate>(obj));
925+
if (!issuer_chain.IsEmpty()) {
926+
issuer_cert_.reset(Unwrap<X509Certificate>(issuer_chain));
922927
}
923928
}
924929

src/crypto/crypto_x509.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ class X509Certificate final : public BaseObject {
114114
Environment* env,
115115
v8::Local<v8::Object> object,
116116
std::shared_ptr<ManagedX509> cert,
117-
STACK_OF(X509)* issuer_chain = nullptr);
117+
v8::Local<v8::Object> issuer_chain = v8::Local<v8::Object>());
118118

119119
std::shared_ptr<ManagedX509> cert_;
120120
BaseObjectPtr<X509Certificate> issuer_cert_;

0 commit comments

Comments
 (0)