@@ -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)) {
@@ -6799,15 +6799,8 @@ void GenerateKeyPair(const FunctionCallbackInfo<Value>& args,
67996799 Local<Value> err, pubkey, privkey;
68006800 job->ToResult (&err, &pubkey, &privkey);
68016801
6802- bool (*IsNotTrue)(Maybe<bool >) = [](Maybe<bool > maybe) {
6803- return maybe.IsNothing () || !maybe.ToChecked ();
6804- };
6805- Local<Array> ret = Array::New (env->isolate (), 3 );
6806- if (IsNotTrue (ret->Set (env->context (), 0 , err)) ||
6807- IsNotTrue (ret->Set (env->context (), 1 , pubkey)) ||
6808- IsNotTrue (ret->Set (env->context (), 2 , privkey)))
6809- return ;
6810- args.GetReturnValue ().Set (ret);
6802+ Local<Value> ret[] = { err, pubkey, privkey };
6803+ args.GetReturnValue ().Set (Array::New (env->isolate (), ret, arraysize (ret)));
68116804}
68126805
68136806void GenerateKeyPairRSA (const FunctionCallbackInfo<Value>& args) {
@@ -6940,17 +6933,6 @@ void GetSSLCiphers(const FunctionCallbackInfo<Value>& args) {
69406933 CHECK (ssl);
69416934
69426935 STACK_OF (SSL_CIPHER)* ciphers = SSL_get_ciphers (ssl.get ());
6943- int n = sk_SSL_CIPHER_num (ciphers);
6944- Local<Array> arr = Array::New (env->isolate (), n);
6945-
6946- for (int i = 0 ; i < n; ++i) {
6947- const SSL_CIPHER* cipher = sk_SSL_CIPHER_value (ciphers, i);
6948- arr->Set (env->context (),
6949- i,
6950- OneByteString (args.GetIsolate (),
6951- SSL_CIPHER_get_name (cipher))).Check ();
6952- }
6953-
69546936 // TLSv1.3 ciphers aren't listed by EVP. There are only 5, we could just
69556937 // document them, but since there are only 5, easier to just add them manually
69566938 // and not have to explain their absence in the API docs. They are lower-cased
@@ -6963,13 +6945,20 @@ void GetSSLCiphers(const FunctionCallbackInfo<Value>& args) {
69636945 " tls_aes_128_ccm_sha256"
69646946 };
69656947
6948+ const int n = sk_SSL_CIPHER_num (ciphers);
6949+ std::vector<Local<Value>> arr (n + arraysize (TLS13_CIPHERS));
6950+
6951+ for (int i = 0 ; i < n; ++i) {
6952+ const SSL_CIPHER* cipher = sk_SSL_CIPHER_value (ciphers, i);
6953+ arr[i] = OneByteString (env->isolate (), SSL_CIPHER_get_name (cipher));
6954+ }
6955+
69666956 for (unsigned i = 0 ; i < arraysize (TLS13_CIPHERS); ++i) {
69676957 const char * name = TLS13_CIPHERS[i];
6968- arr->Set (env->context (),
6969- arr->Length (), OneByteString (args.GetIsolate (), name)).Check ();
6958+ arr[n + i] = OneByteString (env->isolate (), name);
69706959 }
69716960
6972- args.GetReturnValue ().Set (arr);
6961+ args.GetReturnValue ().Set (Array::New (env-> isolate (), arr. data (), arr. size ()) );
69736962}
69746963
69756964
@@ -7020,22 +7009,23 @@ void GetHashes(const FunctionCallbackInfo<Value>& args) {
70207009void GetCurves (const FunctionCallbackInfo<Value>& args) {
70217010 Environment* env = Environment::GetCurrent (args);
70227011 const size_t num_curves = EC_get_builtin_curves (nullptr , 0 );
7023- Local<Array> arr = Array::New (env->isolate (), num_curves);
70247012
70257013 if (num_curves) {
70267014 std::vector<EC_builtin_curve> curves (num_curves);
70277015
70287016 if (EC_get_builtin_curves (curves.data (), num_curves)) {
7029- for (size_t i = 0 ; i < num_curves; i++) {
7030- arr->Set (env->context (),
7031- i,
7032- OneByteString (env->isolate (),
7033- OBJ_nid2sn (curves[i].nid ))).Check ();
7034- }
7017+ std::vector<Local<Value>> arr (num_curves);
7018+
7019+ for (size_t i = 0 ; i < num_curves; i++)
7020+ arr[i] = OneByteString (env->isolate (), OBJ_nid2sn (curves[i].nid ));
7021+
7022+ args.GetReturnValue ().Set (
7023+ Array::New (env->isolate (), arr.data (), arr.size ()));
7024+ return ;
70357025 }
70367026 }
70377027
7038- args.GetReturnValue ().Set (arr );
7028+ args.GetReturnValue ().Set (Array::New (env-> isolate ()) );
70397029}
70407030
70417031
0 commit comments