From 72b47ba1caa30bd6f20f19d9edd5607bf65065dc Mon Sep 17 00:00:00 2001 From: ldm0 Date: Fri, 9 Oct 2026 23:36:15 +0800 Subject: [PATCH] fix(worker): omit the error value when reporting nested worker failures Propagate an unhandled nested worker exception to the parent worker with ErrorEvent.error set to null, as required by omitError reporting. Update the existing end-to-end parent onerror regression to inspect the null value while retaining filename, line, column, and message checks. --- moli-renderer-v8/src/worker/thread/mod.rs | 11 ++++++++++- .../tests/lifecycle/worker_errors_and_teardown.rs | 4 ++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/moli-renderer-v8/src/worker/thread/mod.rs b/moli-renderer-v8/src/worker/thread/mod.rs index f42bcd7bf9..f4896d14e7 100644 --- a/moli-renderer-v8/src/worker/thread/mod.rs +++ b/moli-renderer-v8/src/worker/thread/mod.rs @@ -2677,7 +2677,16 @@ async fn worker_main( callback_context: None, exception: None, }; - if !dispatch_worker_error_event(scope, global, &report, None, &script_url) { + // Propagation to the owner's global uses omitError: the + // child exception cannot cross the worker agent boundary. + let omitted_error = v8::null(scope).into(); + if !dispatch_worker_error_event( + scope, + global, + &report, + Some(omitted_error), + &script_url, + ) { report_exception_to_parent( &report, &script_url, diff --git a/moli-renderer-v8/src/worker/thread/tests/lifecycle/worker_errors_and_teardown.rs b/moli-renderer-v8/src/worker/thread/tests/lifecycle/worker_errors_and_teardown.rs index 6987265257..1a4d626be5 100644 --- a/moli-renderer-v8/src/worker/thread/tests/lifecycle/worker_errors_and_teardown.rs +++ b/moli-renderer-v8/src/worker/thread/tests/lifecycle/worker_errors_and_teardown.rs @@ -899,7 +899,7 @@ async fn nested_worker_unhandled_error_routes_through_parent_worker_onerror() { postMessage({ messageIncludesBoom: String(message).includes("child-boom"), filenameIncludesDataUrl: String(filename).includes("data:text/javascript"), - errorIsUndefined: error === undefined + errorIsNull: error === null }); close(); return true; @@ -916,7 +916,7 @@ async fn nested_worker_unhandled_error_routes_through_parent_worker_onerror() { .expect("channel closed"); assert_eq!( expect_post_json(msg), - r#"{"messageIncludesBoom":true,"filenameIncludesDataUrl":true,"errorIsUndefined":true}"# + r#"{"messageIncludesBoom":true,"filenameIncludesDataUrl":true,"errorIsNull":true}"# ); }