Date: Sat, 10 Jul 2004 21:02:33 +0200
authorSam Lantinga <slouken@libsdl.org>
Sat, 21 Aug 2004 05:29:45 +0000
changeset 940 bb1588ebe47b
parent 939 c7c04f811994
child 941 5095c4a264aa
Date: Sat, 10 Jul 2004 21:02:33 +0200 From: "Philippe Plantier (ayin)" Subject: [SDL] Problems allocating large surfaces There are problems when allocating large surfaces using SDL_CreateRGBSurface. When, for example, we try to allocate a surface wider than 16384 pixels, the calculation of the pitch overflows; this leads to a surface that has the w and h flags correctly set, but whose "pixels" buffer is too small. That may lead to heap corruption.
src/video/SDL_surface.c
--- a/src/video/SDL_surface.c	Sat Aug 21 04:20:00 2004 +0000
+++ b/src/video/SDL_surface.c	Sat Aug 21 05:29:45 2004 +0000
@@ -52,6 +52,13 @@
 	SDL_Surface *screen;
 	SDL_Surface *surface;
 
+	/* Make sure the size requested doesn't overflow our datatypes */
+	/* Next time I write a library like SDL, I'll use int for size. :) */
+	if ( width > 16384 || height > 16384 ) {
+		SDL_SetError("Width or height is too large");
+		return(NULL);
+	}
+
 	/* Check to see if we desire the surface in video memory */
 	if ( video ) {
 		screen = SDL_PublicSurface;