sceNpManagerIntAuthGetAuthorizationCode, AuthGetIdToken,
GetAuthorizationCode and GetAuthorizationCodeWithPsnoUri return
SCE_NP_ERROR_SIGNED_OUT. That is the answer libSceNpAuth's
authorization-code and ID-token calls give for a live request while NP
is signed out. Their signatures are unknown, so they read no argument.
sceNpManagerIntGetUserIdByOnlineId and GetUserIdByNpId return
SCE_NP_ERROR_SIGNED_OUT, as sceNpGetUserIdByOnlineId does while NP is
signed out. An NpId carries the online ID, so the NpId form is the same
lookup. Neither reads an argument.
sceNpManagerIntGetAccountAge, GetAccountCountryA, GetAccountLanguageA,
GetNpId and GetOnlineId return SCE_NP_ERROR_SIGNED_OUT, as their public
twins do while NP is signed out. Their signatures are unknown, so they
read no argument and write nothing.
A valid broken-down time with tm_year INT_MAX, INT_MAX - 1899 and INT_MIN must fail with EINVAL and an empty buffer through both asctime_s exports. Run under UndefinedBehaviorSanitizer, the case reports signed integer overflow without the fix.
asctime_s and sceAmprAsctimeS added 1900 to tm_year in int before the range check, so a tm_year near INT_MAX overflowed: UndefinedBehaviorSanitizer reports signed integer overflow at SonyCrt.hpp:91. The year is now computed in 64 bits; the result stays EINVAL with an empty buffer for any year outside 0 to 9999.
Resolve the rebase conflicts with upstream's public API header migration. Put the typed entitlement-key layout and signature in Api.hpp, remove duplicate test/source declarations, and retain upstream's typed add-content checks and initialization behavior.
Keep ignoring the service label in the no-entitlement model. Cover labels 0, 7, 8 and UINT32_MAX without touching the output key. Update debt to distinguish firmware 13.42 module-side validation from the still-unverified system-service result. Evidence: https://github.com/boykopovar/AnyPS5/pull/9638#issuecomment-6390573735
Ubuntu 24.04, GCC 13.3, Release, upstream e7e3e9c198: actual libraries and guest_appcontent_tests built; guest_appcontent passes 1/1. Public-header audit, syntax checks of implementation and test, conventions, test registration and whitespace checks pass. No title or PS5 hardware tested; Windows was not rerun for this update.
AI-assisted: yes
Homebrew built with the ps5-payload-dev SDK declares
sceNotificationSend(int userId, bool isLogged, const char* payload) and
its notify sample passes the system user, true and a JSON toast. Use
those parameters, which take the same registers as before, keep the
export throwing and record the call in the technical debt.
AmmSubmit_nid_no_patch stored the id _submit returned into lastSubmit
after _submit had released the queue's submit lock. Two submitters could
store out of order: the later id was stored first, then the earlier one
overwrote it, and a wait for the later, already submitted id failed with
ESRCH until the next submission.
The wait now checks the id against the AMM queue's own submitted count,
which _submit raises under the queue mutex before it returns, and
lastSubmit goes.
The test has four threads submit empty AMM buffers while another waits
on the newest id any of them has published, through
sceKernelWaitCommandBufferCompletion and
sceAmprAmmWaitCommandBufferCompletion, and requires every wait to
succeed.
Removing the generated source and output directories ignored errors, so an
undeletable stale registry survived and was audited with the new run's
registries. Report the failure and return 2 before conversion; remove a link
in place of a generated directory instead of following it.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Auditing a title before its first run takes several manual steps from
GAME_TESTING: unwrap eboot.bin and every module the title ships with
unwrap_self.py, convert them with relinker --registry (with
--module-dir for Unity's Media/Modules and Media/Plugins, and for
modules beside eboot.bin), and pass every registry and module folder
to import_audit.py. Missing one module folder turns its imports into
false "absent" entries.
tools/audit_dump.py <app0> --relinker <path> --libs <dir> does those
steps into a temporary directory (or --work <dir>), reading the dump
only. A module that is already a plain ELF is copied; one that is
neither a SELF nor an ELF fails the run. It returns import_audit's exit
code, or 2 when unwrapping or conversion fails.
audit_dump covers the module folders and the module-dir list, a
refused module, the relinker command line, the arguments passed to
import_audit, a relinker failure and the argument errors.
Co-Authored-By: Claude Opus 5.5 <[email protected]>