ast-hugger
JSC security specialist
Summary
Works almost entirely in JSC, split between parser/lexer throughput work (single-pass int token scanning, hot-path pruning, Parser/Lexer and InlineCacheHandler struct layout) and WebAssembly runtime internals, including JSPI stack switching and conservative-scan interaction. The security fixes cluster hard on the wasm side — a use-after-free in StreamingCompiler ticket handling, a UAF after growing a resizable buffer backing wasm memory, overlapping stack slots in BBQJIT tail-call shuffles, and missing traversal of expanded types in wasm GC structure dependencies — with a single DFG ArgumentsElimination scan-index bug as the outlier. Systematic-variant candidate: the JSPI evacuated-stack and conservative-root-scan paths, where the same author landed several correctness fixes (stack overflow handling, callee cleanup across multiple scans, `prepareForConservativeScan()` constraints) in close succession — the lifetime assumptions there are clearly still settling.
Components
Security Fix History
- 2026-06-30 [JSC] DFGArgumentsEliminationPhase removeViaKill should reset node scan index between InlineCallFrames ·
- 2026-06-16 Use-after-free of StreamingCompiler::m_ticket 2026-W24
- 2026-06-12 [JSC] BBQJIT tail call shuffle should detect overlapping stack slots ·
- 2026-06-03 [JSC] Add a test of WebAssembly IPInt stack check 2026-W22
- 2026-04-29 [JSC] Use-after-free after growing a resizable buffer on a WebAssembly memory 2026-W17
- 2026-04-17 [JSC] `WebAssemblyGCStructureTypeDependencies::process` should traverse expanded types 2026-W15
Hardening Commits
Recent Commits
- 2026-08-07 [JSC] Retire Lexer::lexExpectIdentifier()
- 2026-08-04 [JSC] Move two rarely-executed code paths out of the lexer and parser hot functions
- 2026-07-31 [JSC] Scan an int token in a single pass
- 2026-07-21 [JSC] Generate Data IC code as fall-through
- 2026-06-30 [JSC] DFGArgumentsEliminationPhase removeViaKill should reset node scan index between InlineCallFrames ·
- 2026-06-22 [JSC] Create a save point only if actually checking for "use strict"
- 2026-06-16 Use-after-free of StreamingCompiler::m_ticket 2026-W24
- 2026-06-12 Mark myself (ast-hugger) as a reviewer
- 2026-06-12 [JSC] BBQJIT tail call shuffle should detect overlapping stack slots ·
- 2026-06-05 [JSC] Optimize the layout of Parser and Lexer
- 2026-06-05 [JSC] Optimize the layout of InlineCacheHandler
- 2026-06-04 [JSC] Optimize the layout of InlineCacheHandler
- 2026-06-03 [JSC] Add a test of WebAssembly IPInt stack check 2026-W22
- 2026-05-19 InlineMap RefPtr tests should drain the RefLogger buffer
- 2026-05-13 [JSC][JSPI] Include everything above the suspending frame record into the evacuated stack