Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Commit

Permalink
Fixed bug 1722 - An attempt to release NULL Direct3d surface
Browse files Browse the repository at this point in the history
Evgeny

static void
D3D_DestroyRenderer(SDL_Renderer * renderer)

has a critical problem. It may try to release IDirect3DSurface9 surface pointed
by NULL pointer. That leads to really wierd consequences on my system.

It happens when the previous call to IDirect3D9_CreateDevice() fails leaving
D3D_RenderData::defaultRenderTarget uninitialized.
  • Loading branch information
slouken committed Feb 18, 2013
1 parent 936c82b commit ac2ff24
Showing 1 changed file with 8 additions and 2 deletions.
10 changes: 8 additions & 2 deletions src/render/direct3d/SDL_render_d3d.c
Expand Up @@ -362,7 +362,10 @@ D3D_Reset(SDL_Renderer * renderer)
HRESULT result;

/* Release the default render target before reset */
IDirect3DSurface9_Release(data->defaultRenderTarget);
if (data->defaultRenderTarget) {
IDirect3DSurface9_Release(data->defaultRenderTarget);
data->defaultRenderTarget = NULL;
}

result = IDirect3DDevice9_Reset(data->device, &data->pparams);
if (FAILED(result)) {
Expand Down Expand Up @@ -1486,7 +1489,10 @@ D3D_DestroyRenderer(SDL_Renderer * renderer)

if (data) {
// Release the render target
IDirect3DSurface9_Release(data->defaultRenderTarget);
if (data->defaultRenderTarget) {
IDirect3DSurface9_Release(data->defaultRenderTarget);
data->defaultRenderTarget = NULL;
}
if (data->currentRenderTarget != NULL) {
IDirect3DSurface9_Release(data->currentRenderTarget);
data->currentRenderTarget = NULL;
Expand Down

0 comments on commit ac2ff24

Please sign in to comment.