|
26 | 26 | namespace node { |
27 | 27 |
|
28 | 28 | using v8::Array; |
| 29 | +using v8::ArrayBuffer; |
29 | 30 | using v8::ArrayBufferView; |
| 31 | +using v8::BackingStore; |
30 | 32 | using v8::Context; |
31 | 33 | using v8::EscapableHandleScope; |
32 | 34 | using v8::Integer; |
@@ -562,11 +564,17 @@ MaybeLocal<Object> GetPubKey(Environment* env, const RSAPointer& rsa) { |
562 | 564 | int size = i2d_RSA_PUBKEY(rsa.get(), nullptr); |
563 | 565 | CHECK_GE(size, 0); |
564 | 566 |
|
565 | | - AllocatedBuffer buffer = AllocatedBuffer::AllocateManaged(env, size); |
566 | | - unsigned char* serialized = |
567 | | - reinterpret_cast<unsigned char*>(buffer.data()); |
568 | | - i2d_RSA_PUBKEY(rsa.get(), &serialized); |
569 | | - return buffer.ToBuffer(); |
| 567 | + std::unique_ptr<BackingStore> bs; |
| 568 | + { |
| 569 | + NoArrayBufferZeroFillScope no_zero_fill_scope(env->isolate_data()); |
| 570 | + bs = ArrayBuffer::NewBackingStore(env->isolate(), size); |
| 571 | + } |
| 572 | + |
| 573 | + unsigned char* serialized = reinterpret_cast<unsigned char*>(bs->Data()); |
| 574 | + CHECK_GE(i2d_RSA_PUBKEY(rsa.get(), &serialized), 0); |
| 575 | + |
| 576 | + Local<ArrayBuffer> ab = ArrayBuffer::New(env->isolate(), std::move(bs)); |
| 577 | + return Buffer::New(env, ab, 0, ab->ByteLength()).FromMaybe(Local<Object>()); |
570 | 578 | } |
571 | 579 |
|
572 | 580 | MaybeLocal<Value> GetExponentString( |
@@ -600,11 +608,17 @@ MaybeLocal<Value> GetModulusString( |
600 | 608 | MaybeLocal<Object> GetRawDERCertificate(Environment* env, X509* cert) { |
601 | 609 | int size = i2d_X509(cert, nullptr); |
602 | 610 |
|
603 | | - AllocatedBuffer buffer = AllocatedBuffer::AllocateManaged(env, size); |
604 | | - unsigned char* serialized = |
605 | | - reinterpret_cast<unsigned char*>(buffer.data()); |
606 | | - i2d_X509(cert, &serialized); |
607 | | - return buffer.ToBuffer(); |
| 611 | + std::unique_ptr<BackingStore> bs; |
| 612 | + { |
| 613 | + NoArrayBufferZeroFillScope no_zero_fill_scope(env->isolate_data()); |
| 614 | + bs = ArrayBuffer::NewBackingStore(env->isolate(), size); |
| 615 | + } |
| 616 | + |
| 617 | + unsigned char* serialized = reinterpret_cast<unsigned char*>(bs->Data()); |
| 618 | + CHECK_GE(i2d_X509(cert, &serialized), 0); |
| 619 | + |
| 620 | + Local<ArrayBuffer> ab = ArrayBuffer::New(env->isolate(), std::move(bs)); |
| 621 | + return Buffer::New(env, ab, 0, ab->ByteLength()).FromMaybe(Local<Object>()); |
608 | 622 | } |
609 | 623 |
|
610 | 624 | MaybeLocal<Value> GetSerialNumber(Environment* env, X509* cert) { |
@@ -878,18 +892,26 @@ MaybeLocal<Object> ECPointToBuffer(Environment* env, |
878 | 892 | if (error != nullptr) *error = "Failed to get public key length"; |
879 | 893 | return MaybeLocal<Object>(); |
880 | 894 | } |
881 | | - AllocatedBuffer buf = AllocatedBuffer::AllocateManaged(env, len); |
| 895 | + |
| 896 | + std::unique_ptr<BackingStore> bs; |
| 897 | + { |
| 898 | + NoArrayBufferZeroFillScope no_zero_fill_scope(env->isolate_data()); |
| 899 | + bs = ArrayBuffer::NewBackingStore(env->isolate(), len); |
| 900 | + } |
| 901 | + |
882 | 902 | len = EC_POINT_point2oct(group, |
883 | 903 | point, |
884 | 904 | form, |
885 | | - reinterpret_cast<unsigned char*>(buf.data()), |
886 | | - buf.size(), |
| 905 | + reinterpret_cast<unsigned char*>(bs->Data()), |
| 906 | + bs->ByteLength(), |
887 | 907 | nullptr); |
888 | 908 | if (len == 0) { |
889 | 909 | if (error != nullptr) *error = "Failed to get public key"; |
890 | 910 | return MaybeLocal<Object>(); |
891 | 911 | } |
892 | | - return buf.ToBuffer(); |
| 912 | + |
| 913 | + Local<ArrayBuffer> ab = ArrayBuffer::New(env->isolate(), std::move(bs)); |
| 914 | + return Buffer::New(env, ab, 0, ab->ByteLength()).FromMaybe(Local<Object>()); |
893 | 915 | } |
894 | 916 |
|
895 | 917 | MaybeLocal<Value> GetPeerCert( |
|
0 commit comments