Merge pull request #15321 from MarcZX10/r4/r50-ajm-bodies

fix(libSceAjm): check batch job buffer counts before the 8-bit cast
This commit is contained in:
Dean authored and GitHub committed 2026-11-04 08:13:04 +13:00
commit 6d22701a29
2 files changed
+15

No files matched your search

@@ -2064,6 +2064,7 @@ int APS5_VABI sceAjmBatchJobControl(AjmBatchInfo* info, uint32_t instance, uint6
}
int APS5_VABI sceAjmBatchJobRunSplit(AjmBatchInfo* info, uint32_t instance, uint64_t flags, const AjmBuffer* input_buffers, size_t input_buffers_num, const AjmBuffer* output_buffers, size_t output_buffers_num, void* sideband_output, size_t sideband_output_size) {
if (input_buffers_num > 0xffu || output_buffers_num > 0xffu) return SCE_AJM_ERROR_INVALID_PARAMETER;
auto header = MakeHeader(JobKind::Run, instance, sideband_output, sideband_output_size);
header.flags = flags;
header.inputCount = static_cast<std::uint32_t>(input_buffers_num);
+14
View File
@@ -931,6 +931,19 @@ void TestBatchBounds(std::uint32_t context) {
#endif
}
void TestBatchJobCountRange(std::uint32_t context) {
(void)context;
constexpr int invalidParameter = static_cast<int>(0x80930005);
std::vector<std::uint8_t> storage(256);
AjmBatchInfo info{};
Require(sceAjmBatchInitialize(storage.data(), storage.size(), &info) == 0);
const AjmBuffer buffer{storage.data(), 16};
const std::size_t wrapped = (std::size_t{1} << 32) + 1;
Require(sceAjmBatchJobRunSplit(&info, 0, 0, &buffer, wrapped, &buffer, 1, nullptr, 0) == invalidParameter);
Require(sceAjmBatchJobRunSplit(&info, 0, 0, &buffer, 1, &buffer, wrapped, nullptr, 0) == invalidParameter);
Require(info.offset == 0);
}
void TestBatchWaitRelease(std::uint32_t context) {
constexpr int invalidBatch = static_cast<int>(0x80930004);
std::vector<std::uint8_t> batch(64);
@@ -2606,6 +2619,7 @@ int main(int argc, char** argv) {
TestGetInfo(context);
TestGetStatistics(context);
TestBatchBounds(context);
TestBatchJobCountRange(context);
TestBatchWaitRelease(context);
TestInstanceHandleLifetime(context);
TestBatchCancel(context);