We were unable to construct the commit group for this pull request: None of the pull request's commits have been successfully processed as yet.

[TESTERS NEEDED] Fix unpkg bugs #19528

Open
digant73 opened 4:03pm on September 17, 2026 wants to merge 1 commit into rpcs3/rpcs3 master from
fix_multiple_pkg_installation

Pull Request Overview

  • Opened on September 17, 2026
  • Status Open
  • Commit count 1 with first commit September 17, 2026

Total Delta

0 Total Diff Delta

Open Days

Open 2 weekdays

Test Delta

0 Diff Delta in Test Files
Breakdown by Phase

How long has this pull request spent in each phase of its lifecycle?

Fraction of total time Business days Phase
 
0.0 days Authoring 1 commit before pull request opened for review
 
0.0 days Awaiting first review
 
1.3 days Revising work with 0 commits in response to 0 reviews that left 6 comments

Total time for pull request still awaiting merge: 1.3 business days

Author avatar

[TESTERS NEEDED] Fix unpkg bugs

Try to fix some bugs on unpkg.cpp.
Further, improve comments on already merged PR #19497.

Analysis and fixes made by Fable 5.1.
PR marked as draft. It needs to be tested by users affected by the issues that this PR is expected to fix.

Tickets fixed by this PR:

(confirmed) fixes #18705 β€” Resident Evil: The Darkside Chronicles crashes RPCS3 at 0% during install (regression since #13147); also covers the earlier duplicates (closed but never fixed) #13280 and #15037.
(confirmed) fixes #19456 β€” "PKG entry path escapes installation directory" when the emulator path contains accented characters.
(confirmed) fixes #19490 β€” [Regression] PKG installation fail since build 0.0.42-19975 (#19385)

Tickets not covered by this PR (after further investigation):

(related to #13328) #13327 β€” Raystorm HD crash during installation (same cause, atten_e<82 8E>.pmd).

Changes:


  • PKG entry paths are converted to std::filesystem::path through explicit UTF-8 (utf8_to_wchar / wchar_to_utf8) instead of the narrow constructor, which read the bytes in the host ANSI code page and terminated the process on any it could not map (Shift-JIS file names such as s10c3_R126_<90 AC 91 CC>.mdat in Darkside Chronicles).

  • The canonical path is converted back with UTF-8 as well, so a dev_hdd0 path with non-ASCII characters yields a valid key and passes the containment check (upstream rejected every entry as "escapes installation directory").

  • The installation directory is canonicalized without its closing / separators, like every entry: on a file system that cannot resolve it, the lexical form no longer keeps an empty last element that no entry can match (network drives).

  • Absolute / . / .. checks run on the raw name bytes via a shared leaves_directory() helper; the .. case is now an installation failure instead of an emergency exit.

  • The installation directory name read from the package is validated with the same helper and escaped.

  • weakly_canonical is computed once per directory and reused for files not yet on disk (existing paths and folders are still resolved whole): identical keys and verdicts, ~25x faster enumeration (6000 files: 1.7 s β†’ 63 ms).

  • Supersedes #19463 (trailing separator after the lexical fallback)

  • Supersedes #19492

  • Minor: map key moved instead of copied.

This work implements [TESTERS NEEDED] Fix unpkg bugs

Comments Threads Pending Resolution

Resolved Comment Threads

No resolved comments have been left on this PR.