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

Commit

Permalink
Fixed bug 1579 - Creating a texture with unsupported format may cause…
Browse files Browse the repository at this point in the history
… double-destruction

Alexander Hirsch 2012-08-25 20:01:29 PDT

When creating a SDL_Texture with unsupported format (I'll now refer to it as
texture A), SDL_CreateTexture will call SDL_CreateTexture again with
GetClosestSupportedFormat to set texture->native (which I will now refer to as
texture B).
This causes texture B to be put before A in renderer->textures.

If texture A is explicitly destroyed, everything is fine. Otherwise, upon
SDL_DestroyRenderer, the loop will first encounter texture B, destroy it, then
texture A, destroy that which will want to destroy texture->native and since it
is already destroyed set an error.

The solution could be as simple as swapping texture A with B after
texture->native gets set in SDL_CreateTextures.
  • Loading branch information
slouken committed Sep 28, 2012
1 parent a7ad49a commit 3b5c59e
Showing 1 changed file with 7 additions and 0 deletions.
7 changes: 7 additions & 0 deletions src/render/SDL_render.c
Expand Up @@ -393,6 +393,13 @@ SDL_CreateTexture(SDL_Renderer * renderer, Uint32 format, int access, int w, int
return NULL;
}

/* Swap textures to have texture before texture->native in the list */
texture->native->next = texture->next;
texture->prev = texture->native->prev;
texture->native->prev = texture;
texture->next = texture->native;
renderer->textures = texture;

if (SDL_ISPIXELFORMAT_FOURCC(texture->format)) {
texture->yuv = SDL_SW_CreateYUVTexture(format, w, h);
if (!texture->yuv) {
Expand Down

0 comments on commit 3b5c59e

Please sign in to comment.