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