andrei          Tue Dec  5 23:17:06 2006 UTC

  Modified files:              
    /php-src/ext/standard       array.c 
  Log:
  extract() should convert keys using runtime encoding.
  
  
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/array.c?r1=1.395&r2=1.396&diff_format=u
Index: php-src/ext/standard/array.c
diff -u php-src/ext/standard/array.c:1.395 php-src/ext/standard/array.c:1.396
--- php-src/ext/standard/array.c:1.395  Wed Nov 22 10:58:11 2006
+++ php-src/ext/standard/array.c        Tue Dec  5 23:17:06 2006
@@ -21,7 +21,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: array.c,v 1.395 2006/11/22 10:58:11 tony2001 Exp $ */
+/* $Id: array.c,v 1.396 2006/12/05 23:17:06 andrei Exp $ */
 
 #include "php.h"
 #include "php_ini.h"
@@ -1427,7 +1427,7 @@
                                        break;
                                }
                        
-                               ZVAL_TEXTL(&final_name, var_name, var_name_len, 
1);
+                               ZVAL_ZSTRL(&final_name, var_name, var_name_len, 
key_type, 1);
                                break;
 
                        case EXTR_PREFIX_IF_EXISTS:
@@ -1438,7 +1438,7 @@
 
                        case EXTR_PREFIX_SAME:
                                if (!var_exists && var_name_len != 0) {
-                                       ZVAL_TEXTL(&final_name, var_name, 
var_name_len, 1);
+                                       ZVAL_ZSTRL(&final_name, var_name, 
var_name_len, key_type, 1);
                                }
                                /* break omitted intentionally */
 
@@ -1453,18 +1453,24 @@
                                        if (!php_valid_var_name(var_name, 
var_name_len, key_type)) {
                                                php_prefix_varname(&final_name, 
prefix, var_name, var_name_len, key_type TSRMLS_CC);
                                        } else {
-                                               ZVAL_TEXTL(&final_name, 
var_name, var_name_len, 1);
+                                               ZVAL_ZSTRL(&final_name, 
var_name, var_name_len, key_type, 1);
                                        }
                                }
                                break;
 
                        default:
                                if (!var_exists) {
-                                       ZVAL_TEXTL(&final_name, var_name, 
var_name_len, 1);
+                                       ZVAL_ZSTRL(&final_name, var_name, 
var_name_len, key_type, 1);
                                }
                                break;
                }
 
+               if (UG(unicode) && Z_TYPE(final_name) == IS_STRING) {
+                       convert_to_unicode(&final_name);
+               } else if (!UG(unicode) && Z_TYPE(final_name) == IS_UNICODE) {
+                       convert_to_string(&final_name);
+               }
+
                if (Z_TYPE(final_name) != IS_NULL) {
                        if (extract_refs) {
                                zval **orig_var;

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

Reply via email to