@@ -1011,19 +1011,19 @@ static X509_STORE* NewRootCertStore() {
1011
1011
1012
1012
void GetRootCertificates (const FunctionCallbackInfo<Value>& args) {
1013
1013
Environment* env = Environment::GetCurrent (args);
1014
- Local<Array > result = Array::New (env-> isolate (), arraysize (root_certs)) ;
1014
+ Local<Value > result[ arraysize (root_certs)] ;
1015
1015
1016
1016
for (size_t i = 0 ; i < arraysize (root_certs); i++) {
1017
- Local<Value> value;
1018
- if (!String::NewFromOneByte (env->isolate (),
1019
- reinterpret_cast <const uint8_t *>(root_certs[i]),
1020
- NewStringType::kNormal ).ToLocal (&value) ||
1021
- !result->Set (env->context (), i, value).FromMaybe (false )) {
1017
+ if (!String::NewFromOneByte (
1018
+ env->isolate (),
1019
+ reinterpret_cast <const uint8_t *>(root_certs[i]),
1020
+ NewStringType::kNormal ).ToLocal (&result[i])) {
1022
1021
return ;
1023
1022
}
1024
1023
}
1025
1024
1026
- args.GetReturnValue ().Set (result);
1025
+ args.GetReturnValue ().Set (
1026
+ Array::New (env->isolate (), result, arraysize (root_certs)));
1027
1027
}
1028
1028
1029
1029
@@ -2138,22 +2138,22 @@ static Local<Object> X509ToObject(Environment* env, X509* cert) {
2138
2138
StackOfASN1 eku (static_cast <STACK_OF (ASN1_OBJECT)*>(
2139
2139
X509_get_ext_d2i (cert, NID_ext_key_usage, nullptr , nullptr )));
2140
2140
if (eku) {
2141
- Local<Array> ext_key_usage = Array::New (env->isolate ());
2141
+ const int count = sk_ASN1_OBJECT_num (eku.get ());
2142
+ MaybeStackBuffer<Local<Value>, 16 > ext_key_usage (count);
2142
2143
char buf[256 ];
2143
2144
2144
2145
int j = 0 ;
2145
- for (int i = 0 ; i < sk_ASN1_OBJECT_num (eku. get ()) ; i++) {
2146
+ for (int i = 0 ; i < count ; i++) {
2146
2147
if (OBJ_obj2txt (buf,
2147
2148
sizeof (buf),
2148
2149
sk_ASN1_OBJECT_value (eku.get (), i), 1 ) >= 0 ) {
2149
- ext_key_usage->Set (context,
2150
- j++,
2151
- OneByteString (env->isolate (), buf)).Check ();
2150
+ ext_key_usage[j++] = OneByteString (env->isolate (), buf);
2152
2151
}
2153
2152
}
2154
2153
2155
2154
eku.reset ();
2156
- info->Set (context, env->ext_key_usage_string (), ext_key_usage).Check ();
2155
+ info->Set (context, env->ext_key_usage_string (),
2156
+ Array::New (env->isolate (), ext_key_usage.out (), count)).Check ();
2157
2157
}
2158
2158
2159
2159
if (ASN1_INTEGER* serial_number = X509_get_serialNumber (cert)) {
@@ -6729,15 +6729,8 @@ void GenerateKeyPair(const FunctionCallbackInfo<Value>& args,
6729
6729
Local<Value> err, pubkey, privkey;
6730
6730
job->ToResult (&err, &pubkey, &privkey);
6731
6731
6732
- bool (*IsNotTrue)(Maybe<bool >) = [](Maybe<bool > maybe) {
6733
- return maybe.IsNothing () || !maybe.ToChecked ();
6734
- };
6735
- Local<Array> ret = Array::New (env->isolate (), 3 );
6736
- if (IsNotTrue (ret->Set (env->context (), 0 , err)) ||
6737
- IsNotTrue (ret->Set (env->context (), 1 , pubkey)) ||
6738
- IsNotTrue (ret->Set (env->context (), 2 , privkey)))
6739
- return ;
6740
- args.GetReturnValue ().Set (ret);
6732
+ Local<Value> ret[] = { err, pubkey, privkey };
6733
+ args.GetReturnValue ().Set (Array::New (env->isolate (), ret, arraysize (ret)));
6741
6734
}
6742
6735
6743
6736
void GenerateKeyPairRSA (const FunctionCallbackInfo<Value>& args) {
@@ -6837,17 +6830,6 @@ void GetSSLCiphers(const FunctionCallbackInfo<Value>& args) {
6837
6830
CHECK (ssl);
6838
6831
6839
6832
STACK_OF (SSL_CIPHER)* ciphers = SSL_get_ciphers (ssl.get ());
6840
- int n = sk_SSL_CIPHER_num (ciphers);
6841
- Local<Array> arr = Array::New (env->isolate (), n);
6842
-
6843
- for (int i = 0 ; i < n; ++i) {
6844
- const SSL_CIPHER* cipher = sk_SSL_CIPHER_value (ciphers, i);
6845
- arr->Set (env->context (),
6846
- i,
6847
- OneByteString (args.GetIsolate (),
6848
- SSL_CIPHER_get_name (cipher))).Check ();
6849
- }
6850
-
6851
6833
// TLSv1.3 ciphers aren't listed by EVP. There are only 5, we could just
6852
6834
// document them, but since there are only 5, easier to just add them manually
6853
6835
// and not have to explain their absence in the API docs. They are lower-cased
@@ -6860,13 +6842,20 @@ void GetSSLCiphers(const FunctionCallbackInfo<Value>& args) {
6860
6842
" tls_aes_128_ccm_sha256"
6861
6843
};
6862
6844
6845
+ const int n = sk_SSL_CIPHER_num (ciphers);
6846
+ std::vector<Local<Value>> arr (n + arraysize (TLS13_CIPHERS));
6847
+
6848
+ for (int i = 0 ; i < n; ++i) {
6849
+ const SSL_CIPHER* cipher = sk_SSL_CIPHER_value (ciphers, i);
6850
+ arr[i] = OneByteString (env->isolate (), SSL_CIPHER_get_name (cipher));
6851
+ }
6852
+
6863
6853
for (unsigned i = 0 ; i < arraysize (TLS13_CIPHERS); ++i) {
6864
6854
const char * name = TLS13_CIPHERS[i];
6865
- arr->Set (env->context (),
6866
- arr->Length (), OneByteString (args.GetIsolate (), name)).Check ();
6855
+ arr[n + i] = OneByteString (env->isolate (), name);
6867
6856
}
6868
6857
6869
- args.GetReturnValue ().Set (arr);
6858
+ args.GetReturnValue ().Set (Array::New (env-> isolate (), arr. data (), arr. size ()) );
6870
6859
}
6871
6860
6872
6861
@@ -6917,22 +6906,23 @@ void GetHashes(const FunctionCallbackInfo<Value>& args) {
6917
6906
void GetCurves (const FunctionCallbackInfo<Value>& args) {
6918
6907
Environment* env = Environment::GetCurrent (args);
6919
6908
const size_t num_curves = EC_get_builtin_curves (nullptr , 0 );
6920
- Local<Array> arr = Array::New (env->isolate (), num_curves);
6921
6909
6922
6910
if (num_curves) {
6923
6911
std::vector<EC_builtin_curve> curves (num_curves);
6924
6912
6925
6913
if (EC_get_builtin_curves (curves.data (), num_curves)) {
6926
- for (size_t i = 0 ; i < num_curves; i++) {
6927
- arr->Set (env->context (),
6928
- i,
6929
- OneByteString (env->isolate (),
6930
- OBJ_nid2sn (curves[i].nid ))).Check ();
6931
- }
6914
+ std::vector<Local<Value>> arr (num_curves);
6915
+
6916
+ for (size_t i = 0 ; i < num_curves; i++)
6917
+ arr[i] = OneByteString (env->isolate (), OBJ_nid2sn (curves[i].nid ));
6918
+
6919
+ args.GetReturnValue ().Set (
6920
+ Array::New (env->isolate (), arr.data (), arr.size ()));
6921
+ return ;
6932
6922
}
6933
6923
}
6934
6924
6935
- args.GetReturnValue ().Set (arr );
6925
+ args.GetReturnValue ().Set (Array::New (env-> isolate ()) );
6936
6926
}
6937
6927
6938
6928
0 commit comments