Fix use-after-free between C3Di_RenderTargetDestroy and C3D_RenderTargetSetOutput

This commit is contained in:
Adrian Siekierka 2020-09-26 11:31:18 +02:00
parent 4e02e27222
commit 2f39fe787a

View File

@ -339,10 +339,17 @@ C3D_RenderTarget* C3D_RenderTargetCreateFromTex(C3D_Tex* tex, GPU_TEXFACE face,
void C3Di_RenderTargetDestroy(C3D_RenderTarget* target)
{
int i;
if (target->ownsColor)
vramFree(target->frameBuf.colorBuf);
if (target->ownsDepth)
vramFree(target->frameBuf.depthBuf);
for (i = 0; i < 3; i ++)
{
if (linkedTarget[i] == target)
linkedTarget[i] = NULL;
}
C3D_RenderTarget** prevNext = target->prev ? &target->prev->next : &firstTarget;
C3D_RenderTarget** nextPrev = target->next ? &target->next->prev : &lastTarget;