sceNp: add some more array pointer checks

This commit is contained in:
Megamouse 2024-06-11 02:42:04 +02:00
parent be863e763f
commit c8e2b9cb99
2 changed files with 14 additions and 8 deletions

View File

@ -1169,8 +1169,8 @@ error_code sceNpBasicSendMessageGui(ppu_thread& ppu, vm::cptr<SceNpBasicMessageD
if (msg)
{
sceNp.notice("sceNpBasicSendMessageGui: msgId: %d, mainType: %d, subType: %d, msgFeatures: %d, count: %d", msg->msgId, 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<char*>(&msg->npids[i].handle.data[0]));
}
@ -1338,9 +1338,12 @@ error_code sceNpBasicSendMessageGui(ppu_thread& ppu, vm::cptr<SceNpBasicMessageD
.msgFeatures = msg->msgFeatures};
std::set<std::string> 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<SceNpCustomMenu> 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;
}

View File

@ -975,9 +975,12 @@ error_code sceNpMatching2GetRoomMemberIdListLocal(SceNpMatching2ContextId ctxId,
u32 num_members = std::min(memberIdNum, static_cast<u32>(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<SceNpMatching2AttributeId> 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;
}