Merge pull request #13811 from xdCloudy/feat/libSceCompanionHttpd-verified-zero-returns

feat(libSceCompanionHttpd): implement verified zero returns
This commit is contained in:
Adrià authored and GitHub committed 2026-11-01 02:35:43 +01:00
commit 7a96c6af26
3 files changed
+11 -8

No files matched your search

@@ -109,17 +109,14 @@ int APS5_VABI sceCompanionHttpdGetEvent(void* event) {
}
int APS5_VABI sceCompanionHttpdAddHeader(const char* key, const char* value, void* response) {
NotImplemented_nid_no_patch(__func__);
return 0;
}
int APS5_VABI sceCompanionHttpdSetStatus(int status, void* response) {
NotImplemented_nid_no_patch(__func__);
return 0;
}
int APS5_VABI sceCompanionHttpdSetBody(const char* body, std::uint64_t size, void* response) {
NotImplemented_nid_no_patch(__func__);
return 0;
}
+10 -4
View File
@@ -90,10 +90,16 @@ void CheckStates() {
}
void CheckResponseBuilders() {
unsigned char response[0x20]{};
RequireNotImplemented([&] { sceCompanionHttpdAddHeader("key", "value", response); }, "sceCompanionHttpdAddHeader");
RequireNotImplemented([&] { sceCompanionHttpdSetStatus(200, response); }, "sceCompanionHttpdSetStatus");
RequireNotImplemented([&] { sceCompanionHttpdSetBody("body", 4, response); }, "sceCompanionHttpdSetBody");
unsigned char response[0x20];
unsigned char untouched[sizeof(response)];
std::memset(response, 0xa5, sizeof(response));
std::memcpy(untouched, response, sizeof(response));
Require(sceCompanionHttpdAddHeader("key", "value", response) == 0, "sceCompanionHttpdAddHeader did not return zero");
Require(std::memcmp(response, untouched, sizeof(response)) == 0, "sceCompanionHttpdAddHeader wrote the response");
Require(sceCompanionHttpdSetStatus(200, response) == 0, "sceCompanionHttpdSetStatus did not return zero");
Require(std::memcmp(response, untouched, sizeof(response)) == 0, "sceCompanionHttpdSetStatus wrote the response");
Require(sceCompanionHttpdSetBody("body", 4, response) == 0, "sceCompanionHttpdSetBody did not return zero");
Require(std::memcmp(response, untouched, sizeof(response)) == 0, "sceCompanionHttpdSetBody wrote the response");
RequireNotImplemented([] { sceCompanionHttpdGet2ndScreenStatus(); }, "sceCompanionHttpdGet2ndScreenStatus");
RequireNotImplemented([] { sceCompanionHttpdGetUserId(); }, "sceCompanionHttpdGetUserId");
RequireNotImplemented([] { sceCompanionHttpdInitialize2(); }, "sceCompanionHttpdInitialize2");
+1 -1
View File
@@ -3,7 +3,7 @@
### Unknown function info
- [sceCompanionHttpdOptParamInitialize, sceCompanionHttpdInitialize](../../../core/libs/prx/libSceCompanionHttpd/Export.cpp) (libSceCompanionHttpd) - the option block is taken as 0x60 bytes: titles fill a work memory pointer at +0x08, its size at +0x10 and a temporary data mount point at +0x58 after `sceCompanionHttpdOptParamInitialize`. Its other fields and the defaults the console writes are unknown, so `sceCompanionHttpdOptParamInitialize` zeroes the 0x60 bytes and `sceCompanionHttpdInitialize` reads none of them; both reject a null block with `INVALID_PARAM`
- [sceCompanionHttpdAddHeader, sceCompanionHttpdSetStatus, sceCompanionHttpdSetBody](../../../core/libs/prx/libSceCompanionHttpd/Export.cpp) (libSceCompanionHttpd) - imported by PS4 titles and added without an implementation. They fill the response of a request callback, which is never called here, so every call throws
- [sceCompanionHttpdAddHeader, sceCompanionHttpdSetStatus, sceCompanionHttpdSetBody](../../../core/libs/prx/libSceCompanionHttpd/Export.cpp) (libSceCompanionHttpd) - the PS5 13.60 exports at NIDs `8pWltDG7h6A`, `w7oz0AWHpT4` and `h3OvVxzX4qM` each consist of `xor eax, eax; ret` in `libSceCompanionHttpd.sprx` (SHA-256 `BA52B40AB6B88596E4FA4B4D5A66D8E8E38B5CD43C08D3882730D7C2C565E293`); their typed declarations agree with the [public CompanionHttpd ABI](https://github.com/shadps4-emu/shadPS4/blob/860d73b7e99559106a3ffa3d3d69f0f9237e115e/src/core/libraries/companion/companion_httpd.h#L453-L455). They return zero without reading or writing their arguments. Response construction remains unsupported
- [sceCompanionHttpdGet2ndScreenStatus, sceCompanionHttpdGetUserId, sceCompanionHttpdInitialize2, sceCompanionHttpdRegisterRequestBodyReceptionCallback, sceCompanionHttpdRegisterRequestCallback2, sceCompanionHttpdUnregisterRequestBodyReceptionCallback](../../../core/libs/prx/libSceCompanionHttpd/Export.cpp) (libSceCompanionHttpd) - the rest of the library's exports, declared without parameters and without an implementation; their signatures are not verified, so every call throws
### Functional