From 88a011ec8efba5634a827988272dcb67bb639cfa Mon Sep 17 00:00:00 2001 From: Weiyi Wang Date: Sun, 10 Mar 2019 11:02:56 -0400 Subject: [PATCH] GetTextureSurface: return on invalid physical address early Previously this check is in GetSurface (if (addr == 0)). This worked fine because GetTextureSurface directly forwarded the address value to GetSurface. However, now with mipmap support, GetTextureSurface would call GetSurface several times with different address offset, resulting some >0 but still invalid address in case the input is 0. We should error out early on invalid address instead of sending it furthor down which would cause invalid memory access --- src/video_core/renderer_opengl/gl_rasterizer_cache.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp index 66fbf2322..13e318e04 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp @@ -1332,6 +1332,10 @@ Surface RasterizerCacheOpenGL::GetTextureSurface( Surface RasterizerCacheOpenGL::GetTextureSurface(const Pica::Texture::TextureInfo& info, u32 max_level) { + if (info.physical_address == 0) { + return nullptr; + } + SurfaceParams params; params.addr = info.physical_address; params.width = info.width;