cvs: gd /playground/gdbmp gd_bmp.c

[email protected] ("Pierre-Alain Joye") Fri, 14 Mar 2008 20:53:08 -0000
Newsgroups php.gd.cvs
Message-ID <cvspajoye1205527988@cvsserver>
pajoye		Fri Mar 14 20:53:08 2008 UTC

  Modified files:              
    /gd/playground/gdbmp	gd_bmp.c 
  Log:
  - check return value of alloc in compress_row
  - call gdCalloc instead of gdMalloc + memset (nearly no perf impact 
    but clearer)
  
  
http://cvs.php.net/viewvc.cgi/gd/playground/gdbmp/gd_bmp.c?r1=1.10&r2=1.11&diff_format=u
Index: gd/playground/gdbmp/gd_bmp.c
diff -u gd/playground/gdbmp/gd_bmp.c:1.10 gd/playground/gdbmp/gd_bmp.c:1.11
--- gd/playground/gdbmp/gd_bmp.c:1.10	Fri Mar 14 20:38:52 2008
+++ gd/playground/gdbmp/gd_bmp.c	Fri Mar 14 20:53:08 2008
@@ -12,7 +12,7 @@
 
 	----------------------------------------------------------------------------
  */
-/* $Id: gd_bmp.c,v 1.10 2008/03/14 20:38:52 pajoye Exp $ */
+/* $Id: gd_bmp.c,v 1.11 2008/03/14 20:53:08 pajoye Exp $ */
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
@@ -88,6 +88,7 @@
 	int bitmap_size = 0, info_size, total_size, padding;
 	int i, row, xpos, pixel;
 	int compression = 0;
+	int error = 0;
 	unsigned char *uncompressed_row = NULL, *uncompressed_row_start = NULL;
 
 	bitmap_size = ((im->sx * (im->trueColor ? 24 : 8)) / 8) * im->sy;
@@ -148,12 +149,11 @@
 
 		if (compression) {
 			/* Can potentially change this to X + ((X / 128) * 3) */
-			uncompressed_row = uncompressed_row_start = (unsigned char *) gdMalloc(gdImageSX(im) * 2);
+			uncompressed_row = uncompressed_row_start = (unsigned char *) gdCalloc(gdImageSX(im) * 2, sizeof(char));
 			if (!uncompressed_row) {
 				/* malloc failed */
 				return;
 			}
-			memset (uncompressed_row, 0, gdImageSX(im) * 2);
 		}
 
         for (row = (im->sy - 1); row >= 0; row--) {
@@ -177,7 +177,10 @@
 			} else {
 				int compressed_size = 0;
 				uncompressed_row = uncompressed_row_start;
-				compressed_size = compress_row(uncompressed_row, gdImageSX(im));
+				if ((compressed_size = compress_row(uncompressed_row, gdImageSX(im))) < 0) {
+					error = 1;
+					break;
+				}
 				bitmap_size += compressed_size;
 
 
@@ -190,6 +193,9 @@
 
 		if (compression && uncompressed_row) {
 			gdFree(uncompressed_row);
+			if (error != 0) {
+				return;
+			}
 			/* Update filesize based on new values and set compression flag */
 			Putchar(BMP_RLE_COMMAND, out);
 			Putchar(BMP_RLE_ENDOFBITMAP, out);
@@ -228,7 +234,12 @@
 	int compressed_length = 0;
 	int pixel = 0, compressed_run = 0, rle_compression = 0;
 	unsigned char *uncompressed_row = NULL, *uncompressed_rowp = NULL;
+
 	uncompressed_row = (unsigned char *) gdMalloc(length);
+	if (!uncompressed_row) {
+		return -1;
+	}
+	
 	memcpy(uncompressed_row, row, length);
 	uncompressed_rowp = uncompressed_row;
 
@@ -360,10 +371,10 @@
 	gdImagePtr im = NULL;
 	int error = 0;
 
-	if (!(hdr= (bmp_hdr_t *)gdMalloc(sizeof(bmp_hdr_t)))) {
+	if (!(hdr= (bmp_hdr_t *)gdCalloc(1, sizeof(bmp_hdr_t)))) {
 		return NULL;
 	}
-	memset(hdr, 0, sizeof(*hdr));
+
 	if (bmp_read_header(infile, hdr)) {
 		gdFree(hdr);
 		return NULL;
@@ -374,12 +385,11 @@
 		return NULL;
 	}
 
-	if (!(info = (bmp_info_t *)gdMalloc(sizeof(bmp_info_t)))) {
+	if (!(info = (bmp_info_t *)gdCalloc(1, sizeof(bmp_info_t)))) {
 		gdFree(hdr);
 		return NULL;
 	}
 
-	memset(info, 0, sizeof(*info));
 	if (bmp_read_info(infile, info)) {
 		gdFree(hdr);
 		gdFree(info);