Skip to content

Commit bbf1ed7

Browse files
RaisinTentargos
authored andcommitted
src: remove AllocatedBuffer from crypto_common.cc
Signed-off-by: Darshan Sen <[email protected]> PR-URL: #40213 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Khaidi Chu <[email protected]>
1 parent 614a7c2 commit bbf1ed7

File tree

1 file changed

+36
-14
lines changed

1 file changed

+36
-14
lines changed

src/crypto/crypto_common.cc

+36-14
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@
2626
namespace node {
2727

2828
using v8::Array;
29+
using v8::ArrayBuffer;
2930
using v8::ArrayBufferView;
31+
using v8::BackingStore;
3032
using v8::Context;
3133
using v8::EscapableHandleScope;
3234
using v8::Integer;
@@ -562,11 +564,17 @@ MaybeLocal<Object> GetPubKey(Environment* env, const RSAPointer& rsa) {
562564
int size = i2d_RSA_PUBKEY(rsa.get(), nullptr);
563565
CHECK_GE(size, 0);
564566

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>());
570578
}
571579

572580
MaybeLocal<Value> GetExponentString(
@@ -600,11 +608,17 @@ MaybeLocal<Value> GetModulusString(
600608
MaybeLocal<Object> GetRawDERCertificate(Environment* env, X509* cert) {
601609
int size = i2d_X509(cert, nullptr);
602610

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>());
608622
}
609623

610624
MaybeLocal<Value> GetSerialNumber(Environment* env, X509* cert) {
@@ -878,18 +892,26 @@ MaybeLocal<Object> ECPointToBuffer(Environment* env,
878892
if (error != nullptr) *error = "Failed to get public key length";
879893
return MaybeLocal<Object>();
880894
}
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+
882902
len = EC_POINT_point2oct(group,
883903
point,
884904
form,
885-
reinterpret_cast<unsigned char*>(buf.data()),
886-
buf.size(),
905+
reinterpret_cast<unsigned char*>(bs->Data()),
906+
bs->ByteLength(),
887907
nullptr);
888908
if (len == 0) {
889909
if (error != nullptr) *error = "Failed to get public key";
890910
return MaybeLocal<Object>();
891911
}
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>());
893915
}
894916

895917
MaybeLocal<Value> GetPeerCert(

0 commit comments

Comments
 (0)