◐ Shell
clean mode source ↗

crypto: fix handling of null BUF_MEM* in ToV8Value() · nodejs/node@dc384f9

Original file line numberDiff line numberDiff line change

@@ -86,8 +86,15 @@ MaybeLocal<Value> ToV8Value(

8686

Environment* env,

8787

const BIOPointer& bio,

8888

const EVPKeyPointer::AsymmetricKeyEncodingConfig& config) {

89-

if (!bio) return {};

89+

if (!bio) {

90+

THROW_ERR_CRYPTO_OPERATION_FAILED(env, "Invalid BIO pointer");

91+

return {};

92+

}

9093

BUF_MEM* bptr = bio;

94+

if (!bptr) {

95+

THROW_ERR_CRYPTO_OPERATION_FAILED(env, "Unable to create BUF_MEM pointer");

96+

return {};

97+

}

9198

if (config.format == EVPKeyPointer::PKFormatType::PEM) {

9299

// PEM is an ASCII format, so we will return it as a string.

93100

return String::NewFromUtf8(

Original file line numberDiff line numberDiff line change

@@ -106,6 +106,8 @@ MaybeLocal<Value> ToV8Value(Local<Context> context, BIOPointer&& bio) {

106106

if (!bio) [[unlikely]]

107107

return {};

108108

BUF_MEM* mem = bio;

109+

if (!mem) [[unlikely]]

110+

return {};

109111

Local<Value> ret;

110112

if (!String::NewFromUtf8(Isolate::GetCurrent(),

111113

mem->data,

@@ -120,6 +122,8 @@ MaybeLocal<Value> ToV8Value(Local<Context> context, const BIOPointer& bio) {

120122

if (!bio) [[unlikely]]

121123

return {};

122124

BUF_MEM* mem = bio;

125+

if (!mem) [[unlikely]]

126+

return {};

123127

Local<Value> ret;

124128

if (!String::NewFromUtf8(Isolate::GetCurrent(),

125129

mem->data,

@@ -134,6 +138,8 @@ MaybeLocal<Value> ToBuffer(Environment* env, BIOPointer* bio) {

134138

if (bio == nullptr || !*bio) [[unlikely]]

135139

return {};

136140

BUF_MEM* mem = *bio;

141+

if (!mem) [[unlikely]]

142+

return {};

137143

#ifdef V8_ENABLE_SANDBOX

138144

// If the v8 sandbox is enabled, then all array buffers must be allocated

139145

// via the isolate. External buffers are not allowed. So, instead of wrapping