Files
AnyPS5/docs/dev/debt/libSceNpUtility.md
T
louise-patraandClaude Opus 5.5 10f2994bb6 fix(libSceNpUtility): refuse null results and synchronous requests in polls and waits
Firmware 13.42's module checks a null result first (0x80550704) and
refuses a synchronous request in the lookup poll and wait with
0x80550307; the word filter keeps INVALID_ID. The debt entry records the
measurement and that IDs here do not carry the console's service bits.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-25 18:50:17 +05:30

14 KiB

libSceNpUtility technical debt

Unknown function info

Functional

  • NpLookup and NpWordFilter (libSceNpUtility) - offline only, not measured on a PS5: the argument checks and their order, the limit of 32 title contexts and 32 requests, the word filter id bases 0x01000001 and 0x02000001, the 0x400-byte comment limit and single-use requests (INVALID_TYPE) follow shadPS4's lookup and word filter calls. sceNpLookupNpId, sceNpWordFilterCensorComment and sceNpWordFilterSanitizeComment then finish with SCE_NP_ERROR_SIGNED_OUT and write no NpId or comment; shadPS4's word filter accepts every comment as a stand-in for the server, so its result is not used
  • NpLookup and NpWordFilter waits and timeouts (libSceNpUtility) - IDs here carry no service: on the console, measured on firmware 13.42's module in an emulator (#10640), each ID holds its service in its high bits (Lookup requests 0x2xxxxxxx and title contexts 0x4xxxxxxx, word filter 0x02xxxxxx and 0x04xxxxxx), and SetTimeout, AbortRequest, PollAsync and WaitAsync find the object by those bits whichever service's call is made; here each call finds only its own service's IDs, which keep the ranges above. The timeouts are checked as measured and then have no effect, since no request reaches a server; the console stores them. A wait on a request deleted meanwhile returns INVALID_ID, unmeasured. The measured checks are followed: a null result first (0x80550704), a synchronous request (0x80550307 for Lookup, INVALID_ID for the word filter), the timeout bounds and the 0x18-byte async parameter