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

Reply via email to