tony2001 Mon Feb 12 20:27:48 2007 UTC Modified files: /php-src/ext/standard iptc.c Log: fix bug #40109 (iptcembed fails on non-jfif jpegs) + use safe_emalloc http://cvs.php.net/viewvc.cgi/php-src/ext/standard/iptc.c?r1=1.59&r2=1.60&diff_format=u Index: php-src/ext/standard/iptc.c diff -u php-src/ext/standard/iptc.c:1.59 php-src/ext/standard/iptc.c:1.60 --- php-src/ext/standard/iptc.c:1.59 Mon Jan 1 09:29:32 2007 +++ php-src/ext/standard/iptc.c Mon Feb 12 20:27:48 2007 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: iptc.c,v 1.59 2007/01/01 09:29:32 sebastian Exp $ */ +/* $Id: iptc.c,v 1.60 2007/02/12 20:27:48 tony2001 Exp $ */ /* * Functions to parse & compse IPTC data. @@ -186,6 +186,7 @@ unsigned int spool = 0, done = 0, inx; unsigned char *spoolbuf=0, *poi=0; struct stat sb; + zend_bool written = 0; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "SZ|l", &iptcdata, &iptcdata_len, &pp_jpeg_file, &spool) == FAILURE || php_stream_path_param_encode(pp_jpeg_file, &jpeg_file, &jpeg_file_len, REPORT_ERRORS, FG(default_context)) == FAILURE) { @@ -204,7 +205,8 @@ if (spool < 2) { fstat(fileno(fp), &sb); - poi = spoolbuf = emalloc(iptcdata_len + sizeof(psheader) + sb.st_size + 1024); + poi = spoolbuf = safe_emalloc(1, iptcdata_len + sizeof(psheader) + sb.st_size + 1024, 1); + memset(poi, 0, iptcdata_len + sizeof(psheader) + sb.st_size + 1024 + 1); } if (php_iptc_get1(fp, spool, poi?&poi:0 TSRMLS_CC) != 0xFF) { @@ -242,6 +244,14 @@ case M_APP0: /* APP0 is in each and every JPEG, so when we hit APP0 we insert our new APP13! */ + case M_APP1: + /* APP1 is present in JFIF */ + if (written) { + /* don't try to write the data twice */ + break; + } + written = 1; + php_iptc_skip_variable(fp, spool, poi?&poi:0 TSRMLS_CC); if (iptcdata_len & 1) iptcdata_len++; /* make the length even */
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php