Skip to content

Commit 4dd1f42

Browse files
tniessenaddaleax
andcommitted
src: gracefully handle errors in GetX509NameObject
PR-URL: #41490 Co-authored-by: Anna Henningsen <[email protected]> Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: Colin Ihrig <[email protected]>
1 parent 426df1b commit 4dd1f42

File tree

1 file changed

+16
-7
lines changed

1 file changed

+16
-7
lines changed

src/crypto/crypto_common.cc

+16-7
Original file line numberDiff line numberDiff line change
@@ -1035,17 +1035,26 @@ static MaybeLocal<Value> GetX509NameObject(Environment* env, X509* cert) {
10351035
// change here without breaking things. Note that this creates nested data
10361036
// structures, yet still does not allow representing Distinguished Names
10371037
// accurately.
1038-
if (result->HasOwnProperty(env->context(), v8_name).ToChecked()) {
1039-
Local<Value> accum =
1040-
result->Get(env->context(), v8_name).ToLocalChecked();
1038+
bool multiple;
1039+
if (!result->HasOwnProperty(env->context(), v8_name).To(&multiple)) {
1040+
return MaybeLocal<Value>();
1041+
} else if (multiple) {
1042+
Local<Value> accum;
1043+
if (!result->Get(env->context(), v8_name).ToLocal(&accum)) {
1044+
return MaybeLocal<Value>();
1045+
}
10411046
if (!accum->IsArray()) {
10421047
accum = Array::New(env->isolate(), &accum, 1);
1043-
result->Set(env->context(), v8_name, accum).Check();
1048+
if (result->Set(env->context(), v8_name, accum).IsNothing()) {
1049+
return MaybeLocal<Value>();
1050+
}
10441051
}
10451052
Local<Array> array = accum.As<Array>();
1046-
array->Set(env->context(), array->Length(), v8_value).Check();
1047-
} else {
1048-
result->Set(env->context(), v8_name, v8_value).Check();
1053+
if (array->Set(env->context(), array->Length(), v8_value).IsNothing()) {
1054+
return MaybeLocal<Value>();
1055+
}
1056+
} else if (result->Set(env->context(), v8_name, v8_value).IsNothing()) {
1057+
return MaybeLocal<Value>();
10491058
}
10501059
}
10511060

0 commit comments

Comments
 (0)