dmitry Wed Aug 17 03:59:32 2005 EDT Modified files: /php-src/ext/standard string.c /php-src/ext/standard/tests/strings bug22224.phpt Log: Fixed implode() bugs http://cvs.php.net/diff.php/php-src/ext/standard/string.c?r1=1.458&r2=1.459&ty=u Index: php-src/ext/standard/string.c diff -u php-src/ext/standard/string.c:1.458 php-src/ext/standard/string.c:1.459 --- php-src/ext/standard/string.c:1.458 Wed Aug 17 03:14:12 2005 +++ php-src/ext/standard/string.c Wed Aug 17 03:59:28 2005 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: string.c,v 1.458 2005/08/17 07:14:12 rolland Exp $ */ +/* $Id: string.c,v 1.459 2005/08/17 07:59:28 dmitry Exp $ */ /* Synced with php 3.0 revision 1.193 1999-06-16 [ssb] */ @@ -1216,26 +1216,24 @@ /* Append elem */ if (return_type == IS_UNICODE) { Z_USTRVAL_P(retval) = eurealloc(Z_USTRVAL_P(retval), - Z_USTRLEN_P(retval)+Z_USTRLEN_PP(tmp)); - memcpy(Z_USTRVAL_P(retval)+Z_USTRLEN_P(retval), Z_USTRVAL_PP(tmp), - UBYTES(Z_USTRLEN_PP(tmp))); + UBYTES(Z_USTRLEN_P(retval)+Z_USTRLEN_PP(tmp)+1)); + memcpy(Z_USTRVAL_P(retval)+Z_USTRLEN_P(retval), Z_USTRVAL_PP(tmp), UBYTES(Z_USTRLEN_PP(tmp)+1)); Z_USTRLEN_P(retval) += Z_USTRLEN_PP(tmp); if (++i < numelems) { /* Append delim */ Z_USTRVAL_P(retval) = eurealloc(Z_USTRVAL_P(retval), - Z_USTRLEN_P(retval)+Z_USTRLEN_P(delim)); - memcpy(Z_USTRVAL_P(retval)+Z_USTRLEN_P(retval), Z_USTRVAL_P(delim), - UBYTES(Z_USTRLEN_P(delim))); + UBYTES(Z_USTRLEN_P(retval)+Z_USTRLEN_P(delim)+1)); + memcpy(Z_USTRVAL_P(retval)+Z_USTRLEN_P(retval), Z_USTRVAL_P(delim), UBYTES(Z_USTRLEN_P(delim)+1)); Z_USTRLEN_P(retval) += Z_USTRLEN_P(delim); } } else { Z_STRVAL_P(retval) = (char *)erealloc(Z_STRVAL_P(retval), - Z_STRLEN_P(retval)+Z_STRLEN_PP(tmp)); - memcpy(Z_STRVAL_P(retval)+Z_STRLEN_P(retval), Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp)); + Z_STRLEN_P(retval)+Z_STRLEN_PP(tmp)+1); + memcpy(Z_STRVAL_P(retval)+Z_STRLEN_P(retval), Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp)+1); Z_STRLEN_P(retval) += Z_STRLEN_PP(tmp); if (++i < numelems) { /* Append delim */ Z_STRVAL_P(retval) = (char *)erealloc(Z_STRVAL_P(retval), - Z_STRLEN_P(retval)+Z_STRLEN_P(delim)); - memcpy(Z_STRVAL_P(retval)+Z_STRLEN_P(retval), Z_STRVAL_P(delim), Z_STRLEN_P(delim)); + Z_STRLEN_P(retval)+Z_STRLEN_P(delim)+1); + memcpy(Z_STRVAL_P(retval)+Z_STRLEN_P(retval), Z_STRVAL_P(delim), Z_STRLEN_P(delim)+1); Z_STRLEN_P(retval) += Z_STRLEN_P(delim); } } @@ -1271,7 +1269,7 @@ arr = *arg1; MAKE_STD_ZVAL(delim); if (UG(unicode)) { - ZVAL_UNICODEL(delim, USTR_MAKE(""), sizeof("")-1, 0); + ZVAL_UNICODEL(delim, EMPTY_STR, sizeof("")-1, 0); } else { ZVAL_STRINGL(delim, "", sizeof("")-1, 0); } @@ -1280,19 +1278,21 @@ if (Z_TYPE_PP(arg1) == IS_ARRAY) { SEPARATE_ZVAL(arg1); arr = *arg1; + if (Z_TYPE_PP(arg2) != IS_UNICODE && Z_TYPE_PP(arg2) != IS_BINARY && Z_TYPE_PP(arg2) != IS_STRING) { + convert_to_text_ex(arg2); + } delim = *arg2; } else if (Z_TYPE_PP(arg2) == IS_ARRAY) { SEPARATE_ZVAL(arg2); arr = *arg2; + if (Z_TYPE_PP(arg1) != IS_UNICODE && Z_TYPE_PP(arg1) != IS_BINARY && Z_TYPE_PP(arg1) != IS_STRING) { + convert_to_text_ex(arg1); + } delim = *arg1; } else { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad arguments."); RETURN_FALSE; } - SEPARATE_ZVAL(&delim); - if (Z_TYPE_P(delim) != IS_BINARY) { - convert_to_text_ex(&delim); - } } php_implode(delim, arr, return_value); http://cvs.php.net/diff.php/php-src/ext/standard/tests/strings/bug22224.phpt?r1=1.2&r2=1.3&ty=u Index: php-src/ext/standard/tests/strings/bug22224.phpt diff -u php-src/ext/standard/tests/strings/bug22224.phpt:1.2 php-src/ext/standard/tests/strings/bug22224.phpt:1.3 --- php-src/ext/standard/tests/strings/bug22224.phpt:1.2 Mon Mar 10 15:42:33 2003 +++ php-src/ext/standard/tests/strings/bug22224.phpt Wed Aug 17 03:59:31 2005 @@ -24,3 +24,13 @@ &object(foo)#%d (0) { } } +--UEXPECTF-- +unicode(13) "Object,Object" +array(2) { + [0]=> + &object(foo)#%d (0) { + } + [1]=> + &object(foo)#%d (0) { + } +}
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php