[PHP-CVS] cvs: php-src(PHP_5_3) /ext/phar phar.phar phar_object.c
cellog Sun Aug 31 06:31:53 2008 UTC Modified files: (Branch: PHP_5_3) /php-src/ext/phar phar.phar phar_object.c Log: remove unused variables, merge from pecl/phar http://cvs.php.net/viewvc.cgi/php-src/ext/phar/phar.phar?r1=1.7.2.37r2=1.7.2.38diff_format=u Index: php-src/ext/phar/phar.phar diff -u php-src/ext/phar/phar.phar:1.7.2.37 php-src/ext/phar/phar.phar:1.7.2.38 --- php-src/ext/phar/phar.phar:1.7.2.37 Sun Aug 31 06:28:01 2008 +++ php-src/ext/phar/phar.phar Sun Aug 31 06:31:53 2008 @@ -1171,8 +1171,8 @@ new PharCommand($argc, $argv); __HALT_COMPILER(); ? -6-+6+ ¶Â²Øä±÷¡JÉþs±æêÔ*,8W?°!~ýë¸ Y åBós.coîd!¨`w¡óLæȹBÀí.å[aäÙs\í¹ gß× óbnáN@@ -1229,4 +1229,4 @@ ùUNøÖ[EMAIL PROTECTED][EMAIL PROTECTED] ¬ËaYº[Ãâ¬mòvOëý]¸¹)×soS jßZæ/]ûôÞv¿Ç½T%æ:ýÚ)cÚv]¶Ebô«ÐÓ*Çê=KÕO)ò)«Ë-Ô]µLí·¡7µ¾Í¨.î zÿ.jß?8Tù®,:«Äa·éï¤Á»hg ±µÉH¨#[T5$ÜßÞ¶LÐâ¯z4ʼè)ÿLuÒñxï;ñ©Æø³;TMe,¯¿{}4b,[EMAIL PROTECTED] íÑèµïtúÎþ®øÚ÷Eí»ú¡ÃÏàÇGxîÓ᧾óãæ]¢Õ~fI|øðP j7l1ØÛPHüéÅiGH¬5´¯$ß/rªýëÐ~Ñúgìªz²¢ÎÛ¦puùäûù;â9³ä¯;[EMAIL PROTECTED] -Pàø3C°\ No newline at end of file +Pàø3C°\ No newline at end of file http://cvs.php.net/viewvc.cgi/php-src/ext/phar/phar_object.c?r1=1.266.2.40r2=1.266.2.41diff_format=u Index: php-src/ext/phar/phar_object.c diff -u php-src/ext/phar/phar_object.c:1.266.2.40 php-src/ext/phar/phar_object.c:1.266.2.41 --- php-src/ext/phar/phar_object.c:1.266.2.40 Sun Aug 31 06:26:19 2008 +++ php-src/ext/phar/phar_object.c Sun Aug 31 06:31:53 2008 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: phar_object.c,v 1.266.2.40 2008/08/31 06:26:19 cellog Exp $ */ +/* $Id: phar_object.c,v 1.266.2.41 2008/08/31 06:31:53 cellog Exp $ */ #include phar_internal.h #include func_interceptors.h @@ -1393,7 +1393,7 @@ { zval **value; zend_uchar key_type; - zend_bool is_splfileinfo = 0, close_fp = 1; + zend_bool close_fp = 1; ulong int_key; struct _phar_t *p_obj = (struct _phar_t*) puser; uint str_key_len, base_len = p_obj-l, fname_len; @@ -1505,7 +1505,6 @@ } save = fname; - is_splfileinfo = 1; goto phar_spl_fileinfo; case SPL_FS_INFO: case SPL_FS_FILE: @@ -1516,7 +1515,6 @@ #endif fname_len = strlen(fname); save = fname; - is_splfileinfo = 1; goto phar_spl_fileinfo; } } -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src(PHP_5_3) /ext/phar phar.phar phar_object.c
cellog Sun Aug 31 06:38:10 2008 UTC Modified files: (Branch: PHP_5_3) /php-src/ext/phar phar.phar phar_object.c Log: merge minor optimization removing strlen from pecl/phar http://cvs.php.net/viewvc.cgi/php-src/ext/phar/phar.phar?r1=1.7.2.38r2=1.7.2.39diff_format=u Index: php-src/ext/phar/phar.phar diff -u php-src/ext/phar/phar.phar:1.7.2.38 php-src/ext/phar/phar.phar:1.7.2.39 --- php-src/ext/phar/phar.phar:1.7.2.38 Sun Aug 31 06:31:53 2008 +++ php-src/ext/phar/phar.phar Sun Aug 31 06:38:09 2008 @@ -1171,8 +1171,8 @@ new PharCommand($argc, $argv); __HALT_COMPILER(); ? -6-+6+ ¶Â²Øä±÷¡JÉþs±æêÔ*,8W?°!~ýë¸ Y åBós.coîd!¨`w¡óLæȹBÀí.å[aäÙs\í¹ gß× óbnáN@@ -1229,4 +1229,4 @@ ùUNøÖ[EMAIL PROTECTED][EMAIL PROTECTED] ¬ËaYº[Ãâ¬mòvOëý]¸¹)×soS jßZæ/]ûôÞv¿Ç½T%æ:ýÚ)cÚv]¶Ebô«ÐÓ*Çê=KÕO)ò)«Ë-Ô]µLí·¡7µ¾Í¨.î zÿ.jß?8Tù®,:«Äa·éï¤Á»hg ±µÉH¨#[T5$ÜßÞ¶LÐâ¯z4ʼè)ÿLuÒñxï;ñ©Æø³;TMe,¯¿{}4b,[EMAIL PROTECTED] íÑèµïtúÎþ®øÚ÷Eí»ú¡ÃÏàÇGxîÓ᧾óãæ]¢Õ~fI|øðP j7l1ØÛPHüéÅiGH¬5´¯$ß/rªýëÐ~Ñúgìªz²¢ÎÛ¦puùäûù;â9³ä¯;[EMAIL PROTECTED] -Pàø3C°\ No newline at end of file +Pàø3C°\ No newline at end of file http://cvs.php.net/viewvc.cgi/php-src/ext/phar/phar_object.c?r1=1.266.2.41r2=1.266.2.42diff_format=u Index: php-src/ext/phar/phar_object.c diff -u php-src/ext/phar/phar_object.c:1.266.2.41 php-src/ext/phar/phar_object.c:1.266.2.42 --- php-src/ext/phar/phar_object.c:1.266.2.41 Sun Aug 31 06:31:53 2008 +++ php-src/ext/phar/phar_object.c Sun Aug 31 06:38:09 2008 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: phar_object.c,v 1.266.2.41 2008/08/31 06:31:53 cellog Exp $ */ +/* $Id: phar_object.c,v 1.266.2.42 2008/08/31 06:38:09 cellog Exp $ */ #include phar_internal.h #include func_interceptors.h @@ -1984,6 +1984,7 @@ char *error; const char *pcr_error; int ext_len = ext ? strlen(ext) : 0; + int oldname_len; phar_archive_data **pphar = NULL; if (!ext) { @@ -2049,12 +2050,13 @@ oldpath = estrndup(phar-fname, phar-fname_len); oldname = zend_memrchr(phar-fname, '/', phar-fname_len); ++oldname; + oldname_len = strlen(oldname); - basename = estrndup(oldname, strlen(oldname)); + basename = estrndup(oldname, oldname_len); spprintf(newname, 0, %s.%s, strtok(basename, .), ext); efree(basename); - basepath = estrndup(oldpath, strlen(oldpath) - strlen(oldname)); + basepath = estrndup(oldpath, (strlen(oldpath) - oldname_len)); phar-fname_len = spprintf(newpath, 0, %s%s, basepath, newname); phar-fname = newpath; phar-ext = newpath + phar-fname_len - strlen(ext) - 1; -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src(PHP_5_3) /ext/phar phar.phar phar_object.c
cellog Sun Aug 31 06:58:05 2008 UTC Modified files: (Branch: PHP_5_3) /php-src/ext/phar phar.phar phar_object.c Log: fix compile warning in PHP 6.0 http://cvs.php.net/viewvc.cgi/php-src/ext/phar/phar.phar?r1=1.7.2.41r2=1.7.2.42diff_format=u Index: php-src/ext/phar/phar.phar diff -u php-src/ext/phar/phar.phar:1.7.2.41 php-src/ext/phar/phar.phar:1.7.2.42 --- php-src/ext/phar/phar.phar:1.7.2.41 Sun Aug 31 06:51:49 2008 +++ php-src/ext/phar/phar.phar Sun Aug 31 06:58:04 2008 @@ -1171,8 +1171,8 @@ new PharCommand($argc, $argv); __HALT_COMPILER(); ? -6-+6+ ¶Â²Øä±÷¡JÉþs±æêÔ*,8W?°!~ýë¸ Y åBós.coîd!¨`w¡óLæȹBÀí.å[aäÙs\í¹ gß× óbnáN@@ -1229,4 +1229,4 @@ ùUNøÖ[EMAIL PROTECTED][EMAIL PROTECTED] ¬ËaYº[Ãâ¬mòvOëý]¸¹)×soS jßZæ/]ûôÞv¿Ç½T%æ:ýÚ)cÚv]¶Ebô«ÐÓ*Çê=KÕO)ò)«Ë-Ô]µLí·¡7µ¾Í¨.î zÿ.jß?8Tù®,:«Äa·éï¤Á»hg ±µÉH¨#[T5$ÜßÞ¶LÐâ¯z4ʼè)ÿLuÒñxï;ñ©Æø³;TMe,¯¿{}4b,[EMAIL PROTECTED] íÑèµïtúÎþ®øÚ÷Eí»ú¡ÃÏàÇGxîÓ᧾óãæ]¢Õ~fI|øðP j7l1ØÛPHüéÅiGH¬5´¯$ß/rªýëÐ~Ñúgìªz²¢ÎÛ¦puùäûù;â9³ä¯;[EMAIL PROTECTED] -Pàø3C°\ No newline at end of file +Pàø3C°\ No newline at end of file http://cvs.php.net/viewvc.cgi/php-src/ext/phar/phar_object.c?r1=1.266.2.43r2=1.266.2.44diff_format=u Index: php-src/ext/phar/phar_object.c diff -u php-src/ext/phar/phar_object.c:1.266.2.43 php-src/ext/phar/phar_object.c:1.266.2.44 --- php-src/ext/phar/phar_object.c:1.266.2.43 Sun Aug 31 06:42:46 2008 +++ php-src/ext/phar/phar_object.c Sun Aug 31 06:58:04 2008 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: phar_object.c,v 1.266.2.43 2008/08/31 06:42:46 cellog Exp $ */ +/* $Id: phar_object.c,v 1.266.2.44 2008/08/31 06:58:04 cellog Exp $ */ #include phar_internal.h #include func_interceptors.h @@ -1448,7 +1448,12 @@ } if (key_type 9) { /* IS_UNICODE == 10 */ +#if PHP_VERSION_ID 6 +/* this can never happen, but fixes a compile warning */ + spprintf(str_key, 0, %s, key); +#else spprintf(str_key, 0, %v, key); +#endif } else { PHAR_STR(key, str_key); } @@ -1575,7 +1580,12 @@ } if (key_type 9) { /* IS_UNICODE == 10 */ +#if PHP_VERSION_ID 6 +/* this can never happen, but fixes a compile warning */ + spprintf(str_key, 0, %s, key); +#else spprintf(str_key, 0, %v, key); +#endif } else { PHAR_STR(key, str_key); } -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src(PHP_5_3) /ext/phar phar.phar phar_object.c /ext/phar/tests phar_buildfromdirectory4.phpt
cellog Mon Jun 23 04:00:23 2008 UTC Modified files: (Branch: PHP_5_3) /php-src/ext/phar phar.phar phar_object.c /php-src/ext/phar/tests phar_buildfromdirectory4.phpt Log: true fix for potential segfault in phar_build http://cvs.php.net/viewvc.cgi/php-src/ext/phar/phar.phar?r1=1.7.2.25r2=1.7.2.26diff_format=u Index: php-src/ext/phar/phar.phar http://cvs.php.net/viewvc.cgi/php-src/ext/phar/phar_object.c?r1=1.266.2.30r2=1.266.2.31diff_format=u Index: php-src/ext/phar/phar_object.c diff -u php-src/ext/phar/phar_object.c:1.266.2.30 php-src/ext/phar/phar_object.c:1.266.2.31 --- php-src/ext/phar/phar_object.c:1.266.2.30 Sun Jun 22 16:35:26 2008 +++ php-src/ext/phar/phar_object.c Mon Jun 23 04:00:22 2008 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: phar_object.c,v 1.266.2.30 2008/06/22 16:35:26 sfox Exp $ */ +/* $Id: phar_object.c,v 1.266.2.31 2008/06/23 04:00:22 cellog Exp $ */ #include phar_internal.h #include func_interceptors.h @@ -1614,7 +1614,16 @@ if (error) { efree(error); } - contents_len = php_stream_copy_to_stream(fp, data-fp, PHP_STREAM_COPY_ALL); + /* convert to PHAR_UFP */ + if (data-internal_file-fp_type == PHAR_MOD) { + php_stream_close(data-internal_file-fp); + } + data-internal_file-fp = NULL; + data-internal_file-fp_type = PHAR_UFP; + data-internal_file-offset_abs = data-internal_file-offset = php_stream_tell(p_obj-fp); + contents_len = php_stream_copy_to_stream(fp, p_obj-fp, PHP_STREAM_COPY_ALL); + data-internal_file-uncompressed_filesize = data-internal_file-compressed_filesize = + php_stream_tell(p_obj-fp) - data-internal_file-offset; } if (close_fp) { php_stream_close(fp); @@ -1632,15 +1641,6 @@ data-internal_file-compressed_filesize = data-internal_file-uncompressed_filesize = contents_len; phar_entry_delref(data TSRMLS_CC); - if (++p_obj-count p_obj-count % 900) { - /* every 900 files, flush so we remove open temp file handles, fixes Bug #45218 */ - phar_flush(p_obj-p-arc.archive, 0, 0, 0, error TSRMLS_CC); - if (error) { - zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, error); - efree(error); - return ZEND_HASH_APPLY_STOP; - } - } return ZEND_HASH_APPLY_KEEP; } /* }}} */ @@ -1694,6 +1694,7 @@ if (SUCCESS != object_init_ex(iteriter, spl_ce_RecursiveIteratorIterator)) { zval_ptr_dtor(iter); + zval_ptr_dtor(iteriter); zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC, Unable to instantiate directory iterator for %s, phar_obj-arc.archive-fname); RETURN_FALSE; } @@ -1714,6 +1715,7 @@ MAKE_STD_ZVAL(regexiter); if (SUCCESS != object_init_ex(regexiter, spl_ce_RegexIterator)) { + zval_ptr_dtor(iteriter); zval_dtor(regexiter); zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC, Unable to instantiate regex iterator for %s, phar_obj-arc.archive-fname); RETURN_FALSE; @@ -1748,6 +1750,7 @@ efree(error); } } else { + zval_ptr_dtor(iteriter); php_stream_close(pass.fp); } } http://cvs.php.net/viewvc.cgi/php-src/ext/phar/tests/phar_buildfromdirectory4.phpt?r1=1.2r2=1.2.2.1diff_format=u Index: php-src/ext/phar/tests/phar_buildfromdirectory4.phpt diff -u php-src/ext/phar/tests/phar_buildfromdirectory4.phpt:1.2 php-src/ext/phar/tests/phar_buildfromdirectory4.phpt:1.2.2.1 --- php-src/ext/phar/tests/phar_buildfromdirectory4.phpt:1.2Sun May 11 19:17:50 2008 +++ php-src/ext/phar/tests/phar_buildfromdirectory4.phptMon Jun 23 04:00:23 2008 @@ -5,6 +5,7 @@ --INI-- phar.require_hash=0 phar.readonly=0 +open_basedir= --FILE-- ?php -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src(PHP_5_3) /ext/phar phar.phar phar_object.c
cellog Sat Jun 21 06:55:57 2008 UTC Modified files: (Branch: PHP_5_3) /php-src/ext/phar phar.phar phar_object.c Log: close stream on failure http://cvs.php.net/viewvc.cgi/php-src/ext/phar/phar.phar?r1=1.7.2.23r2=1.7.2.24diff_format=u Index: php-src/ext/phar/phar.phar http://cvs.php.net/viewvc.cgi/php-src/ext/phar/phar_object.c?r1=1.266.2.26r2=1.266.2.27diff_format=u Index: php-src/ext/phar/phar_object.c diff -u php-src/ext/phar/phar_object.c:1.266.2.26 php-src/ext/phar/phar_object.c:1.266.2.27 --- php-src/ext/phar/phar_object.c:1.266.2.26 Sat Jun 21 06:53:10 2008 +++ php-src/ext/phar/phar_object.c Sat Jun 21 06:55:56 2008 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: phar_object.c,v 1.266.2.26 2008/06/21 06:53:10 cellog Exp $ */ +/* $Id: phar_object.c,v 1.266.2.27 2008/06/21 06:55:56 cellog Exp $ */ #include phar_internal.h #include func_interceptors.h @@ -1736,6 +1736,8 @@ zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, error); efree(error); } + } else { + php_stream_close(pass.fp); } } @@ -1785,6 +1787,8 @@ zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, error); efree(error); } + } else { + php_stream_close(pass.fp); } } -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src(PHP_5_3) /ext/phar phar.phar phar_object.c
cellog Sat Jun 21 06:53:11 2008 UTC Modified files: (Branch: PHP_5_3) /php-src/ext/phar phar.phar phar_object.c Log: 82x(./profile2) speedup for buildFrom*() http://cvs.php.net/viewvc.cgi/php-src/ext/phar/phar.phar?r1=1.7.2.22r2=1.7.2.23diff_format=u Index: php-src/ext/phar/phar.phar http://cvs.php.net/viewvc.cgi/php-src/ext/phar/phar_object.c?r1=1.266.2.25r2=1.266.2.26diff_format=u Index: php-src/ext/phar/phar_object.c diff -u php-src/ext/phar/phar_object.c:1.266.2.25 php-src/ext/phar/phar_object.c:1.266.2.26 --- php-src/ext/phar/phar_object.c:1.266.2.25 Fri Jun 20 09:17:53 2008 +++ php-src/ext/phar/phar_object.c Sat Jun 21 06:53:10 2008 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: phar_object.c,v 1.266.2.25 2008/06/20 09:17:53 johannes Exp $ */ +/* $Id: phar_object.c,v 1.266.2.26 2008/06/21 06:53:10 cellog Exp $ */ #include phar_internal.h #include func_interceptors.h @@ -1365,20 +1365,22 @@ return; \ } -static int phar_build(zend_object_iterator *iter, void *puser TSRMLS_DC) /* {{{ */ -{ - zval **value; - zend_uchar key_type; - zend_bool is_splfileinfo = 0, close_fp = 1; - ulong int_key; - struct _t { +struct _phar_t { phar_archive_object *p; zend_class_entry *c; char *b; uint l; zval *ret; int count; - } *p_obj = (struct _t*) puser; + php_stream *fp; + }; +static int phar_build(zend_object_iterator *iter, void *puser TSRMLS_DC) /* {{{ */ +{ + zval **value; + zend_uchar key_type; + zend_bool is_splfileinfo = 0, close_fp = 1; + ulong int_key; + struct _phar_t *p_obj = (struct _phar_t*) puser; uint str_key_len, base_len = p_obj-l, fname_len; phar_entry_data *data; php_stream *fp; @@ -1605,7 +1607,13 @@ if (error) { efree(error); } - contents_len = php_stream_copy_to_stream(fp, data-fp, PHP_STREAM_COPY_ALL); + /* convert to PHAR_UFP */ + php_stream_close(data-internal_file-fp); + data-internal_file-fp_type = PHAR_UFP; + data-internal_file-offset_abs = data-internal_file-offset = php_stream_tell(p_obj-fp); + contents_len = php_stream_copy_to_stream(fp, p_obj-fp, PHP_STREAM_COPY_ALL); + data-internal_file-uncompressed_filesize = data-internal_file-compressed_filesize = + php_stream_tell(p_obj-fp) - data-internal_file-offset; } if (close_fp) { php_stream_close(fp); @@ -1622,15 +1630,6 @@ data-internal_file-compressed_filesize = data-internal_file-uncompressed_filesize = contents_len; phar_entry_delref(data TSRMLS_CC); - if (++p_obj-count p_obj-count % 900) { - /* every 900 files, flush so we remove open temp file handles, fixes Bug #45218 */ - phar_flush(p_obj-p-arc.archive, 0, 0, 0, error TSRMLS_CC); - if (error) { - zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, error); - efree(error); - return ZEND_HASH_APPLY_STOP; - } - } return ZEND_HASH_APPLY_KEEP; } /* }}} */ @@ -1647,14 +1646,7 @@ int dir_len, regex_len = 0; zend_bool apply_reg = 0; zval arg, arg2, *iter, *iteriter, *regexiter = NULL; - struct { - phar_archive_object *p; - zend_class_entry *c; - char *b; - uint l; - zval *ret; - int count; - } pass; + struct _phar_t pass; PHAR_ARCHIVE_OBJECT(); @@ -1731,12 +1723,14 @@ pass.l = dir_len; pass.count = 0; pass.ret = return_value; + pass.fp = php_stream_fopen_tmpfile(); if (SUCCESS == spl_iterator_apply((apply_reg ? regexiter : iteriter), (spl_iterator_apply_func_t) phar_build, (void *) pass TSRMLS_CC)) { zval_ptr_dtor(iteriter); if (apply_reg) { zval_ptr_dtor(regexiter); } + phar_obj-arc.archive-ufp = pass.fp; phar_flush(phar_obj-arc.archive, 0, 0, 0, error TSRMLS_CC); if (error) { zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, error); @@ -1761,14 +1755,7 @@ char *error; uint base_len = 0; char *base = NULL; - struct { - phar_archive_object *p; - zend_class_entry *c; - char *b; - uint l; - zval *ret; - int count; - } pass; + struct _phar_t pass; PHAR_ARCHIVE_OBJECT(); if (PHAR_G(readonly)
[PHP-CVS] cvs: php-src(PHP_5_3) /ext/phar phar.phar phar_object.c /ext/phar/tests bug45218_SLOWTEST.phpt
cellog Tue Jun 10 19:20:33 2008 UTC Added files: (Branch: PHP_5_3) /php-src/ext/phar/tests bug45218_SLOWTEST.phpt Modified files: /php-src/ext/phar phar.phar phar_object.c Log: fix PHP Bug #45218: PHAR archive built from directory limited by max open file handles http://cvs.php.net/viewvc.cgi/php-src/ext/phar/phar.phar?r1=1.7.2.9r2=1.7.2.10diff_format=u Index: php-src/ext/phar/phar.phar http://cvs.php.net/viewvc.cgi/php-src/ext/phar/phar_object.c?r1=1.266.2.16r2=1.266.2.17diff_format=u Index: php-src/ext/phar/phar_object.c diff -u php-src/ext/phar/phar_object.c:1.266.2.16 php-src/ext/phar/phar_object.c:1.266.2.17 --- php-src/ext/phar/phar_object.c:1.266.2.16 Mon Jun 2 15:49:03 2008 +++ php-src/ext/phar/phar_object.c Tue Jun 10 19:20:33 2008 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: phar_object.c,v 1.266.2.16 2008/06/02 15:49:03 helly Exp $ */ +/* $Id: phar_object.c,v 1.266.2.17 2008/06/10 19:20:33 cellog Exp $ */ #include phar_internal.h #include func_interceptors.h @@ -1347,12 +1347,13 @@ char *b; uint l; zval *ret; + int count; } *p_obj = (struct _t*) puser; uint str_key_len, base_len = p_obj-l, fname_len; phar_entry_data *data; php_stream *fp; long contents_len; - char *fname, *error, *base = p_obj-b, *opened, *save = NULL, *temp = NULL; + char *fname, *error = NULL, *base = p_obj-b, *opened, *save = NULL, *temp = NULL; phar_zstr key; char *str_key; zend_class_entry *ce = p_obj-c; @@ -1591,6 +1592,15 @@ data-internal_file-compressed_filesize = data-internal_file-uncompressed_filesize = contents_len; phar_entry_delref(data TSRMLS_CC); + if (++p_obj-count p_obj-count % 900) { + /* every 900 files, flush so we remove open temp file handles, fixes Bug #45218 */ + phar_flush(p_obj-p-arc.archive, 0, 0, 0, error TSRMLS_CC); + if (error) { + zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, error); + efree(error); + return ZEND_HASH_APPLY_STOP; + } + } return ZEND_HASH_APPLY_KEEP; } /* }}} */ @@ -1613,6 +1623,7 @@ char *b; uint l; zval *ret; + int count; } pass; PHAR_ARCHIVE_OBJECT(); @@ -1688,6 +1699,7 @@ pass.p = phar_obj; pass.b = dir; pass.l = dir_len; + pass.count = 0; pass.ret = return_value; if (SUCCESS == spl_iterator_apply((apply_reg ? regexiter : iteriter), (spl_iterator_apply_func_t) phar_build, (void *) pass TSRMLS_CC)) { @@ -1725,6 +1737,7 @@ char *b; uint l; zval *ret; + int count; } pass; PHAR_ARCHIVE_OBJECT(); @@ -1745,6 +1758,7 @@ pass.b = base; pass.l = base_len; pass.ret = return_value; + pass.count = 0; if (SUCCESS == spl_iterator_apply(obj, (spl_iterator_apply_func_t) phar_build, (void *) pass TSRMLS_CC)) { phar_flush(phar_obj-arc.archive, 0, 0, 0, error TSRMLS_CC); http://cvs.php.net/viewvc.cgi/php-src/ext/phar/tests/bug45218_SLOWTEST.phpt?view=markuprev=1.1 Index: php-src/ext/phar/tests/bug45218_SLOWTEST.phpt +++ php-src/ext/phar/tests/bug45218_SLOWTEST.phpt -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php