diff --git a/src/render/SDL_render.c b/src/render/SDL_render.c index 7d26f864b..3ab0fd5df 100644 --- a/src/render/SDL_render.c +++ b/src/render/SDL_render.c @@ -404,6 +404,10 @@ SDL_CreateTexture(SDL_Renderer * renderer, Uint32 format, int access, int w, int if (!format) { format = renderer->info.texture_formats[0]; } + if (SDL_BYTESPERPIXEL(format) == 0) { + SDL_SetError("Invalid texture format"); + return NULL; + } if (SDL_ISPIXELFORMAT_INDEXED(format)) { SDL_SetError("Palettized textures are not supported"); return NULL; diff --git a/src/render/opengl/SDL_render_gl.c b/src/render/opengl/SDL_render_gl.c index 8a0e377b3..696226732 100644 --- a/src/render/opengl/SDL_render_gl.c +++ b/src/render/opengl/SDL_render_gl.c @@ -24,6 +24,7 @@ #include "SDL_hints.h" #include "SDL_log.h" +#include "SDL_assert.h" #include "SDL_opengl.h" #include "../SDL_sysrender.h" #include "SDL_shaders_gl.h" @@ -798,14 +799,16 @@ GL_UpdateTexture(SDL_Renderer * renderer, SDL_Texture * texture, { GL_RenderData *renderdata = (GL_RenderData *) renderer->driverdata; GL_TextureData *data = (GL_TextureData *) texture->driverdata; + const int texturebpp = SDL_BYTESPERPIXEL(texture->format); + + SDL_assert(texturebpp != 0); /* otherwise, division by zero later. */ GL_ActivateRenderer(renderer); renderdata->glEnable(data->type); renderdata->glBindTexture(data->type, data->texture); renderdata->glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - renderdata->glPixelStorei(GL_UNPACK_ROW_LENGTH, - (pitch / SDL_BYTESPERPIXEL(texture->format))); + renderdata->glPixelStorei(GL_UNPACK_ROW_LENGTH, (pitch / texturebpp)); renderdata->glTexSubImage2D(data->type, 0, rect->x, rect->y, rect->w, rect->h, data->format, data->formattype, pixels);