The old version of trim() didn't use zend_parse_parameters() and used make_printable_zval(). As result it called __toString() magic method.
I restored previous behavior to keep BC. Dmitry. > -----Original Message----- > From: Andrei Zmievski [mailto:[EMAIL PROTECTED] > Sent: Thursday, August 18, 2005 1:46 AM > To: Dmitry Stogov > Cc: php-cvs@lists.php.net > Subject: Re: [PHP-CVS] cvs: php-src /ext/simplexml/tests > 004.phpt /ext/standard string.c /tests/classes tostring.phpt > /tests/reflection 005.phpt > > > Why can't we use zend_parse_parameters() here? > > -Andrei > > > On Aug 17, 2005, at 4:36 AM, Dmitry Stogov wrote: > > > dmitry Wed Aug 17 07:36:32 2005 EDT > > > > Modified files: > > /php-src/ext/simplexml/tests 004.phpt > > /php-src/ext/standard string.c > > /php-src/tests/classes tostring.phpt > > /php-src/tests/reflection 005.phpt > > Log: > > trim() should accept objects with __toString() method > > > > > > http://cvs.php.net/diff.php/php-src/ext/simplexml/tests/004.phpt? > > r1=1.6&r2=1.7&ty=u > > Index: php-src/ext/simplexml/tests/004.phpt > > diff -u php-src/ext/simplexml/tests/004.phpt:1.6 php-src/ext/ > > simplexml/tests/004.phpt:1.7 > > --- php-src/ext/simplexml/tests/004.phpt:1.6 Mon Mar 29 > 14:58:01 > > 2004 > > +++ php-src/ext/simplexml/tests/004.phpt Wed Aug 17 07:36:28 2005 > > @@ -63,3 +63,33 @@ > > ) > > string(11) "CDATA block" > > ===DONE=== > > +--UEXPECT-- > > +SimpleXMLElement Object > > +( > > + [elem1] => SimpleXMLElement Object > > + ( > > + [comment] => SimpleXMLElement Object > > + ( > > + ) > > + > > + [elem2] => SimpleXMLElement Object > > + ( > > + [elem3] => SimpleXMLElement Object > > + ( > > + [elem4] => SimpleXMLElement Object > > + ( > > + [test] => > SimpleXMLElement Object > > + ( > > + ) > > + > > + ) > > + > > + ) > > + > > + ) > > + > > + ) > > + > > +) > > +unicode(11) "CDATA block" > > +===DONE=== > > http://cvs.php.net/diff.php/php-src/ext/standard/string.c? > > r1=1.460&r2=1.461&ty=u > > Index: php-src/ext/standard/string.c > > diff -u php-src/ext/standard/string.c:1.460 php-src/ext/standard/ > > string.c:1.461 > > --- php-src/ext/standard/string.c:1.460 Wed Aug 17 06:26:02 2005 > > +++ php-src/ext/standard/string.c Wed Aug 17 07:36:30 2005 > > @@ -18,7 +18,7 @@ > > > > > +--------------------------------------------------------------------- > > -+ > > */ > > > > -/* $Id: string.c,v 1.460 2005/08/17 10:26:02 rolland Exp $ */ > > +/* $Id: string.c,v 1.461 2005/08/17 11:36:30 dmitry Exp $ */ > > > > /* Synced with php 3.0 revision 1.193 1999-06-16 [ssb] */ > > > > @@ -737,30 +737,31 @@ > > */ > > static void php_do_trim(INTERNAL_FUNCTION_PARAMETERS, int mode) { > > - void *str; > > - int32_t str_len; > > - zend_uchar str_type; > > - void *what; > > - int32_t what_len; > > - zend_uchar what_type; > > - int argc = ZEND_NUM_ARGS(); > > + zval **str, **what; > > + int argc = ZEND_NUM_ARGS(); > > > > - if ( zend_parse_parameters(argc TSRMLS_CC, "T|T", &str, > > &str_len, &str_type, > > - &what, &what_len, > &what_type) == > > FAILURE ) { > > - return; > > + if (argc < 1 || argc > 2 || zend_get_parameters_ex(argc, &str, > > &what) == FAILURE) { > > + WRONG_PARAM_COUNT; > > } > > > > - if ( argc > 1 ) { > > - if ( str_type == IS_UNICODE ) { > > - php_u_trim(str, str_len, what, what_len, > return_value, > > mode TSRMLS_CC); > > + convert_to_text_ex(str); > > + > > + if (argc > 1) { > > + if (Z_TYPE_PP(str) != Z_TYPE_PP(what)) { > > + zend_error(E_WARNING, "%v() expects parameter 2 to be > > string (legacy, Unicode, or binary), %s given", > > + get_active_function_name(TSRMLS_C), > > + zend_zval_type_name(*what)); > > + } > > + if (Z_TYPE_PP(str) == IS_UNICODE) { > > + php_u_trim(Z_USTRVAL_PP(str), Z_USTRLEN_PP(str), > > Z_USTRVAL_PP(what), Z_USTRLEN_PP(what), return_value, mode > TSRMLS_CC); > > } else { > > - php_trim(str, str_len, what, what_len, str_type, > > return_value, mode TSRMLS_CC); > > + php_trim(Z_STRVAL_PP(str), Z_STRLEN_PP(str), > > Z_STRVAL_PP(what), Z_STRLEN_PP(what), Z_TYPE_PP(str), return_value, > > mode TSRMLS_CC); > > } > > } else { > > - if ( str_type == IS_UNICODE ) { > > - php_u_trim(str, str_len, NULL, 0, return_value, mode > > TSRMLS_CC); > > + if (Z_TYPE_PP(str) == IS_UNICODE) { > > + php_u_trim(Z_USTRVAL_PP(str), Z_USTRLEN_PP(str), NULL, > > 0, return_value, mode TSRMLS_CC); > > } else { > > - php_trim(str, str_len, NULL, 0, str_type, > > return_value, mode TSRMLS_CC); > > + php_trim(Z_STRVAL_PP(str), Z_STRLEN_PP(str), NULL, 0, > > Z_TYPE_PP(str), return_value, mode TSRMLS_CC); > > } > > } > > } http://cvs.php.net/diff.php/php-src/tests/classes/tostring.phpt? > > r1=1.5&r2=1.6&ty=u > > Index: php-src/tests/classes/tostring.phpt > > diff -u php-src/tests/classes/tostring.phpt:1.5 php-src/tests/ > > classes/tostring.phpt:1.6 > > --- php-src/tests/classes/tostring.phpt:1.5 Sun Mar 28 09:09:47 > > 2004 > > +++ php-src/tests/classes/tostring.phpt Wed Aug 17 07:36:32 2005 > > @@ -84,3 +84,36 @@ > > string(1%d) "Object id #%d" > > ====test9==== > > Object id #%d====DONE!==== > > +--UEXPECTF-- > > +====test1==== > > +test1 Object > > +( > > +) > > +string(1%d) "Object id #%d" > > +object(test1)#%d (%d) { > > +} > > +====test2==== > > +test2 Object > > +( > > +) > > +test2::__toString() > > +Converted > > +object(test2)#%d (%d) { > > +} > > +====test3==== > > +test2::__toString() > > +Converted > > +====test4==== > > +string:Object id #%d====test5==== > > +1Object id #%d====test6==== > > +Object id #%dObject id #2====test7==== > > +test2::__toString() > > + > > +Warning: Illegal offset type in %stostring.php on line %d > > +====test8==== > > + > > +Notice: Object of class test2 to string conversion in % > > stostring.php on line %d > > +unicode(6) "Object" > > +unicode(1%d) "Object id #%d" > > +====test9==== > > +Object id #%d====DONE!==== > > http://cvs.php.net/diff.php/php-src/tests/reflection/005.phpt? > > r1=1.1&r2=1.2&ty=u > > Index: php-src/tests/reflection/005.phpt > > diff -u php-src/tests/reflection/005.phpt:1.1 php-src/tests/ > > reflection/005.phpt:1.2 > > --- php-src/tests/reflection/005.phpt:1.1 Sun Feb 13 > 08:50:30 2005 > > +++ php-src/tests/reflection/005.phpt Wed Aug 17 07:36:32 2005 > > @@ -52,3 +52,10 @@ > > bool(false) > > string(22) "* Comment for A::baz()" > > ===DONE=== > > +--UEXPECT-- > > +unicode(19) "Comment for class A" > > +unicode(15) "Method A::bla()" > > +bool(false) > > +bool(false) > > +unicode(22) "* Comment for A::baz()" > > +===DONE=== > > > > -- > > PHP CVS Mailing List (http://www.php.net/) > > To unsubscribe, visit: http://www.php.net/unsub.php > > > > -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php