fix(appimage): copy sysroot library aliases by value for updates #1536

Merged
Arkex-ai merged 1 commit from fix/linux-update-sysroot-links into main 2026-11-10 07:17:38 +00:00
Arkex-ai commented 2026-11-10 07:11:20 +00:00 (Migrated from github.com)

The updater now refuses absolute-target ZIP symlinks, but the AppImage sysroot copies system library aliases with cp -a. A distribution's absolute libmvec.so alias can therefore produce an update part the updater rejects. The old toolchain-link fixture also contradicts that new refusal policy and fails the shared Linux source checks.

Copy the selected sysroot library inputs by value with cp -aL, retaining their bytes/attributes inside the part. Keep the deliberate relative lib -> usr/lib layout and update the valid-link fixture to exercise relative links. The ZIP writer, updater and their absolute-link refusal are unchanged; existing bad parts are not rewritten.

Validation at d582bff on main 509579b:

  • Linux update tests pass, including an executable production-copy-loop test followed by the real ZIP writer and unpacker, using private library bytes and an absolute source alias. The original source alias/target remain intact.
  • Reverting only the production copy flag to cp -a restores an assertion failure in that test. Hostile ZIP symlink/write-through and symlinked-destination tests still reject their inputs. Bash syntax passes.
  • This repairs the contract demonstrated by source run42771355005, job129679662824; it does not skip that failure or weaken the updater. Three exact-head fork workflows follow. No game/runtime test applies to this packaging-only change.

See docs/linux-update-sysroot.md. No game data or build output is included.

Current-head validation

Current head d582bff, based on main 509579b. Earlier local/runtime results describe their recorded source hashes.

Fork runs are separate from upstream Actions approval; no maintainer approval gate is bypassed.

The updater now refuses absolute-target ZIP symlinks, but the AppImage sysroot copies system library aliases with `cp -a`. A distribution's absolute `libmvec.so` alias can therefore produce an update part the updater rejects. The old toolchain-link fixture also contradicts that new refusal policy and fails the shared Linux source checks. Copy the selected sysroot library inputs by value with `cp -aL`, retaining their bytes/attributes inside the part. Keep the deliberate relative `lib -> usr/lib` layout and update the valid-link fixture to exercise relative links. The ZIP writer, updater and their absolute-link refusal are unchanged; existing bad parts are not rewritten. Validation at `d582bff` on main `509579b`: - Linux update tests pass, including an executable production-copy-loop test followed by the real ZIP writer and unpacker, using private library bytes and an absolute source alias. The original source alias/target remain intact. - Reverting only the production copy flag to `cp -a` restores an assertion failure in that test. Hostile ZIP symlink/write-through and symlinked-destination tests still reject their inputs. Bash syntax passes. - This repairs the contract demonstrated by source run42771355005, job129679662824; it does not skip that failure or weaken the updater. Three exact-head fork workflows follow. No game/runtime test applies to this packaging-only change. See `docs/linux-update-sysroot.md`. No game data or build output is included. <!-- goal15-current-validation --> ### Current-head validation Current head `d582bff`, based on main `509579b`. Earlier local/runtime results describe their recorded source hashes. - [Linux AppImage](https://github.com/Arkex-ai/Hookshot/actions/runs/42773551410): in_progress. - [Windows builder](https://github.com/Arkex-ai/Hookshot/actions/runs/42773546600): queued. - [Game-free source regressions](https://github.com/Arkex-ai/Hookshot/actions/runs/42773543104): queued. Fork runs are separate from upstream Actions approval; no maintainer approval gate is bypassed.
Commenting is not possible because the repository is archived.
No description provided.