diff --git a/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp b/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp index 93438d8029..ac359d0e1c 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp @@ -196,6 +196,10 @@ int cellPamfReaderGetPresentationStartTime(vm::ptr pSelf, vm::pt { cellPamf->Warning("cellPamfReaderGetPresentationStartTime(pSelf=0x%x, pTimeStamp_addr=0x%x)", pSelf.addr(), pTimeStamp.addr()); + if (!pSelf->pAddr) { + return CELL_PAMF_ERROR_INVALID_PAMF; + } + vm::ptr pAddr(pSelf->pAddr); const u32 upper = (u16)pAddr->start_pts_high; pTimeStamp->upper = upper; @@ -207,6 +211,10 @@ int cellPamfReaderGetPresentationEndTime(vm::ptr pSelf, vm::ptr< { cellPamf->Warning("cellPamfReaderGetPresentationEndTime(pSelf=0x%x, pTimeStamp_addr=0x%x)", pSelf.addr(), pTimeStamp.addr()); + if (!pSelf->pAddr) { + return CELL_PAMF_ERROR_INVALID_PAMF; + } + vm::ptr pAddr(pSelf->pAddr); const u32 upper = (u16)pAddr->end_pts_high; pTimeStamp->upper = upper; @@ -218,6 +226,10 @@ int cellPamfReaderGetMuxRateBound(vm::ptr pSelf) { cellPamf->Warning("cellPamfReaderGetMuxRateBound(pSelf=0x%x)", pSelf.addr()); + if (!pSelf->pAddr) { + return CELL_PAMF_ERROR_INVALID_PAMF; + } + vm::ptr pAddr(pSelf->pAddr); return pAddr->mux_rate_max; } @@ -226,6 +238,10 @@ int cellPamfReaderGetNumberOfStreams(vm::ptr pSelf) { cellPamf->Warning("cellPamfReaderGetNumberOfStreams(pSelf=0x%x)", pSelf.addr()); + if (!pSelf->pAddr) { + return CELL_PAMF_ERROR_INVALID_PAMF; + } + vm::ptr pAddr(pSelf->pAddr); return pAddr->stream_count; } @@ -233,6 +249,10 @@ int cellPamfReaderGetNumberOfStreams(vm::ptr pSelf) int cellPamfReaderGetNumberOfSpecificStreams(vm::ptr pSelf, u8 streamType) { cellPamf->Warning("cellPamfReaderGetNumberOfSpecificStreams(pSelf=0x%x, streamType=%d)", pSelf.addr(), streamType); + + if (!pSelf->pAddr) { + return CELL_PAMF_ERROR_INVALID_PAMF; + } vm::ptr pAddr(pSelf->pAddr); @@ -265,6 +285,10 @@ int cellPamfReaderSetStreamWithIndex(vm::ptr pSelf, u8 streamInd { cellPamf->Warning("cellPamfReaderSetStreamWithIndex(pSelf=0x%x, streamIndex=%d)", pSelf.addr(), streamIndex); + if (!pSelf->pAddr) { + return CELL_PAMF_ERROR_INVALID_PAMF; + } + vm::ptr pAddr(pSelf->pAddr); if (streamIndex < pAddr->stream_count) @@ -283,6 +307,10 @@ int cellPamfReaderSetStreamWithTypeAndChannel(vm::ptr pSelf, u8 { cellPamf->Warning("cellPamfReaderSetStreamWithTypeAndChannel(pSelf=0x%x, streamType=%d, ch=%d)", pSelf.addr(), streamType, ch); + if (!pSelf->pAddr) { + return CELL_PAMF_ERROR_INVALID_PAMF; + } + vm::ptr pAddr(pSelf->pAddr); if (streamType > 5) @@ -311,6 +339,10 @@ int cellPamfReaderSetStreamWithTypeAndIndex(vm::ptr pSelf, u8 st { cellPamf->Warning("cellPamfReaderSetStreamWithTypeAndIndex(pSelf=0x%x, streamType=%d, streamIndex=%d)", pSelf.addr(), streamType, streamIndex); + if (!pSelf->pAddr) { + return CELL_PAMF_ERROR_INVALID_PAMF; + } + vm::ptr pAddr(pSelf->pAddr); u32 found = 0; @@ -390,6 +422,10 @@ int cellPamfReaderGetStreamInfo(vm::ptr pSelf, u32 pInfo_addr, u { cellPamf->Warning("cellPamfReaderGetStreamInfo(pSelf=0x%x, stream=%d, pInfo_addr=0x%x, size=%d)", pSelf.addr(), pSelf->stream, pInfo_addr, size); + if (!pSelf->pAddr) { + return CELL_PAMF_ERROR_INVALID_PAMF; + } + vm::ptr pAddr(pSelf->pAddr); memset(vm::get_ptr(pInfo_addr), 0, size); @@ -497,6 +533,10 @@ int cellPamfReaderGetNumberOfEp(vm::ptr pSelf) { cellPamf->Warning("cellPamfReaderGetNumberOfEp(pSelf=0x%x, stream=%d)", pSelf.addr(), pSelf->stream); + if (!pSelf->pAddr) { + return CELL_PAMF_ERROR_INVALID_PAMF; + } + vm::ptr pAddr(pSelf->pAddr); return pAddr->stream_headers[pSelf->stream].ep_num; } @@ -505,6 +545,10 @@ int cellPamfReaderGetEpIteratorWithIndex(vm::ptr pSelf, u32 epIn { cellPamf->Todo("cellPamfReaderGetEpIteratorWithIndex(pSelf=0x%x, stream=%d, epIndex=%d, pIt_addr=0x%x)", pSelf.addr(), pSelf->stream, epIndex, pIt.addr()); + if (!pSelf->pAddr) { + return CELL_PAMF_ERROR_INVALID_PAMF; + } + vm::ptr pAddr(pSelf->pAddr); //TODO: return CELL_OK; @@ -514,6 +558,10 @@ int cellPamfReaderGetEpIteratorWithTimeStamp(vm::ptr pSelf, vm:: { cellPamf->Todo("cellPamfReaderGetEpIteratorWithTimeStamp(pSelf=0x%x, pTimeStamp_addr=0x%x, pIt_addr=0x%x)", pSelf.addr(), pTimeStamp.addr(), pIt.addr()); + if (!pSelf->pAddr) { + return CELL_PAMF_ERROR_INVALID_PAMF; + } + vm::ptr pAddr(pSelf->pAddr); //TODO: