Package: php5-cli Version: 5.4.4-15 Severity: important Tags: patch upstream
Hi while running testsuite, I quite often get segmentation fault. After experimenting with patches, I fould following upstream bugs to cause my problems: https://bugs.php.net/bug.php?id=63635 https://bugs.php.net/bug.php?id=63055 Attached is patch which combines these fixes. -- Michal Čihař | http://cihar.com | http://blog.cihar.com -- System Information: Debian Release: 7.0 APT prefers unstable APT policy: (500, 'unstable'), (1, 'experimental') Architecture: amd64 (x86_64) Kernel: Linux 2.6.32-5-vserver-amd64 (SMP w/4 CPU cores) Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Versions of packages php5-cli depends on: ii libbz2-1.0 1.0.6-4 ii libc6 2.13-38 ii libcomerr2 1.42.5-1.1 ii libdb5.1 5.1.29-5 ii libgssapi-krb5-2 1.10.1+dfsg-5 ii libk5crypto3 1.10.1+dfsg-5 ii libkrb5-3 1.10.1+dfsg-5 ii libmagic1 1:5.11-3 ii libonig2 5.9.1-1 ii libpcre3 1:8.31-2 ii libqdbm14 1.8.78-2 ii libssl1.0.0 1.0.1e-2 ii libxml2 2.8.0+dfsg1-7+nmu1 ii mime-support 3.52-2 ii php5-common 5.4.4-15 ii tzdata 2013b-2 ii ucf 3.0025+nmu3 ii zlib1g 1:1.2.7.dfsg-13 php5-cli recommends no packages. Versions of packages php5-cli suggests: ii php-pear 5.4.4-15 -- no debconf information
--- a/Zend/zend_gc.c +++ b/Zend/zend_gc.c @@ -644,7 +644,8 @@ struct _store_object *obj = &EG(objects_store).object_buckets[Z_OBJ_HANDLE_P(pz)].bucket.obj; if (obj->buffered == (gc_root_buffer*)GC_WHITE) { - GC_SET_BLACK(obj->buffered); + /* PURPLE instead of BLACK to prevent buffering in nested gc calls */ + GC_SET_PURPLE(obj->buffered); if (EXPECTED(EG(objects_store).object_buckets[Z_OBJ_HANDLE_P(pz)].valid && (get_gc = Z_OBJ_HANDLER_P(pz, get_gc)) != NULL)) { @@ -715,7 +716,8 @@ struct _store_object *obj = &EG(objects_store).object_buckets[Z_OBJ_HANDLE_P(pz)].bucket.obj; if (obj->buffered == (gc_root_buffer*)GC_WHITE) { - GC_SET_BLACK(obj->buffered); + /* PURPLE instead of BLACK to prevent buffering in nested gc calls */ + GC_SET_PURPLE(obj->buffered); if (EXPECTED(EG(objects_store).object_buckets[Z_OBJ_HANDLE_P(pz)].valid && (get_gc = Z_OBJ_HANDLER_P(pz, get_gc)) != NULL)) { --- a/ext/pcre/php_pcre.c +++ b/ext/pcre/php_pcre.c @@ -547,8 +547,9 @@ /* Overwrite the passed-in value for subpatterns with an empty array. */ if (subpats != NULL) { - zval_dtor(subpats); + zval garbage = *subpats; array_init(subpats); + zval_dtor(&garbage); } subpats_order = global ? PREG_PATTERN_ORDER : 0;