@@ -1011,19 +1011,19 @@ static X509_STORE* NewRootCertStore() {
10111011
10121012void GetRootCertificates (const FunctionCallbackInfo<Value>& args) {
10131013 Environment* env = Environment::GetCurrent (args);
1014- Local<Array > result = Array::New (env-> isolate (), arraysize (root_certs)) ;
1014+ Local<Value > result[ arraysize (root_certs)] ;
10151015
10161016 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])) {
10221021 return ;
10231022 }
10241023 }
10251024
1026- args.GetReturnValue ().Set (result);
1025+ args.GetReturnValue ().Set (
1026+ Array::New (env->isolate (), result, arraysize (root_certs)));
10271027}
10281028
10291029
@@ -2138,22 +2138,22 @@ static Local<Object> X509ToObject(Environment* env, X509* cert) {
21382138 StackOfASN1 eku (static_cast <STACK_OF (ASN1_OBJECT)*>(
21392139 X509_get_ext_d2i (cert, NID_ext_key_usage, nullptr , nullptr )));
21402140 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);
21422143 char buf[256 ];
21432144
21442145 int j = 0 ;
2145- for (int i = 0 ; i < sk_ASN1_OBJECT_num (eku. get ()) ; i++) {
2146+ for (int i = 0 ; i < count ; i++) {
21462147 if (OBJ_obj2txt (buf,
21472148 sizeof (buf),
21482149 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);
21522151 }
21532152 }
21542153
21552154 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 ();
21572157 }
21582158
21592159 if (ASN1_INTEGER* serial_number = X509_get_serialNumber (cert)) {
@@ -6729,15 +6729,8 @@ void GenerateKeyPair(const FunctionCallbackInfo<Value>& args,
67296729 Local<Value> err, pubkey, privkey;
67306730 job->ToResult (&err, &pubkey, &privkey);
67316731
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)));
67416734}
67426735
67436736void GenerateKeyPairRSA (const FunctionCallbackInfo<Value>& args) {
@@ -6837,17 +6830,6 @@ void GetSSLCiphers(const FunctionCallbackInfo<Value>& args) {
68376830 CHECK (ssl);
68386831
68396832 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-
68516833 // TLSv1.3 ciphers aren't listed by EVP. There are only 5, we could just
68526834 // document them, but since there are only 5, easier to just add them manually
68536835 // 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) {
68606842 " tls_aes_128_ccm_sha256"
68616843 };
68626844
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+
68636853 for (unsigned i = 0 ; i < arraysize (TLS13_CIPHERS); ++i) {
68646854 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);
68676856 }
68686857
6869- args.GetReturnValue ().Set (arr);
6858+ args.GetReturnValue ().Set (Array::New (env-> isolate (), arr. data (), arr. size ()) );
68706859}
68716860
68726861
@@ -6917,22 +6906,23 @@ void GetHashes(const FunctionCallbackInfo<Value>& args) {
69176906void GetCurves (const FunctionCallbackInfo<Value>& args) {
69186907 Environment* env = Environment::GetCurrent (args);
69196908 const size_t num_curves = EC_get_builtin_curves (nullptr , 0 );
6920- Local<Array> arr = Array::New (env->isolate (), num_curves);
69216909
69226910 if (num_curves) {
69236911 std::vector<EC_builtin_curve> curves (num_curves);
69246912
69256913 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 ;
69326922 }
69336923 }
69346924
6935- args.GetReturnValue ().Set (arr );
6925+ args.GetReturnValue ().Set (Array::New (env-> isolate ()) );
69366926}
69376927
69386928
0 commit comments