dmitry          Wed Feb 22 13:47:40 2006 UTC

  Modified files:              
    /php-src/ext/standard       var.c 
  Log:
  Unicode support: fixed serealization of "Serializable" and "IncompleteClass"
  
  
http://cvs.php.net/viewcvs.cgi/php-src/ext/standard/var.c?r1=1.219&r2=1.220&diff_format=u
Index: php-src/ext/standard/var.c
diff -u php-src/ext/standard/var.c:1.219 php-src/ext/standard/var.c:1.220
--- php-src/ext/standard/var.c:1.219    Tue Feb 21 20:12:42 2006
+++ php-src/ext/standard/var.c  Wed Feb 22 13:47:40 2006
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: var.c,v 1.219 2006/02/21 20:12:42 dmitry Exp $ */
+/* $Id: var.c,v 1.220 2006/02/22 13:47:40 dmitry Exp $ */
 
 
 
@@ -697,6 +697,7 @@
 
        if (count > 0) {
                zstr key;
+               unsigned int key_len;
                zval **d, **name;
                ulong index;
                HashPosition pos;
@@ -709,14 +710,15 @@
                zend_hash_internal_pointer_reset_ex(HASH_OF(retval_ptr), &pos);
        
                for (;; zend_hash_move_forward_ex(HASH_OF(retval_ptr), &pos)) {
-                       i = zend_hash_get_current_key_ex(HASH_OF(retval_ptr), 
&key, NULL, 
+                       i = zend_hash_get_current_key_ex(HASH_OF(retval_ptr), 
&key, &key_len,
                                        &index, 0, &pos);
                        
                        if (i == HASH_KEY_NON_EXISTANT)
                                break;
 
-                       /* FIXME: Unicode support??? */
-                       if (incomplete_class && strcmp(key.s, MAGIC_MEMBER) == 
0) {
+                       if (incomplete_class &&
+                           key_len == sizeof(MAGIC_MEMBER) &&
+                           ZEND_U_EQUAL(i, key, key_len-1, MAGIC_MEMBER, 
sizeof(MAGIC_MEMBER)-1)) {
                                continue;
                        }
                        zend_hash_get_current_data_ex(HASH_OF(retval_ptr), 
@@ -869,8 +871,13 @@
                                                smart_str_appendl(buf, "C:", 2);
                                                smart_str_append_long(buf, 
Z_OBJCE_PP(struc)->name_length);
                                                smart_str_appendl(buf, ":\"", 
2);
-                                               /* FIXME: Unicode support??? */
-                                               smart_str_appendl(buf, 
Z_OBJCE_PP(struc)->name.s, Z_OBJCE_PP(struc)->name_length);
+
+                                               if (UG(unicode)) {
+                                                       
php_var_serialize_ustr(buf, Z_OBJCE_PP(struc)->name.u, 
Z_OBJCE_PP(struc)->name_length);
+                                               } else {
+                                                       smart_str_appendl(buf, 
Z_OBJCE_PP(struc)->name.s, Z_OBJCE_PP(struc)->name_length);
+                                               }
+
                                                smart_str_appendl(buf, "\":", 
2);
                                        
                                                smart_str_append_long(buf, 
serialized_length);
@@ -948,8 +955,9 @@
                                        if (i == HASH_KEY_NON_EXISTANT)
                                                break;
                                        
-                                       /* FIXME: Unicode support??? */
-                                       if (incomplete_class && strcmp(key.s, 
MAGIC_MEMBER) == 0) {
+                                       if (incomplete_class &&
+                                           key_len == sizeof(MAGIC_MEMBER) &&
+                                           ZEND_U_EQUAL(i, key, key_len-1, 
MAGIC_MEMBER, sizeof(MAGIC_MEMBER)-1)) {
                                                continue;
                                        }               
                                        

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

Reply via email to