Files
AnyPS5/docs/dev/debt/libSceIcu.md
T
Dean 1dcfe03875 Merge pull request #11760 from oneandonlydean/salvage/icu-9444
feat(libSceIcu): declare 112 PS5 3.20 exports
2026-10-28 12:08:55 +13:00

3.0 KiB
Raw Blame History

libSceIcu technical debt

Unknown function info

  • ICU export availability across firmware versions remains unproven. The PS5 3.20 inventory includes the implemented escape, invariant-character and version helpers. BunnyFl’s firmware 13.42 report records u_getVersion returning 78.1.0.0 under an emulator, but neither escape function is in the checked native system_ex/common_ex/lib/libSceIcu.sprx export table. Only 104 of the 661 inventory NIDs appear among that module’s 299 exports. The exports for compatibility with older firmware are retained; availability and routing across firmware versions remain unproven.

Functional

  • Escape decoding has no behavior or ABI verification on console hardware. It follows ICU 78.1's ustring.cpp, including rejection of eight-digit braced hexadecimal escapes although its public header advertises up to eight digits. Null source or offset pointers, null callbacks with an in-range offset, negative capacity with a nonnull destination and source lengths exceeding INT32_MAX throw. Null-destination preflight ignores capacity. Closes when: compared with the console, including callback ABI, byte conversion, capacity limits and braced hexadecimal parsing.

  • Invariant character and version helpers are unverified on a console. u_charsToUChars, u_UCharsToChars, u_versionFromString, u_versionFromUString and u_versionToString follow ICU 78.1 uinvchar.cpp and putil.cpp, unchanged since 65.1. Firmware 13.42 reports ICU 78.1 and exports none of them (#11013); the 3.20 table has all five. Version parts use the guest strtoul, truncated to eight bits; u_versionToString keeps ICU's dropped zero tens digit (105 becomes 15). A null buffer with a positive conversion length throws; ICU dereferences it. Closes when: compared with the console.

Known export names; ABI prototypes unverified

  • The 112 sceIcuUnknown_*_nid_no_patch exports in Export.cpp are present in the PS5 3.20 export inventory from PS5-3.20_Libs. Their prototypes and behavior are unverified. Each uses the no-parameter import-resolution convention and throws through NotImplemented_nid_no_patch; these declarations make no ABI or behavior claim.