From d0c66301cb39c804f088994fde2a6ab227112f3a Mon Sep 17 00:00:00 2001 From: remi Date: Sep 28 2011 15:04:11 +0000 Subject: revert is_a() to php <= 5.3.6 behavior (from upstream) with new option (allow_string) for new behavior --- diff --git a/php-5.3.8-isa.patch b/php-5.3.8-isa.patch new file mode 100644 index 0000000..93de48c --- /dev/null +++ b/php-5.3.8-isa.patch @@ -0,0 +1,45 @@ +--- php/php-src/branches/PHP_5_3/Zend/zend_builtin_functions.c 2011/09/23 09:29:27 317182 ++++ php/php-src/branches/PHP_5_3/Zend/zend_builtin_functions.c 2011/09/23 09:52:09 317183 +@@ -816,13 +816,19 @@ + int class_name_len; + zend_class_entry *instance_ce; + zend_class_entry **ce; ++ zend_bool allow_string = only_subclass; + zend_bool retval; + +- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zs", &obj, &class_name, &class_name_len) == FAILURE) { ++ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zs|b", &obj, &class_name, &class_name_len, &allow_string) == FAILURE) { + return; + } +- +- if (Z_TYPE_P(obj) == IS_STRING) { ++ /* ++ allow_string - is_a default is no, is_subclass_of is yes. ++ if it's allowed, then the autoloader will be called if the class does not exist. ++ default behaviour is different, as 'is_a' usage is normally to test mixed return values ++ */ ++ ++ if (allow_string && Z_TYPE_P(obj) == IS_STRING) { + zend_class_entry **the_ce; + if (zend_lookup_class(Z_STRVAL_P(obj), Z_STRLEN_P(obj), &the_ce TSRMLS_CC) == FAILURE) { + RETURN_FALSE; +@@ -848,7 +854,7 @@ + } + + +-/* {{{ proto bool is_subclass_of(object object, string class_name) ++/* {{{ proto bool is_subclass_of(mixed object_or_string, string class_name [, bool allow_string=true]) + Returns true if the object has this class as one of its parents */ + ZEND_FUNCTION(is_subclass_of) + { +@@ -857,8 +863,8 @@ + /* }}} */ + + +-/* {{{ proto bool is_a(object object, string class_name) +- Returns true if the object is of this class or has this class as one of its parents */ ++/* {{{ proto bool is_a(mixed object_or_string, string class_name [, bool allow_string=false]) ++ Returns true if the first argument is an object and is this class or has this class as one of its parents, */ + ZEND_FUNCTION(is_a) + { + is_a_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); diff --git a/php.spec b/php.spec index 8a88191..b040c00 100644 --- a/php.spec +++ b/php.spec @@ -37,7 +37,7 @@ Summary: PHP scripting language for creating dynamic web sites Name: php Version: 5.3.8 -Release: 2%{?dist} +Release: 3%{?dist} License: PHP Group: Development/Languages URL: http://www.php.net/ @@ -75,6 +75,8 @@ Patch41: php-5.3.0-easter.patch Patch42: php-5.3.1-systzdata-v7.patch # See http://bugs.php.net/53436 Patch43: php-5.3.4-phpize.patch +# http://svn.php.net/viewvc?view=revision&revision=317183 +Patch44: php-5.3.8-isa.patch # Fixes for tests Patch61: php-5.0.4-tests-wddx.patch @@ -1102,6 +1104,10 @@ fi %changelog +* Wed Sep 28 2011 Remi Collet 5.3.8-3 +- revert is_a() to php <= 5.3.6 behavior (from upstream) + with new option (allow_string) for new behavior + * Tue Sep 13 2011 Remi Collet 5.3.8-2 - add mysqlnd sub-package - drop patch4, use --libdir to use /usr/lib*/php/build