revert is_a() to php <= 5.3.6 behavior (from upstream) with new option (allow_string) for new behavior

This commit is contained in:
remi 2011-09-28 17:04:11 +02:00
parent 8863ec2372
commit d0c66301cb
2 changed files with 52 additions and 1 deletions

45
php-5.3.8-isa.patch Normal file
View File

@ -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);

View File

@ -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 <remi@fedoraproject.org> 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 <remi@fedoraproject.org> 5.3.8-2
- add mysqlnd sub-package
- drop patch4, use --libdir to use /usr/lib*/php/build