This Week in WebKit — May 16 - May 22, 2026
Featured
OSR exit parks live cells in a buffer the collector only scans on request, and the request was never made. The C++ half of the same exit path has always made it.
The surplus argument lands on a live spill slot of the optimized frame executing the call, carrying a JSValue from a property descriptor. That slot already held a proven type.
obj.#x should throw when the field isn't installed. In DFG-compiled code it could hand back the prototype's copy, and brand checks in JSC's own builtins run through the same routine.
C++ destruction order puts the base destructor after the derived members a media callback reads. Getting there needs only an observer that refuses to let the source end.
The extra entry was pure redundancy, and it named a ticket by an address whose only owner had just been released. TZone reuses that address for the next ticket.
A user Symbol.iterator can now run mid-spread, while a structure proof taken before the spread stays alive. Ordinary script decides which slot the JIT reads next.
Security fixes
Notable development
-
[Site Isolation] Web Inspector deterministic Network IDs and event routing
feature WebKit Web Inspector
-
[JSC] Private tmp mechanism in the DFG ByteCodeParser
bug JSC DFG and FTL JIT
-
[JSC] New DateNow DFG node
optimization JSC DFG and FTL JIT
-
[JSC] ArrayShift DFG node
optimization JSC DFG and FTL JIT
-
[JSC] String#match implemented in C++
optimization JSC DFG and FTL JIT
-
[libpas] Guard page at the front of the compact-heap reservation
hardening bmalloc libpas
-
[Site Isolation] WebFrameProxy children manipulation and BFCache caching foundations
feature WebKit Site Isolation
-
Validate identifiers when creating decoders and encoders in LibWebRTCCodecsProxy
hardening WebKit GPU Process WebRTC
- [JSC] ScopedArgumentsTable ScopeOffset buffer allocates from fastMalloc
Other security-relevant changes
- [JSC heap] (lifetime fix)
d55bf0c— WebAssemblyGCStructure는 Structure나 BrandedStructure와 달리 GC end phase에서 finalization 과정을 거치지 않았습니다. 이로 인해 WebAssembly GC 객체에서 도달 가능한 stale structure state가 남아 있을 가능성이 존재했습니다. 패치는 누락되었던 finalizeUnconditionally 호출을 추가합니다. - [WebCore AVFoundation] (UAF)
4193d2c— destructor 시작 시점에 weak pointer를 revoke하도록 변경했습니다. 이를 통해 MediaSource teardown 과정에서 KVO callback이 이미 파괴된 멤버(m_logger)에 접근하지 못하도록 차단합니다. Destruction 중에 유발되던 use-after-free를 수정한 패치입니다. - [WebCore webaudio] (UAF)
ed04ff4— web audio teardown 과정에서 AudioContext destructor가 자신의 destruction 도중 Document에 접근하면서 발생하던 use-after-free를 수정했습니다. removeAudioProducer 호출을 teardown 초기 단계로 옮기고, isStopped() 검사를 추가했습니다. - [libvpx VP9 encoder] (overflow)
53c3a3a— VP9 encoder의 vp9_scale_references가 reference frame buffer 할당에 실패했을 때 조용히 반환하는 대신 VPX_CODEC_MEM_ERROR로 명시적으로 실패하도록 강화했습니다. 또한 motion search 경로에 scaled reference frame이 source dimension과 일치하는지 검증하는 debug assertion을 추가했습니다. - [WebCore DOM] (trusted event bypass)
fc1ef83— label에 대한 untrusted click이 연결된 form control로 trusted 상태인 것처럼 전달되던 문제를 수정했습니다. 이를 통해 switch input의 haptic feedback에 요구되는 trusted-event 조건이 우회되는 상황을 방지합니다. - [WebCore Service Workers] (race condition)
3bce213— 내부 tracking map들이 race condition으로 인해 서로 어긋나면서 Service Worker client lookup 과정에서 발생하던 crash를 수정했습니다. end-iterator에 대한 guard를 추가해 잘못된 메모리 접근을 방지합니다. - [JSC FTL] (type confusion)
267af1c— JSC FTL의 MultiGetByOffset이 double로 변환 불가능한 constant 값(function)을 escape 처리하지 못해, ValueRepReduction에서 이 값이 숫자로 잘못 다뤄지던 type confusion에 대한 regression test입니다. Value representation 처리의 edge case에 해당합니다. - [WebCore CSP] (path traversal)
9a19d07— CSP3 스펙에 맞춰 pathMatches()의 동작을 full-path percent-decoding 방식에서 segment 단위 decoding 방식으로 변경했습니다. %2F..%2F를 이용한 CSP path 제약 우회를 방지합니다. - [WebCore loader] (protection bypass)
d6c7e00— about:blank popup이 registrable domain을 빈 값으로 가지면서, thirdPartyCookieBlockingDecisionForRequest()가 None을 반환해 third-party cookie blocking을 건너뛰던 문제가 있었습니다. 패치는 popup이 opener의 firstPartyForCookies를 상속받도록 변경합니다. - [WebCore HTMLPlugInElement] (validator bypass)
7d28e39—<embed>와<object>를 통한 plugin 로드에서 content extension rule이 우회되던 문제가 있었습니다. 패치는 HTMLPlugInElement::canLoadURL에 policy enforcement 검사를 추가해 blacklist에 등록된 리소스의 로드를 차단합니다.