Fixed potential overflow in surface allocation (thanks Yves!)

This commit is contained in:
Sam Lantinga 2017-10-06 16:17:50 -07:00
parent 312da2623a
commit d9e1036e0f
1 changed files with 9 additions and 1 deletions

View File

@ -80,7 +80,15 @@ SDL_CreateRGBSurfaceWithFormat(Uint32 flags, int width, int height, int depth,
/* Get the pixels */ /* Get the pixels */
if (surface->w && surface->h) { if (surface->w && surface->h) {
surface->pixels = SDL_malloc(surface->h * surface->pitch); int size = (surface->h * surface->pitch);
if (size < 0 || (size / surface->pitch) != surface->h) {
/* Overflow... */
SDL_FreeSurface(surface);
SDL_OutOfMemory();
return NULL;
}
surface->pixels = SDL_malloc(size);
if (!surface->pixels) { if (!surface->pixels) {
SDL_FreeSurface(surface); SDL_FreeSurface(surface);
SDL_OutOfMemory(); SDL_OutOfMemory();