Summary
Playwright's frozen webkit_ubuntu20.04_x64_special-2092 WPE build crashes with SIGSEGV via WTFCrash() in FontCache::createFontPlatformData when loading lab2 apps (music, weblab2, pythonlab) on Drone's localhost dev build. The crash does not reproduce on:
- The unfrozen WebKit 26.4 (revision 2272) on Ubuntu 24.04
- Real Safari 16 via Saucelabs
- test-studio.code.org (prod build) with the same frozen WebKit
Root Cause
The crash is a WTFCrash() assertion failure in WebKit's font fallback resolution chain. Our global font stack (fontConstants.js) declares 22 Noto Sans i18n variants as fallbacks. When combined with the dev build's larger JS bundles (54MB lab2.js), the frozen WPE build's FontCache::createFontPlatformData hits a bug during FontCascadeFonts::realizeFallbackRangesAt.
Backtrace
```
#0 WTFCrash()
#1-#4 ?? (stripped)
#5 WebCore::FontCache::createFontPlatformData(...)
#7 WebCore::FontCache::fontForFamily(...)
#11 WebCore::FontCascadeFonts::realizeFallbackRangesAt(...)
#14 WebCore::FontCascade::glyphDataForCharacter(...)
#19 WebCore::FontCascade::width(TextRun)
#28 WebCore::Document::resolveStyle(...)
#31 WebCore::Element::offsetWidth()
```
Evidence
| Environment |
WebKit Build |
Bundle |
Result |
| Drone localhost |
`webkit_ubuntu20.04_x64_special-2092` (frozen) |
dev (54MB lab2.js) |
CRASH (SIGSEGV, WTFCrash) |
| Local Ubuntu 22.04 |
`webkit_ubuntu20.04_x64_special-2092` (frozen) |
dev (54MB lab2.js) |
CRASH (same) |
| Local Ubuntu 24.04 |
`webkit-2272` (WebKit 26.4, unfrozen) |
dev (54MB lab2.js) |
OK |
| test-studio |
`webkit_ubuntu20.04_x64_special-2092` (frozen) |
prod (3.9MB common) |
OK |
| Saucelabs Safari 16 |
Real Safari |
dev (54MB lab2.js) |
OK |
Font chain that triggers the crash
```
Figtree, "Noto Sans", "Noto Sans Arabic", "Noto Sans Armenian",
"Noto Sans Bengali", "Noto Sans SC", "Noto Sans TC",
"Noto Sans Devanagari", "Noto Sans Georgian", "Noto Sans Hebrew",
"Noto Sans JP", "Noto Sans Kannada", "Noto Sans Khmer",
"Noto Sans KR", "Noto Sans Myanmar", "Noto Sans Sinhala",
"Noto Sans Tamil", "Noto Sans Telugu", "Noto Sans Thai",
"Noto Sans Thaana", "Noto Sans Math", sans-serif
```
Defined in `apps/src/fontConstants.js`. The same font chain on test-studio (prod build) does NOT crash — the dev build's larger bundles amplify the issue.
Resolution
Upgrade the Drone CI container from Ubuntu 20.04 to 24.04. This gives Playwright the unfrozen `webkit-2272` build (WebKit 26.4) which does not have this bug. Verified locally: same dev build, same font chain, no crash on Ubuntu 24.04.
Affected Tests
Playwright e2e tests for lab2 apps on WebKit in the Drone pipeline. Currently, Drone's `playwright_ui` task runs with `|| true` (non-blocking), so this doesn't block CI. Specific tests marked `test.fixme()` referencing this issue.
Summary
Playwright's frozen
webkit_ubuntu20.04_x64_special-2092WPE build crashes withSIGSEGVviaWTFCrash()inFontCache::createFontPlatformDatawhen loading lab2 apps (music, weblab2, pythonlab) on Drone's localhost dev build. The crash does not reproduce on:Root Cause
The crash is a
WTFCrash()assertion failure in WebKit's font fallback resolution chain. Our global font stack (fontConstants.js) declares 22 Noto Sans i18n variants as fallbacks. When combined with the dev build's larger JS bundles (54MBlab2.js), the frozen WPE build'sFontCache::createFontPlatformDatahits a bug duringFontCascadeFonts::realizeFallbackRangesAt.Backtrace
```
#0 WTFCrash()
#1-#4 ?? (stripped)
#5 WebCore::FontCache::createFontPlatformData(...)
#7 WebCore::FontCache::fontForFamily(...)
#11 WebCore::FontCascadeFonts::realizeFallbackRangesAt(...)
#14 WebCore::FontCascade::glyphDataForCharacter(...)
#19 WebCore::FontCascade::width(TextRun)
#28 WebCore::Document::resolveStyle(...)
#31 WebCore::Element::offsetWidth()
```
Evidence
Font chain that triggers the crash
```
Figtree, "Noto Sans", "Noto Sans Arabic", "Noto Sans Armenian",
"Noto Sans Bengali", "Noto Sans SC", "Noto Sans TC",
"Noto Sans Devanagari", "Noto Sans Georgian", "Noto Sans Hebrew",
"Noto Sans JP", "Noto Sans Kannada", "Noto Sans Khmer",
"Noto Sans KR", "Noto Sans Myanmar", "Noto Sans Sinhala",
"Noto Sans Tamil", "Noto Sans Telugu", "Noto Sans Thai",
"Noto Sans Thaana", "Noto Sans Math", sans-serif
```
Defined in `apps/src/fontConstants.js`. The same font chain on test-studio (prod build) does NOT crash — the dev build's larger bundles amplify the issue.
Resolution
Upgrade the Drone CI container from Ubuntu 20.04 to 24.04. This gives Playwright the unfrozen `webkit-2272` build (WebKit 26.4) which does not have this bug. Verified locally: same dev build, same font chain, no crash on Ubuntu 24.04.
Affected Tests
Playwright e2e tests for lab2 apps on WebKit in the Drone pipeline. Currently, Drone's `playwright_ui` task runs with `|| true` (non-blocking), so this doesn't block CI. Specific tests marked `test.fixme()` referencing this issue.