From c8e2b9cb99d71fb0123f72c1d6c1a21de6fceb51 Mon Sep 17 00:00:00 2001 From: Megamouse Date: Tue, 11 Jun 2024 02:42:04 +0200 Subject: [PATCH] sceNp: add some more array pointer checks --- rpcs3/Emu/Cell/Modules/sceNp.cpp | 13 ++++++++----- rpcs3/Emu/Cell/Modules/sceNp2.cpp | 9 ++++++--- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/rpcs3/Emu/Cell/Modules/sceNp.cpp b/rpcs3/Emu/Cell/Modules/sceNp.cpp index 32fe68c633..f09c970e76 100644 --- a/rpcs3/Emu/Cell/Modules/sceNp.cpp +++ b/rpcs3/Emu/Cell/Modules/sceNp.cpp @@ -1169,8 +1169,8 @@ error_code sceNpBasicSendMessageGui(ppu_thread& ppu, vm::cptrmsgId, msg->mainType, msg->subType, msg->msgFeatures, msg->count); - for (u32 i = 0; i < msg->count; i++) + sceNp.notice("sceNpBasicSendMessageGui: msgId: %d, mainType: %d, subType: %d, msgFeatures: %d, count: %d, npids: *0x%x", msg->msgId, msg->mainType, msg->subType, msg->msgFeatures, msg->count, msg->npids); + for (u32 i = 0; i < msg->count && msg->npids; i++) { sceNp.trace("sceNpBasicSendMessageGui: NpId[%d] = %s", i, static_cast(&msg->npids[i].handle.data[0])); } @@ -1338,9 +1338,12 @@ error_code sceNpBasicSendMessageGui(ppu_thread& ppu, vm::cptrmsgFeatures}; std::set npids; - for (u32 i = 0; i < msg->count; i++) + if (msg->npids) { - npids.insert(std::string(msg->npids[i].handle.data)); + for (u32 i = 0; i < msg->count; i++) + { + npids.insert(std::string(msg->npids[i].handle.data)); + } } if (msg->subject) @@ -2967,7 +2970,7 @@ error_code sceNpCustomMenuRegisterActions(vm::cptr menu, vm::pt for (u32 i = 0; i < menu->numActions; i++) { - if (!menu->actions[i].name) + if (!menu->actions || !menu->actions[i].name) { return SCE_NP_CUSTOM_MENU_ERROR_INVALID_ARGUMENT; } diff --git a/rpcs3/Emu/Cell/Modules/sceNp2.cpp b/rpcs3/Emu/Cell/Modules/sceNp2.cpp index ca18b1e0cd..d9d7d74ebe 100644 --- a/rpcs3/Emu/Cell/Modules/sceNp2.cpp +++ b/rpcs3/Emu/Cell/Modules/sceNp2.cpp @@ -975,9 +975,12 @@ error_code sceNpMatching2GetRoomMemberIdListLocal(SceNpMatching2ContextId ctxId, u32 num_members = std::min(memberIdNum, static_cast(vec_memberids.size())); - for (u32 i = 0; i < num_members; i++) + if (memberId) { - memberId[i] = vec_memberids[i]; + for (u32 i = 0; i < num_members; i++) + { + memberId[i] = vec_memberids[i]; + } } return not_an_error(num_members); @@ -1035,7 +1038,7 @@ error_code sceNpMatching2GetRoomMemberDataInternalLocal(SceNpMatching2ContextId std::vector binattrs_list; for (u32 i = 0; i < attrIdNum; i++) { - if (attrId[i] < SCE_NP_MATCHING2_ROOMMEMBER_BIN_ATTR_INTERNAL_1_ID || attrId[i] >= SCE_NP_MATCHING2_USER_BIN_ATTR_1_ID) + if (!attrId || attrId[i] < SCE_NP_MATCHING2_ROOMMEMBER_BIN_ATTR_INTERNAL_1_ID || attrId[i] >= SCE_NP_MATCHING2_USER_BIN_ATTR_1_ID) { return SCE_NP_MATCHING2_ERROR_INVALID_ATTRIBUTE_ID; }