CEF ICU FD Crash on Linux During SDL3 Migration
Date: February 25, 2026
Summary
When running browser surfaces (for example SPACE_BROWSER_CUBE_DEMO=1), the app crashed with Chromium's ICU startup error:
[ERROR:base/i18n/icu_util.cc:232] Invalid file descriptor to ICU data received.
Trace/breakpoint trap (core dumped)This did not reproduce on plain startup when no browser surface was created, because CEF initialization is lazy.
Reproduction
From repo root:
SPACE_DISABLE_AUDIO=1 SPACE_ASSETS_PATH=$(pwd)/assets SPACE_BROWSER_CUBE_DEMO=1 ./build/space -m mainExpected bad behavior before fix:
- process exits with signal
SIGTRAP/ code133 - ICU FD error appears
Root Cause
CEF/Chromium attempted to load icudtl.dat from the directory containing libcef.so:
${SPACE_CEF_ROOT}/Release/icudtl.dat
But in our fetched CEF layout, ICU and other runtime payload files were only in:
${SPACE_CEF_ROOT}/Resources/
So Chromium failed to initialize ICU data and aborted.
Fix Implemented
1) Stage runtime payloads next to libcef.so
File: cmake/cef.cmake
At configure time, copy these files from Resources/ to Release/ if present:
icudtl.datresources.pakv8_context_snapshot.binsnapshot_blob.binchrome_100_percent.pakchrome_200_percent.paklocales/
This aligns with Chromium's runtime lookup behavior on Linux.
2) Harden Linux CEF subprocess switches
File: src/cef_runtime.cpp
Ensure command-line switches include:
no-sandboxdisable-setuid-sandboxno-zygote
This prevents sandbox/zygote paths that were not appropriate for this runtime configuration.
Verification
Runtime
SPACE_DISABLE_AUDIO=1 SPACE_ASSETS_PATH=$(pwd)/assets SPACE_BROWSER_CUBE_DEMO=1 ./build/space -m mainAfter fix: app starts normally (no ICU FD crash).
Tests
make testpassesmake test-e2epasses (after expected SDL3-related snapshot updates)- CTest no longer forces
SPACE_SKIP_CEF=1forspace_fnl_testsortest_dotenv_integration; both now pass with default CEF startup enabled.
Notes
- This incident is distinct from snapshot differences introduced by SDL3 migration.
- Snapshot mismatches were visual regressions/golden drift, not CEF startup failures.
