Tags: AcademySoftwareFoundation/OpenRV
Tags
fix: crashpad_handler corrupted by install-time strip on Rocky Linux 8 ( #1381) ## Problem Packaged Linux Release builds shipped an **unloadable** `bin/crashpad_handler`, so RV printed this at every launch on Rocky Linux 8: ``` ERROR: Failed to start Crashpad handler ERROR: Failed to initialize crash handler ``` The shipped binary cannot be executed at all — it fails with exit 127 — so `CrashpadClient::StartHandler()` fails and no crash dumps are ever captured. ## Root cause `after_copy_platform()` in `cmake/install/pre_install_linux.cmake` ran a bare `strip -S` on every installed ELF. On binaries whose layout makes GNU strip emit ``` warning: allocated section `.dynstr' not in segment ``` strip relocates `.dynstr` to the end of the file but leaves its virtual address unchanged, so no `PT_LOAD` covers it any more: | | `.dynstr` addr | file offset | first `LOAD` filesz | |---|---|---|---| | healthy | `0x3ff5b0` | `0x0005b0` ✅ | `0x1000` | | as shipped | `0x3ff5b0` | `0x0ce5b0` ❌ | `0x5b0` | At runtime `0x3ff5b0` maps from file offset `0x5b0`, which is now all zeros, so every library/symbol/version name reads as an empty string. **strip exits 0 while doing this**, which is why the existing `RESULT_VARIABLE` check could not catch it. `crashpad_handler` is exposed because `cmake/dependencies/crashpad.cmake` runs `patchelf --set-rpath` on it. patchelf has no `DT_RUNPATH` to overwrite, so it grows `.dynstr` and inserts a new RW `PT_LOAD` below the image base, leaving `.dynstr` straddling a segment boundary. The pristine pre-patchelf binary is well formed. It is the only patchelf'd binary in `bin/`, which is why the neighbouring Breakpad tools strip fine. ## Fix Use the existing `cmake/scripts/strip_debug_safe.sh` guard instead of a bare `strip -S`, exactly as `cmake/macros/rv_stage.cmake` already does for RV's own targets. It strips to a temp copy and only replaces the original when strip is warning- and error-free. The mime-type ignore list could not be used: `crashpad_handler` is plain `application/x-executable` like every other RV binary. ## Verification Root cause proven three ways: 1. `strip -S` on a known-good handler reproduces a byte-identical corruption signature and turns exit 0 into exit 127. 2. Moving `.dynstr` back to offset `0x5b0` in the shipped binary — a single ELF field edit, nothing else — makes it work again. 3. End to end: the shipped build prints both errors and captures 0 dumps; with a repaired handler it prints `INFO: Crash handler initialized successfully` and captures a real 589664-byte minidump. ## Blast radius Linux only, Release installs only, no runtime/C++ changes. Measured over the full staged tree (803 strip candidates): - **796** strip cleanly and are **byte-identical** to the previous in-place `strip -S` output (md5-verified sample including `rv.bin`, `libQt6Core.so.6`, `dump_syms`) - **2** real ELFs now left unstripped: `bin/crashpad_handler` and `PySide6/lupdate` — both were shipping corrupted - **5** non-ELF files already failed and were already left untouched; outcome unchanged Net package size impact is **-26712 bytes** — "stripping" those two binaries was *growing* them. Normal stripping is unaffected (`dump_syms` 9596480 -> 453976, matching the shipped size). File modes are preserved (`755`, `644`, `664` all verified) and the step is idempotent. ## Platform note Only Rocky 8 was affected in the field. Rocky 9's strip leaves both binaries alone instead of mis-writing them, so its packages were already healthy — confirmed with same-version, same-day Rocky 8 and Rocky 9 artifacts (Rocky 8: 2 corrupted files; Rocky 9: 0). Rocky 9 has therefore been shipping these two binaries unstripped all along; this change makes Rocky 8 consistent with that rather than changing Rocky 9. Because the guard always exits 0, genuine strip failures would have been downgraded from `WARNING` to `STATUS`. The known-benign `.dynstr not in segment` skip is reported at `STATUS` and everything else stays at `WARNING`. `CMAKE_MATCH_1` is saved beforehand, since the added `MATCHES` would otherwise clobber the mime type in that warning message. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Signed-off-by: Bernard Laberge <bernard.laberge@autodesk.com> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
docs: Set VFX platform badge to 2025 in README.md (#1357) ### docs: Set VFX platform badge to 2025 in README.md ### Linked issues NA ### Summarize your change. Update VFX platform badge from 2024 to 2025 in README.md ### Describe the reason for the change. The current README.md's VFX platform badge (2024) was not representating the default VFX platform of the main branch (2025) ### Describe what you have tested and on which operating system. Successfully tested on macOS ### Add a list of changes, and note any that might need special attention during the review. ### If possible, provide screenshots. Before: <img width="228" height="140" alt="before" src="https://github.com/user-attachments/assets/34ea5404-fc1d-4a4c-98e7-0e55363e42f9" /> After: <img width="224" height="139" alt="after" src="https://github.com/user-attachments/assets/82aaf565-4658-451b-a2ee-031de0c44866" /> Signed-off-by: Bernard Laberge <bernard.laberge@autodesk.com>
SG-42039 Revert recent mmr fix (#1121) ### SG-42039 Revert recent mmr fix ### Linked issues NA ### Summarize your change. Reverting this recent multiple media representation fix since it might be causing crashes during a clearSession() (because sourcesAtFrame() might be evaluated during this clearSession()). The multiple media representation fix was cosmetic anyhow in a Live Review RV-RV with Screening Room scenario: after loading a new version via Screening Room, the participants' multiple media representation UI at the bottom right of the RV player was not being updated because this event was not taken into consideration. ### Describe the reason for the change. Random crashes occured in OTIO RV Automated tests ### Describe what you have tested and on which operating system. successfully tested on macOS ### Add a list of changes, and note any that might need special attention during the review. ### If possible, provide screenshots. Signed-off-by: Bernard Laberge <bernard.laberge@autodesk.com>
Fix drop region for High-DPI displays (#889) (#890) ### 889: Fix drop region for High-DPI displays ### Linked issues Fixes #889 ### Describe the reason for the change. Could not add new content sources via drag and drop when a source is already loaded on High-DPI displays ### Summarize your change. Now taking devicePixelRatio (High-DPI display) into account in drawDropRegions() mu method. ### Describe what you have tested and on which operating system. Successfully tested on macOS ### Add a list of changes, and note any that might need special attention during the review. ### If possible, provide screenshots. Signed-off-by: Bernard Laberge <bernard.laberge@autodesk.com>
Upgrading python3.cmake to 3.10.13 (#373) ### Linked issues n/a ### Summarize your change. Upgrading python version from 3.10.12 to 3.10.12 ### Describe the reason for the change. Upgrade ### Describe what you have tested and on which operating system. Rocky 8 ### Add a list of changes, and note any that might need special attention during the review. n/a ### If possible, provide screenshots. n/a Signed-off-by: Cédrik Fuoco <cedrik.fuoco@autodesk.com> Co-authored-by: Kerby Geffrard <kerby.geffrard@autodesk.com>