|
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