From 8b4f80c562926a7bf079c1df72a7c26fecee19c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Sun, 28 Jan 2024 22:58:20 +0100 Subject: [PATCH] GPUCommonHW: Check range of indexes for indexed draws. --- GPU/GPUCommonHW.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/GPU/GPUCommonHW.cpp b/GPU/GPUCommonHW.cpp index 2e20702f6b..a3c1a8a02d 100644 --- a/GPU/GPUCommonHW.cpp +++ b/GPU/GPUCommonHW.cpp @@ -973,8 +973,9 @@ void GPUCommonHW::Execute_Prim(u32 op, u32 diff) { u32 vertexType = gstate.vertType; if ((vertexType & GE_VTYPE_IDX_MASK) != GE_VTYPE_IDX_NONE) { u32 indexAddr = gstate_c.indexAddr; - if (!Memory::IsValidAddress(indexAddr)) { - ERROR_LOG(G3D, "Bad index address %08x!", indexAddr); + u32 indexSize = (vertexType & GE_VTYPE_IDX_MASK) >> GE_VTYPE_IDX_SHIFT; + if (!Memory::IsValidRange(indexAddr, count * indexSize)) { + ERROR_LOG(G3D, "Bad index address %08x (%d)!", indexAddr, count); return; } inds = Memory::GetPointerUnchecked(indexAddr);