helly Thu Feb 24 15:54:12 2005 EDT
Modified files: (Branch: PHP_5_0)
/php-src/ext/standard image.c
Log:
- MFH
http://cvs.php.net/diff.php/php-src/ext/standard/image.c?r1=1.98.2.3&r2=1.98.2.4&ty=u
Index: php-src/ext/standard/image.c
diff -u php-src/ext/standard/image.c:1.98.2.3
php-src/ext/standard/image.c:1.98.2.4
--- php-src/ext/standard/image.c:1.98.2.3 Mon Oct 4 16:43:21 2004
+++ php-src/ext/standard/image.c Thu Feb 24 15:54:12 2005
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: image.c,v 1.98.2.3 2004/10/04 20:43:21 iliaa Exp $ */
+/* $Id: image.c,v 1.98.2.4 2005/02/24 20:54:12 helly Exp $ */
#include "php.h"
#include <stdio.h>
@@ -631,14 +631,25 @@
result->height = php_read4(stream TSRMLS_CC); /* Xsiz */
result->width = php_read4(stream TSRMLS_CC); /* Ysiz */
+#if MBO_0
dummy_int = php_read4(stream TSRMLS_CC); /* XOsiz */
dummy_int = php_read4(stream TSRMLS_CC); /* YOsiz */
dummy_int = php_read4(stream TSRMLS_CC); /* XTsiz */
dummy_int = php_read4(stream TSRMLS_CC); /* YTsiz */
dummy_int = php_read4(stream TSRMLS_CC); /* XTOsiz */
dummy_int = php_read4(stream TSRMLS_CC); /* YTOsiz */
+#else
+ if (php_stream_seek(stream, 24, SEEK_CUR)) {
+ efree(result);
+ return NULL;
+ }
+#endif
result->channels = php_read2(stream TSRMLS_CC); /* Csiz */
+ if (result->channels < 0 || result->channels > 256) {
+ efree(result);
+ return NULL;
+ }
/* Collect bit depth info */
highest_bit_depth = bit_depth = 0;
@@ -701,7 +712,9 @@
}
/* Skip over LBox (Which includes both TBox and LBox itself */
- php_stream_seek(stream, box_length - 8, SEEK_CUR);
+ if (php_stream_seek(stream, box_length - 8, SEEK_CUR)) {
+ break;
+ }
}
if (result == NULL) {
@@ -864,43 +877,49 @@
*/
static struct gfxinfo *php_handle_iff(php_stream * stream TSRMLS_DC)
{
- struct gfxinfo *result = NULL;
+ struct gfxinfo * result;
unsigned char a[10];
int chunkId;
int size;
+ short width, height, bits;
- if (php_stream_read(stream, a, 8) != 8)
+ if (php_stream_read(stream, a, 8) != 8) {
return NULL;
- if (strncmp(a+4, "ILBM", 4) && strncmp(a+4, "PBM ", 4))
+ }
+ if (strncmp(a+4, "ILBM", 4) && strncmp(a+4, "PBM ", 4)) {
return NULL;
-
- result = (struct gfxinfo *) ecalloc(1, sizeof(struct gfxinfo));
+ }
/* loop chunks to find BMHD chunk */
do {
if (php_stream_read(stream, a, 8) != 8) {
- efree(result);
return NULL;
}
chunkId = php_ifd_get32s(a+0, 1);
size = php_ifd_get32s(a+4, 1);
+ if (size < 0) {
+ return NULL;
+ }
if ((size & 1) == 1) {
size++;
}
if (chunkId == 0x424d4844) { /* BMHD chunk */
- if (php_stream_read(stream, a, 9) != 9) {
- efree(result);
+ if (size < 9 || php_stream_read(stream, a, 9) != 9) {
return NULL;
}
- result->width = php_ifd_get16s(a+0, 1);
- result->height = php_ifd_get16s(a+2, 1);
- result->bits = a[8] & 0xff;
- result->channels = 0;
- if (result->width > 0 && result->height > 0 &&
result->bits > 0 && result->bits < 33)
+ width = php_ifd_get16s(a+0, 1);
+ height = php_ifd_get16s(a+2, 1);
+ bits = a[8] & 0xff;
+ if (width > 0 && height > 0 && bits > 0 && bits < 33) {
+ result = (struct gfxinfo *) ecalloc(1,
sizeof(struct gfxinfo));
+ result->width = width;
+ result->height = height;
+ result->bits = bits;
+ result->channels = 0;
return result;
+ }
} else {
if (php_stream_seek(stream, size, SEEK_CUR)) {
- efree(result);
return NULL;
}
}
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php