Skip to content

error: never return an empty JSValue from computeErrorInfoWrapperToJSValue - #34104

Merged
Jarred-Sumner merged 2 commits into
mainfrom
farm/fdf23f49/error-instance-getownpropslot-exception
Jul 14, 2026
Merged

error: never return an empty JSValue from computeErrorInfoWrapperToJSValue#34104
Jarred-Sumner merged 2 commits into
mainfrom
farm/fdf23f49/error-instance-getownpropslot-exception

error: defer termination and never return empty from computeErrorInfo…

1c0ed31
Select commit
Loading
Failed to load commit list.
Claude / Claude Code Review completed Jul 14, 2026 in 21m 47s

Code review found 1 important issue

Found 1 candidates, confirmed 1. See review comments for details.

Details

Severity Count
🔴 Important 1
🟡 Nit 0
🟣 Pre-existing 0
Severity File:Line Issue
🔴 Important src/jsc/bindings/FormatStackTraceForJS.cpp:646 DeferTerminationForAWhile makes user prepareStackTrace/.message getter un-interruptible by worker.terminate()

Annotations

Check failure on line 646 in src/jsc/bindings/FormatStackTraceForJS.cpp

See this annotation in the file changed.

@claude claude / Claude Code Review

DeferTerminationForAWhile makes user prepareStackTrace/.message getter un-interruptible by worker.terminate()

The `DeferTerminationForAWhile` scope here spans the `profiledCall` into the user's `Error.prepareStackTrace` (and the user `.message` getter), so a Worker that hangs inside `prepareStackTrace` can no longer be interrupted by `worker.terminate()` — the `NeedTermination` trap is masked at every loop back-edge for the duration. The cited precedents (`LazyProperty::callFunc`, #33966) only defer around bounded C++ initializers, never unbounded user JS; consider narrowing the scope to exclude the `pr