From: Andrei Zmievski Date: Tue, 5 Dec 2006 23:17:06 +0000 (+0000) Subject: extract() should convert keys using runtime encoding. X-Git-Tag: RELEASE_1_0_0RC1~801 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a775c82161bc49597f0b2adf0243023cd9195400;p=php extract() should convert keys using runtime encoding. --- diff --git a/ext/standard/array.c b/ext/standard/array.c index d01bdc0437..95ecc332f8 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -1427,7 +1427,7 @@ PHP_FUNCTION(extract) 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 @@ PHP_FUNCTION(extract) 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 @@ PHP_FUNCTION(extract) 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;