Hi,

this wasn't merged properly in 5.4. I get an conflict:

[PHP-5.4] $ git merge PHP-5.3
Auto-merging NEWS
Auto-merging ext/intl/dateformat/dateformat_class.c
Auto-merging ext/intl/formatter/formatter_class.c
Auto-merging ext/intl/msgformat/msgformat_class.c
Auto-merging ext/intl/tests/bug62915-2.phpt
CONFLICT (add/add): Merge conflict in ext/intl/tests/bug62915-2.phpt
Automatic merge failed; fix conflicts and then commit the result.

I guess the test is the same in the branches, but please look into it
and fix it so the result is correct. Please always make sure to merge
lower into higher branches. Makes lives of others simpler.

johannes

On Sun, 2012-08-26 at 21:53 +0000, Gustavo André dos Santos Lopes wrote:
> Commit:    0410b4e60f6b4b3a105c0866b797dc47a58ec594
> Author:    Gustavo Lopes <glo...@nebm.ist.utl.pt>         Sun, 26 Aug 2012 
> 23:37:09 +0200
> Parents:   d92a89fe52e89eef9527d1e27b5bb051ae24bc54
> Branches:  PHP-5.3
> 
> Link:       
> http://git.php.net/?p=php-src.git;a=commitdiff;h=0410b4e60f6b4b3a105c0866b797dc47a58ec594
> 
> Log:
> Fixed defective cloning in ext/intl classes
> 
> See also bug #62915
> 
> Cherry picked from 886a50a (I forgot about 5.3)
> 
> Conflicts:
>       ext/intl/spoofchecker/spoofchecker_class.c
>       ext/intl/transliterator/transliterator_class.c
> 
> Bugs:
> https://bugs.php.net/62915
> 
> Changed paths:
>   M  NEWS
>   M  ext/intl/dateformat/dateformat_class.c
>   M  ext/intl/formatter/formatter_class.c
>   M  ext/intl/msgformat/msgformat_class.c
>   A  ext/intl/tests/bug62915-2.phpt
> 
> 
> Diff:
> diff --git a/NEWS b/NEWS
> index 69cbb2a..cd7333c 100644
> --- a/NEWS
> +++ b/NEWS
> @@ -25,6 +25,7 @@ PHP                                                         
>                NEWS
>  
>  - Intl:
>    . Fix null pointer dereferences in some classes of ext/intl. (Gustavo)
> +  . Fix bug #62915 (defective cloning in several intl classes). (Gustavo)
>  
>  - MySQLnd:
>    . Fixed bug #62885 (mysqli_poll - Segmentation fault). (Laruence)
> diff --git a/ext/intl/dateformat/dateformat_class.c 
> b/ext/intl/dateformat/dateformat_class.c
> index 85a67f7..a7227ef 100644
> --- a/ext/intl/dateformat/dateformat_class.c
> +++ b/ext/intl/dateformat/dateformat_class.c
> @@ -91,7 +91,7 @@ zend_object_value IntlDateFormatter_object_clone(zval 
> *object TSRMLS_DC)
>  
>       DATE_FORMAT_METHOD_FETCH_OBJECT_NO_CHECK;
>  
> -     new_obj_val = 
> IntlDateFormatter_ce_ptr->create_object(IntlDateFormatter_ce_ptr TSRMLS_CC);
> +     new_obj_val = IntlDateFormatter_ce_ptr->create_object(Z_OBJCE_P(object) 
> TSRMLS_CC);
>       new_dfo = (IntlDateFormatter_object 
> *)zend_object_store_get_object_by_handle(new_obj_val.handle TSRMLS_CC);
>       /* clone standard parts */      
>       zend_objects_clone_members(&new_dfo->zo, new_obj_val, &dfo->zo, handle 
> TSRMLS_CC);
> diff --git a/ext/intl/formatter/formatter_class.c 
> b/ext/intl/formatter/formatter_class.c
> index 5790f0c..9de1e1e 100644
> --- a/ext/intl/formatter/formatter_class.c
> +++ b/ext/intl/formatter/formatter_class.c
> @@ -85,7 +85,7 @@ zend_object_value NumberFormatter_object_clone(zval *object 
> TSRMLS_DC)
>       NumberFormatter_object *nfo, *new_nfo;
>  
>       FORMATTER_METHOD_FETCH_OBJECT_NO_CHECK;
> -     new_obj_val = 
> NumberFormatter_ce_ptr->create_object(NumberFormatter_ce_ptr TSRMLS_CC);
> +     new_obj_val = NumberFormatter_ce_ptr->create_object(Z_OBJCE_P(object) 
> TSRMLS_CC);
>       new_nfo = (NumberFormatter_object 
> *)zend_object_store_get_object_by_handle(new_obj_val.handle TSRMLS_CC);
>       /* clone standard parts */      
>       zend_objects_clone_members(&new_nfo->zo, new_obj_val, &nfo->zo, handle 
> TSRMLS_CC);
> diff --git a/ext/intl/msgformat/msgformat_class.c 
> b/ext/intl/msgformat/msgformat_class.c
> index 36d06d2..d6ba9b1 100644
> --- a/ext/intl/msgformat/msgformat_class.c
> +++ b/ext/intl/msgformat/msgformat_class.c
> @@ -83,7 +83,7 @@ zend_object_value MessageFormatter_object_clone(zval 
> *object TSRMLS_DC)
>       MessageFormatter_object *mfo, *new_mfo;
>  
>       MSG_FORMAT_METHOD_FETCH_OBJECT_NO_CHECK;
> -     new_obj_val = 
> MessageFormatter_ce_ptr->create_object(MessageFormatter_ce_ptr TSRMLS_CC);
> +     new_obj_val = MessageFormatter_ce_ptr->create_object(Z_OBJCE_P(object) 
> TSRMLS_CC);
>       new_mfo = (MessageFormatter_object 
> *)zend_object_store_get_object_by_handle(new_obj_val.handle TSRMLS_CC);
>       /* clone standard parts */      
>       zend_objects_clone_members(&new_mfo->zo, new_obj_val, &mfo->zo, handle 
> TSRMLS_CC);
> diff --git a/ext/intl/tests/bug62915-2.phpt b/ext/intl/tests/bug62915-2.phpt
> new file mode 100644
> index 0000000..6bccf38
> --- /dev/null
> +++ b/ext/intl/tests/bug62915-2.phpt
> @@ -0,0 +1,29 @@
> +--TEST--
> +Bug #62915: cloning of several classes is defective
> +--SKIPIF--
> +<?php
> +if (!extension_loaded('intl'))
> +         die('skip intl extension not enabled');
> +--FILE--
> +<?php
> +class A extends IntlDateFormatter {
> +             static $ARGS = array("en_US" ,IntlDateFormatter::FULL, 
> IntlDateFormatter::FULL,
> +                 'America/Los_Angeles', IntlDateFormatter::GREGORIAN);
> +}
> +class B extends NumberFormatter {
> +             static $ARGS = array('de_DE', NumberFormatter::DECIMAL);
> +}
> +class C extends MessageFormatter {
> +             static $ARGS = array("en_US", "foo");
> +}
> +
> +foreach (range('A', 'C') as $subclass) {
> +             $rc = new ReflectionClass($subclass);
> +                     $obj = $rc->newInstanceArgs($subclass::$ARGS);
> +                             $clone = clone $obj;
> +                                     var_dump(get_class($clone));
> +}
> +--EXPECT--
> +string(1) "A"
> +string(1) "B"
> +string(1) "C"
> 
> 



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to