Conversation
3a732ea to
2acc6c9
Compare
There was a problem hiding this comment.
Copilot review overview
🔵 Needs a closer look
Runtime sandbox-token, job-object, Crashpad, and performance validation remain explicit release gates.
Review effort: Balanced
Findings: None
What changed in this PR
Hosts Windows CEF subprocesses in obs64.exe with sandbox lifecycle support while isolating incompatible CRT dependencies.
Changes:
- Adds strict CEF child classification and packaged browser-plugin dispatch.
- Introduces a
/MDCrashpad bridge while moving the host closure to/MT. - Adds focused tests, packaging updates, and a temporary CEF-enabled libobs pin.
| File | Description |
|---|---|
.github/workflows/main.yml |
Pins the CEF-enabled libobs package. |
CMakeLists.txt |
Configures CRT variants and duplicated IPC targets. |
obs-studio-client/CMakeLists.txt |
Preserves the Electron addon's dynamic CRT. |
obs-studio-server/CMakeLists.txt |
Links sandbox and Crashpad bridge targets. |
obs-studio-server/source/main.cpp |
Dispatches CEF children before normal startup. |
obs-studio-server/source/cef-subprocess.hpp |
Declares subprocess classification utilities. |
obs-studio-server/source/cef-subprocess.cpp |
Implements validation, logging, and path checks. |
obs-studio-server/source/cef-sandbox-host.hpp |
Declares Windows child dispatch. |
obs-studio-server/source/cef-sandbox-host.cpp |
Loads and executes the packaged browser subprocess. |
obs-studio-server/source/crashpad-bridge.h |
Defines the Crashpad bridge ABI. |
obs-studio-server/source/crashpad-bridge.cpp |
Isolates Crashpad lifecycle and exception handling. |
obs-studio-server/source/util-crashmanager.cpp |
Routes Windows Crashpad operations through the bridge. |
obs-studio-server/tests/test-cef-subprocess.cpp |
Tests classification, logging, and path validation. |
tests/osn-tests/src/test_osn_module.ts |
Excludes packaged CEF runtime DLLs from module loading. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
|
Following the Copilot closer-look review: I checked Chromium 128 Windows command-line parsing and found that the child classifier missed alternate switch prefixes and boundary whitespace that Chromium accepts. Commit 501575d now classifies native wide arguments with Chromium-compatible prefix, case, whitespace, and switch-terminator handling, with focused tests. All updated PR checks passed. The runtime token and job-object evidence, Crashpad smoke test, and performance measurements listed in the PR body remain release gates. |
Summary
obs64.exeand link the host toOBS::cef-sandboxobs-browser.dllfor child dispatch and reject malformed, unknown, duplicate, or--no-sandboxinvocationsCefExecuteProcessreturns, avoiding child-exit unload races/MDCrashpad implementation inosn-crashpad-bridge.dllso the/MTCEF sandbox can link safely/MTtoobs64.exeand its static link closure; retain/MDand/MDdfor the Electron addon and its IPC archivestaging(0.27.19 / Electron 43.7.6)Dependencies and test package
LibOBSVersionto32.1.1sl12cef3until Update libobs to v26.1.8 #775 merges and a final libobs version is published7C48157F752DE0D80550D7EF583371DA31C0032204138EAD4BE790F887A36C64The older
32.1.1sl10cef2test package from #1780 cannot build currentstaging:osn-screenshot.cppnow usesgs_save_png_file, which requires libobssl12.This PR remains draft until runtime evidence confirms restricted process tokens and job-object confinement for renderer, GPU, utility-service, and Crashpad children. Absence of
--no-sandboxis not closure evidence.CRT boundary
lib-streamlabs-ipcis built twice because it links into both the Electron addon andobs64.exe. The addon variant remains/MDor/MDd; theobs64.exevariant and host static closure use/MT. The Crashpad bridge exposes a C-only synchronous boundary: no CRT allocation, C++ object,FILE*, fd/HANDLE ownership, or errno state crosses it.Validation
32.1.1sl12cef3Windows build/publication and both macOS producer jobs passed7z tpasses; the archive contains CEF 128.0.6613.138,OBS::cef-sandbox,cef_sandbox.lib, the sandbox ABI and CEF headers,obs-browser.dll,libcef.dll, andgs_save_png_file32.1.1sl12cef2passed Windows and both macOS builds/testsgit diff --checkpasses after rebasing onto currentstagingsl10cef2was the expected missinggs_save_png_fileAPI; this pin supplies itlib-streamlabs-ipc-obs64, server unit tests,obs64.exe, andobs_studio_client.node; the server suite passed 25/25 and the focused CEF suite passed 5/5/MD, Debug addon/MDdwith_DEBUGretained, and theobs64.exelink closure/MTRemaining release gates
service-sandbox-type=noneand the embedded Crashpad handlerobs64.exedependency chainSupersedes #1779 after the source branch was renamed to remove an internal issue identifier.