Fixed bug 1929 - SDL_Texture* from SDL_CreateTexture() causes GL_BindTexture() to segfault
authorSam Lantinga <slouken@libsdl.org>
Tue, 25 Jun 2013 20:21:31 -0700
changeset 731846a5a6b8678e
parent 7317 37b77749523b
child 7319 8bdc5aac93d7
Fixed bug 1929 - SDL_Texture* from SDL_CreateTexture() causes GL_BindTexture() to segfault

Charles Huber

If SDL_CreateTexture() takes the !IsSupportedFormat() path it will return a SDL_Texture* with a NULL driverdata member.

If you then SDL_GL_BindTexture() this will cause a segfault in GL_BindTexture() when it unconditionally dereferences driverdata.
src/render/SDL_render.c
     1.1 --- a/src/render/SDL_render.c	Mon Jun 24 22:06:50 2013 -0700
     1.2 +++ b/src/render/SDL_render.c	Tue Jun 25 20:21:31 2013 -0700
     1.3 @@ -1739,11 +1739,13 @@
     1.4  
     1.5      CHECK_TEXTURE_MAGIC(texture, -1);
     1.6      renderer = texture->renderer;
     1.7 -    if (renderer && renderer->GL_BindTexture) {
     1.8 +    if (texture->native) {
     1.9 +        return SDL_GL_BindTexture(texture->native, texw, texh);
    1.10 +    } else if (renderer && renderer->GL_BindTexture) {
    1.11          return renderer->GL_BindTexture(renderer, texture, texw, texh);
    1.12 +    } else {
    1.13 +        return SDL_Unsupported();
    1.14      }
    1.15 -
    1.16 -    return SDL_Unsupported();
    1.17  }
    1.18  
    1.19  int SDL_GL_UnbindTexture(SDL_Texture *texture)