Skip to content

Commit 41f444f

Browse files
jasnelltargos
authored andcommitted
src: improve error handling in string_bytes/decoder
PR-URL: #56978 Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
1 parent d0ee8c0 commit 41f444f

File tree

2 files changed

+25
-25
lines changed

2 files changed

+25
-25
lines changed

src/string_bytes.cc

+16-18
Original file line numberDiff line numberDiff line change
@@ -112,16 +112,17 @@ class ExternString: public ResourceType {
112112
ExternString* h_str = new ExternString<ResourceType, TypeName>(isolate,
113113
data,
114114
length);
115-
MaybeLocal<Value> str = NewExternal(isolate, h_str);
116-
isolate->AdjustAmountOfExternalAllocatedMemory(h_str->byte_length());
115+
Local<Value> str;
117116

118-
if (str.IsEmpty()) {
117+
if (!NewExternal(isolate, h_str).ToLocal(&str)) {
119118
delete h_str;
120119
*error = node::ERR_STRING_TOO_LONG(isolate);
121120
return MaybeLocal<Value>();
122121
}
123122

124-
return str.ToLocalChecked();
123+
isolate->AdjustAmountOfExternalAllocatedMemory(h_str->byte_length());
124+
125+
return str;
125126
}
126127

127128
inline Isolate* isolate() const { return isolate_; }
@@ -168,16 +169,16 @@ MaybeLocal<Value> ExternOneByteString::NewSimpleFromCopy(Isolate* isolate,
168169
const char* data,
169170
size_t length,
170171
Local<Value>* error) {
171-
MaybeLocal<String> str =
172-
String::NewFromOneByte(isolate,
173-
reinterpret_cast<const uint8_t*>(data),
174-
v8::NewStringType::kNormal,
175-
length);
176-
if (str.IsEmpty()) {
172+
Local<String> str;
173+
if (!String::NewFromOneByte(isolate,
174+
reinterpret_cast<const uint8_t*>(data),
175+
v8::NewStringType::kNormal,
176+
length)
177+
.ToLocal(&str)) {
177178
*error = node::ERR_STRING_TOO_LONG(isolate);
178179
return MaybeLocal<Value>();
179180
}
180-
return str.ToLocalChecked();
181+
return str;
181182
}
182183

183184

@@ -186,16 +187,13 @@ MaybeLocal<Value> ExternTwoByteString::NewSimpleFromCopy(Isolate* isolate,
186187
const uint16_t* data,
187188
size_t length,
188189
Local<Value>* error) {
189-
MaybeLocal<String> str =
190-
String::NewFromTwoByte(isolate,
191-
data,
192-
v8::NewStringType::kNormal,
193-
length);
194-
if (str.IsEmpty()) {
190+
Local<String> str;
191+
if (!String::NewFromTwoByte(isolate, data, v8::NewStringType::kNormal, length)
192+
.ToLocal(&str)) {
195193
*error = node::ERR_STRING_TOO_LONG(isolate);
196194
return MaybeLocal<Value>();
197195
}
198-
return str.ToLocalChecked();
196+
return str;
199197
}
200198

201199
} // anonymous namespace

src/string_decoder.cc

+9-7
Original file line numberDiff line numberDiff line change
@@ -272,19 +272,21 @@ void DecodeData(const FunctionCallbackInfo<Value>& args) {
272272
ArrayBufferViewContents<char> content(args[1].As<ArrayBufferView>());
273273
size_t length = content.length();
274274

275-
MaybeLocal<String> ret =
276-
decoder->DecodeData(args.GetIsolate(), content.data(), &length);
277-
if (!ret.IsEmpty())
278-
args.GetReturnValue().Set(ret.ToLocalChecked());
275+
Local<String> ret;
276+
if (decoder->DecodeData(args.GetIsolate(), content.data(), &length)
277+
.ToLocal(&ret)) {
278+
args.GetReturnValue().Set(ret);
279+
}
279280
}
280281

281282
void FlushData(const FunctionCallbackInfo<Value>& args) {
282283
StringDecoder* decoder =
283284
reinterpret_cast<StringDecoder*>(Buffer::Data(args[0]));
284285
CHECK_NOT_NULL(decoder);
285-
MaybeLocal<String> ret = decoder->FlushData(args.GetIsolate());
286-
if (!ret.IsEmpty())
287-
args.GetReturnValue().Set(ret.ToLocalChecked());
286+
Local<String> ret;
287+
if (decoder->FlushData(args.GetIsolate()).ToLocal(&ret)) {
288+
args.GetReturnValue().Set(ret);
289+
}
288290
}
289291

290292
void InitializeStringDecoder(Local<Object> target,

0 commit comments

Comments
 (0)