Skip to content

Commit b2e45eb

Browse files
yoshisatoyanagisawamibrunin
authored andcommitted
[Backport] CVE-2023-2133: Out of bounds memory access in Service Worker API.
Cherry-pick of patch originally reviewed on https://chromium-review.googlesource.com/c/chromium/src/+/4405896: Use ScriptState::Scope instead of setting HandleScope. M108 merge issues: third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc: Conflicting declarations for isolate content_unittests_bundle_data.filelist: Not present in 108, skipped; Only used in iOS tests on main Since `GetEffectiveFunction` may call `Get` if the given v8 listener is an object, we need to prepare `v8::Context::Scope` before calling it. Blink already have a helper class to prepare the environment for the script execution, which has already been used used in other ServiceWorkerGlobalScope member functions. It is `ScriptState::Scope` This CL also use it instead. (cherry picked from commit 299385e09d41d5ce3abd434879b5f9b0a8880cd7) Bug: 1429197 Change-Id: Idbcfdfa9c06160a18b57155a9540f72eed4ec0b8 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4387655 Commit-Queue: Yoshisato Yanagisawa <[email protected]> Commit-Queue: Kouhei Ueno <[email protected]> Auto-Submit: Yoshisato Yanagisawa <[email protected]> Cr-Original-Commit-Position: refs/heads/main@{#1125148} Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4405896 Reviewed-by: Yoshisato Yanagisawa <[email protected]> Commit-Queue: Roger Felipe Zanoni da Silva <[email protected]> Cr-Commit-Position: refs/branch-heads/5359@{#1448} Cr-Branched-From: 27d3765d341b09369006d030f83f582a29eb57ae-refs/heads/main@{#1058933} Reviewed-on: https://codereview.qt-project.org/c/qt/qtwebengine-chromium/+/474620 Reviewed-by: Allan Sandfeld Jensen <[email protected]>
1 parent 82304e1 commit b2e45eb

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

chromium/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2602,12 +2602,15 @@ ServiceWorkerGlobalScope::FetchHandlerType() {
26022602
if (!elv) {
26032603
return mojom::blink::ServiceWorkerFetchHandlerType::kNoHandler;
26042604
}
2605-
v8::Isolate* isolate = v8::Isolate::GetCurrent();
2606-
v8::HandleScope handle_scope(isolate);
2605+
2606+
ScriptState* script_state = ScriptController()->GetScriptState();
2607+
// Do not remove this, |scope| is needed by `GetEffectiveFunction`.
2608+
ScriptState::Scope scope(script_state);
2609+
26072610
// TODO(crbug.com/1349613): revisit the way to implement this.
26082611
// The following code returns kEmptyFetchHandler if all handlers are nop.
26092612
for (RegisteredEventListener& e : *elv) {
2610-
EventTarget* et = EventTarget::Create(ScriptController()->GetScriptState());
2613+
EventTarget* et = EventTarget::Create(script_state);
26112614
v8::Local<v8::Value> v =
26122615
To<JSBasedEventListener>(e.Callback())->GetEffectiveFunction(*et);
26132616
if (!v->IsFunction() ||

0 commit comments

Comments
 (0)