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);