diff options
author | Michaël Zasso <targos@protonmail.com> | 2021-10-10 11:10:43 +0200 |
---|---|---|
committer | Michaël Zasso <targos@protonmail.com> | 2021-10-12 08:07:50 +0200 |
commit | 62719c5fd2ab7dee1ac4019c1715061d556ac457 (patch) | |
tree | 356fed3842e577ab58fd51d5cc02f071cf7ee216 /deps/v8/src/execution/messages.cc | |
parent | a784258444b052dfd31cca90db57b21dc38bb1eb (diff) | |
download | node-new-62719c5fd2ab7dee1ac4019c1715061d556ac457.tar.gz |
deps: update V8 to 9.5.172.19
PR-URL: https://github.com/nodejs/node/pull/40178
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Jiawen Geng <technicalcute@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Diffstat (limited to 'deps/v8/src/execution/messages.cc')
-rw-r--r-- | deps/v8/src/execution/messages.cc | 87 |
1 files changed, 45 insertions, 42 deletions
diff --git a/deps/v8/src/execution/messages.cc b/deps/v8/src/execution/messages.cc index ad530e1f2a..2628e7a673 100644 --- a/deps/v8/src/execution/messages.cc +++ b/deps/v8/src/execution/messages.cc @@ -106,55 +106,55 @@ void MessageHandler::ReportMessage(Isolate* isolate, const MessageLocation* loc, Handle<JSMessageObject> message) { v8::Local<v8::Message> api_message_obj = v8::Utils::MessageToLocal(message); - if (api_message_obj->ErrorLevel() == v8::Isolate::kMessageError) { - // We are calling into embedder's code which can throw exceptions. - // Thus we need to save current exception state, reset it to the clean one - // and ignore scheduled exceptions callbacks can throw. + if (api_message_obj->ErrorLevel() != v8::Isolate::kMessageError) { + ReportMessageNoExceptions(isolate, loc, message, v8::Local<v8::Value>()); + return; + } - // We pass the exception object into the message handler callback though. - Object exception_object = ReadOnlyRoots(isolate).undefined_value(); - if (isolate->has_pending_exception()) { - exception_object = isolate->pending_exception(); - } - Handle<Object> exception(exception_object, isolate); + // We are calling into embedder's code which can throw exceptions. + // Thus we need to save current exception state, reset it to the clean one + // and ignore scheduled exceptions callbacks can throw. - Isolate::ExceptionScope exception_scope(isolate); - isolate->clear_pending_exception(); - isolate->set_external_caught_exception(false); + // We pass the exception object into the message handler callback though. + Object exception_object = ReadOnlyRoots(isolate).undefined_value(); + if (isolate->has_pending_exception()) { + exception_object = isolate->pending_exception(); + } + Handle<Object> exception(exception_object, isolate); - // Turn the exception on the message into a string if it is an object. - if (message->argument().IsJSObject()) { - HandleScope scope(isolate); - Handle<Object> argument(message->argument(), isolate); + Isolate::ExceptionScope exception_scope(isolate); + isolate->clear_pending_exception(); + isolate->set_external_caught_exception(false); - MaybeHandle<Object> maybe_stringified; - Handle<Object> stringified; - // Make sure we don't leak uncaught internally generated Error objects. - if (argument->IsJSError()) { - maybe_stringified = Object::NoSideEffectsToString(isolate, argument); - } else { - v8::TryCatch catcher(reinterpret_cast<v8::Isolate*>(isolate)); - catcher.SetVerbose(false); - catcher.SetCaptureMessage(false); + // Turn the exception on the message into a string if it is an object. + if (message->argument().IsJSObject()) { + HandleScope scope(isolate); + Handle<Object> argument(message->argument(), isolate); - maybe_stringified = Object::ToString(isolate, argument); - } + MaybeHandle<Object> maybe_stringified; + Handle<Object> stringified; + // Make sure we don't leak uncaught internally generated Error objects. + if (argument->IsJSError()) { + maybe_stringified = Object::NoSideEffectsToString(isolate, argument); + } else { + v8::TryCatch catcher(reinterpret_cast<v8::Isolate*>(isolate)); + catcher.SetVerbose(false); + catcher.SetCaptureMessage(false); - if (!maybe_stringified.ToHandle(&stringified)) { - DCHECK(isolate->has_pending_exception()); - isolate->clear_pending_exception(); - isolate->set_external_caught_exception(false); - stringified = - isolate->factory()->NewStringFromAsciiChecked("exception"); - } - message->set_argument(*stringified); + maybe_stringified = Object::ToString(isolate, argument); } - v8::Local<v8::Value> api_exception_obj = v8::Utils::ToLocal(exception); - ReportMessageNoExceptions(isolate, loc, message, api_exception_obj); - } else { - ReportMessageNoExceptions(isolate, loc, message, v8::Local<v8::Value>()); + if (!maybe_stringified.ToHandle(&stringified)) { + DCHECK(isolate->has_pending_exception()); + isolate->clear_pending_exception(); + isolate->set_external_caught_exception(false); + stringified = isolate->factory()->exception_string(); + } + message->set_argument(*stringified); } + + v8::Local<v8::Value> api_exception_obj = v8::Utils::ToLocal(exception); + ReportMessageNoExceptions(isolate, loc, message, api_exception_obj); } void MessageHandler::ReportMessageNoExceptions( @@ -297,10 +297,14 @@ class V8_NODISCARD PrepareStackTraceScope { MaybeHandle<Object> ErrorUtils::FormatStackTrace(Isolate* isolate, Handle<JSObject> error, Handle<Object> raw_stack) { + if (FLAG_correctness_fuzzer_suppressions) { + return isolate->factory()->empty_string(); + } DCHECK(raw_stack->IsFixedArray()); Handle<FixedArray> elems = Handle<FixedArray>::cast(raw_stack); const bool in_recursion = isolate->formatting_stack_trace(); + const bool has_overflowed = i::StackLimitCheck{isolate}.HasOverflowed(); Handle<Context> error_context; if (!in_recursion && error->GetCreationContext().ToHandle(&error_context)) { DCHECK(error_context->IsNativeContext()); @@ -318,7 +322,7 @@ MaybeHandle<Object> ErrorUtils::FormatStackTrace(Isolate* isolate, isolate->RunPrepareStackTraceCallback(error_context, error, sites), Object); return result; - } else { + } else if (!has_overflowed) { Handle<JSFunction> global_error = handle(error_context->error_function(), isolate); @@ -359,7 +363,6 @@ MaybeHandle<Object> ErrorUtils::FormatStackTrace(Isolate* isolate, } // Otherwise, run our internal formatting logic. - IncrementalStringBuilder builder(isolate); RETURN_ON_EXCEPTION(isolate, AppendErrorString(isolate, error, &builder), |