]> granicus.if.org Git - php/commitdiff
- MFH: Fixed bug #45691 (Some per-dir or runtime settings may leak into other requests).
authorMoriyoshi Koizumi <moriyoshi@php.net>
Sat, 2 Aug 2008 20:49:48 +0000 (20:49 +0000)
committerMoriyoshi Koizumi <moriyoshi@php.net>
Sat, 2 Aug 2008 20:49:48 +0000 (20:49 +0000)
NEWS
ext/mbstring/mbstring.c
ext/mbstring/mbstring.h

diff --git a/NEWS b/NEWS
index 95118e96745e5290fa0d64e09ecd126a7c57faba..bc8b8d3e78e97e76b92754f20182eccd72dcb771 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -14,6 +14,8 @@ PHP                                                                        NEWS
 - Fixed a regression when using strip_tags() and < is within an attribute.
   (Scott)
 
+- Fixed bug #45691 (Some per-dir or runtime settings may leak into other
+  requests). (Moriyoshi)
 - Fixed bug #45568 (ISAPI doesn't properly clear auth_digest in header).
   (Patch by: navara at emclient dot com)
 - Fixed bug #45556 (Return value from callback isn't freed). (Felipe)
index deff1e0e3e2df0e1d5f1e98e120dea23111e6936..6d1854016c20d53e69ac378c7e38d753dd95ea0f 100644 (file)
@@ -89,7 +89,7 @@ static PHP_GSHUTDOWN_FUNCTION(mbstring);
 /* {{{ php_mb_default_identify_list */
 typedef struct _php_mb_nls_ident_list {
        enum mbfl_no_language lang;
-       enum mbfl_no_encoding* list;
+       const enum mbfl_no_encoding* list;
        int list_size;
 } php_mb_nls_ident_list;
 
@@ -560,7 +560,7 @@ static int php_mb_nls_get_default_detect_order_list(enum mbfl_no_language lang,
 
        for (i = 0; i < sizeof(php_mb_default_identify_list) / sizeof(php_mb_default_identify_list[0]); i++) {
                if (php_mb_default_identify_list[i].lang == lang) {
-                       *plist = php_mb_default_identify_list[i].list;
+                       *plist = (enum mbfl_no_encoding *)php_mb_default_identify_list[i].list;
                        *plist_size = php_mb_default_identify_list[i].list_size;
                        return 1;
                }
@@ -576,6 +576,7 @@ static PHP_INI_MH(OnUpdate_mbstring_language)
 
        no_language = mbfl_name2no_language(new_value);
        if (no_language == mbfl_no_language_invalid) {
+               MBSTRG(language) = mbfl_no_language_neutral;
                return FAILURE;
        }
        MBSTRG(language) = no_language;
@@ -591,12 +592,16 @@ static PHP_INI_MH(OnUpdate_mbstring_detect_order)
        int size;
 
        if (php_mb_parse_encoding_list(new_value, new_value_length, &list, &size, 1 TSRMLS_CC)) {
-               if (MBSTRG(detect_order_list) != NULL) {
+               if (MBSTRG(detect_order_list)) {
                        free(MBSTRG(detect_order_list));
                }
                MBSTRG(detect_order_list) = list;
                MBSTRG(detect_order_list_size) = size;
        } else {
+               if (MBSTRG(detect_order_list)) {
+                       free(MBSTRG(detect_order_list));
+                       MBSTRG(detect_order_list) = NULL;
+               }
                return FAILURE;
        }
 
@@ -611,12 +616,17 @@ static PHP_INI_MH(OnUpdate_mbstring_http_input)
        int size;
 
        if (php_mb_parse_encoding_list(new_value, new_value_length, &list, &size, 1 TSRMLS_CC)) {
-               if (MBSTRG(http_input_list) != NULL) {
+               if (MBSTRG(http_input_list)) {
                        free(MBSTRG(http_input_list));
                }
                MBSTRG(http_input_list) = list;
                MBSTRG(http_input_list_size) = size;
        } else {
+               if (MBSTRG(http_input_list)) {
+                       free(MBSTRG(http_input_list));
+                       MBSTRG(http_input_list) = NULL;
+               }
+               MBSTRG(http_input_list_size) = 0;
                return FAILURE;
        }
 
@@ -634,6 +644,8 @@ static PHP_INI_MH(OnUpdate_mbstring_http_output)
                MBSTRG(http_output_encoding) = no_encoding;
                MBSTRG(current_http_output_encoding) = no_encoding;
        } else {
+               MBSTRG(http_output_encoding) = mbfl_no_encoding_pass;
+               MBSTRG(current_http_output_encoding) = mbfl_no_encoding_pass;
                if (new_value != NULL && new_value_length > 0) {
                        return FAILURE;
                }
@@ -647,32 +659,74 @@ static PHP_INI_MH(OnUpdate_mbstring_http_output)
 static PHP_INI_MH(OnUpdate_mbstring_internal_encoding)
 {
        enum mbfl_no_encoding no_encoding;
-       if (new_value == NULL) {
-               return SUCCESS;
-       }
+       const char *enc_name = NULL;
+       uint enc_name_len = 0;
 
-       no_encoding = mbfl_name2no_encoding(new_value);
+       no_encoding = new_value ? mbfl_name2no_encoding(new_value):
+                               mbfl_no_encoding_invalid;
        if (no_encoding != mbfl_no_encoding_invalid) {
-               MBSTRG(internal_encoding) = no_encoding;
-               MBSTRG(current_internal_encoding) = no_encoding;
+               enc_name = new_value;
+               enc_name_len = new_value_length;
+       } else {
+               switch (MBSTRG(language)) {
+                       case mbfl_no_language_uni:
+                               enc_name = "UTF-8";
+                               enc_name_len = sizeof("UTF-8") - 1;
+                               break;
+                       case mbfl_no_language_japanese:
+                               enc_name = "EUC-JP";
+                               enc_name_len = sizeof("EUC-JP") - 1;
+                               break;
+                       case mbfl_no_language_korean:
+                               enc_name = "EUC-KR";
+                               enc_name_len = sizeof("EUC-KR") - 1;
+                               break;
+                       case mbfl_no_language_simplified_chinese:
+                               enc_name = "EUC-CN";
+                               enc_name_len = sizeof("EUC-CN") - 1;
+                               break;
+                       case mbfl_no_language_traditional_chinese:
+                               enc_name = "EUC-TW";
+                               enc_name_len = sizeof("EUC-TW") - 1;
+                               break;
+                       case mbfl_no_language_russian:
+                               enc_name = "KOI8-R";
+                               enc_name_len = sizeof("KOI8-R") - 1;
+                               break;
+                       case mbfl_no_language_german:
+                               enc_name = "ISO-8859-15";
+                               enc_name_len = sizeof("ISO-8859-15") - 1;
+                               break;
+                       case mbfl_no_language_armenian:
+                               enc_name = "ArmSCII-8";
+                               enc_name_len = sizeof("ArmSCII-8") - 1;
+                               break;
+                       case mbfl_no_language_turkish:
+                               enc_name = "ISO-8859-9";
+                               enc_name_len = sizeof("ISO-8859-9") - 1;
+                               break;
+                       default:
+                               enc_name = "ISO-8859-1";
+                               enc_name_len = sizeof("ISO-8859-1") - 1;
+                               break;
+               }
+               no_encoding = mbfl_name2no_encoding(enc_name);
+       }
+       MBSTRG(internal_encoding) = no_encoding;
+       MBSTRG(current_internal_encoding) = no_encoding;
 #if HAVE_MBREGEX
-               {
-                       OnigEncoding mbctype;
-                       mbctype = php_mb_regex_name2mbctype(new_value);
-                       if (mbctype == ONIG_ENCODING_UNDEF) {
-                               mbctype = ONIG_ENCODING_EUC_JP;
-                       }
-                       MBSTRG(current_mbctype) = MBSTRG(default_mbctype) = mbctype;
+       {
+               OnigEncoding mbctype;
+               mbctype = php_mb_regex_name2mbctype(enc_name);
+               if (mbctype == ONIG_ENCODING_UNDEF) {
+                       mbctype = ONIG_ENCODING_EUC_JP;
                }
+               MBSTRG(current_mbctype) = MBSTRG(default_mbctype) = mbctype;
+       }
 #endif
 #ifdef ZEND_MULTIBYTE
-               zend_multibyte_set_internal_encoding(new_value, new_value_length TSRMLS_CC);
+       zend_multibyte_set_internal_encoding((char *)enc_name, enc_name_len TSRMLS_CC);
 #endif /* ZEND_MULTIBYTE */
-       } else {
-               if (new_value != NULL && new_value_length > 0) {
-                       return FAILURE;
-               }
-       }
 
        return SUCCESS;
 }
@@ -691,6 +745,11 @@ static PHP_INI_MH(OnUpdate_mbstring_script_encoding)
                MBSTRG(script_encoding_list) = list;
                MBSTRG(script_encoding_list_size) = size;
        } else {
+               if (MBSTRG(script_encoding_list) != NULL) {
+                       free(MBSTRG(script_encoding_list));
+               }
+               MBSTRG(script_encoding_list) = NULL;
+               MBSTRG(script_encoding_list_size) = 0;
                return FAILURE;
        }
 
@@ -756,7 +815,7 @@ static PHP_INI_MH(OnUpdate_mbstring_encoding_translation)
 
 /* {{{ php.ini directive registration */
 PHP_INI_BEGIN()
-        PHP_INI_ENTRY("mbstring.language", "neutral", PHP_INI_SYSTEM | PHP_INI_PERDIR, OnUpdate_mbstring_language)
+        PHP_INI_ENTRY("mbstring.language", "neutral", PHP_INI_ALL, OnUpdate_mbstring_language)
         PHP_INI_ENTRY("mbstring.detect_order", NULL, PHP_INI_ALL, OnUpdate_mbstring_detect_order)
         PHP_INI_ENTRY("mbstring.http_input", "pass", PHP_INI_ALL, OnUpdate_mbstring_http_input)
         PHP_INI_ENTRY("mbstring.http_output", "pass", PHP_INI_ALL, OnUpdate_mbstring_http_output)
@@ -781,7 +840,6 @@ PHP_INI_END()
 static PHP_GINIT_FUNCTION(mbstring)
 {
        mbstring_globals->language = mbfl_no_language_uni;
-       mbstring_globals->current_language = mbstring_globals->language;
        mbstring_globals->internal_encoding = mbfl_no_encoding_invalid;
        mbstring_globals->current_internal_encoding = mbstring_globals->internal_encoding;
 #ifdef ZEND_MULTIBYTE
@@ -887,53 +945,9 @@ PHP_RINIT_FUNCTION(mbstring)
        zend_function *func, *orig;
        const struct mb_overload_def *p;
 
-       MBSTRG(current_language) = MBSTRG(language);
        php_mb_nls_get_default_detect_order_list(MBSTRG(language), 
         &MBSTRG(default_detect_order_list), &MBSTRG(default_detect_order_list_size));
 
-       if (MBSTRG(internal_encoding) == mbfl_no_encoding_invalid) {
-               char *default_enc = NULL;
-               switch (MBSTRG(current_language)) {
-                       case mbfl_no_language_uni:
-                               default_enc = "UTF-8";
-                               break;
-                       case mbfl_no_language_japanese:
-                               default_enc = "EUC-JP";
-                               break;
-                       case mbfl_no_language_korean:
-                               default_enc = "EUC-KR";
-                               break;
-                       case mbfl_no_language_simplified_chinese:
-                               default_enc = "EUC-CN";
-                               break;
-                       case mbfl_no_language_traditional_chinese:
-                               default_enc = "EUC-TW";
-                               break;
-                       case mbfl_no_language_russian:
-                               default_enc = "KOI8-R";
-                               break;
-                       case mbfl_no_language_german:
-                               default_enc = "ISO-8859-15";
-                               break;
-                       case mbfl_no_language_armenian:
-                               default_enc = "ArmSCII-8";
-                               break;
-                       case mbfl_no_language_turkish:
-                               default_enc = "ISO-8859-9";
-                               break;
-                       case mbfl_no_language_english:
-                       default:
-                               default_enc = "ISO-8859-1";
-                               break;
-               }
-               if (default_enc) {
-                       zend_alter_ini_entry("mbstring.internal_encoding",
-                                            sizeof("mbstring.internal_encoding"),
-                                            default_enc, strlen(default_enc),
-                                            PHP_INI_PERDIR, PHP_INI_STAGE_RUNTIME); 
-               }
-       }
-
        MBSTRG(current_internal_encoding) = MBSTRG(internal_encoding);
        MBSTRG(current_http_output_encoding) = MBSTRG(http_output_encoding);
        MBSTRG(current_filter_illegal_mode) = MBSTRG(filter_illegal_mode);
@@ -1084,22 +1098,20 @@ PHP_FUNCTION(mb_language)
 {
        char *name = NULL;
        int name_len = 0;
-       enum mbfl_no_language no_language;
 
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &name, &name_len) == FAILURE) {
                return;
        }
        if (name == NULL) {
-               RETURN_STRING((char *)mbfl_no_language2name(MBSTRG(current_language)), 1);
+               RETVAL_STRING((char *)mbfl_no_language2name(MBSTRG(language)), 1);
        } else {
-               no_language = mbfl_name2no_language(name);
-               if (no_language == mbfl_no_language_invalid) {
+               if (FAILURE == zend_alter_ini_entry(
+                               "mbstring.language", sizeof("mbstring.language"),
+                               name, name_len, PHP_INI_USER, PHP_INI_STAGE_RUNTIME)) {
                        php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown language \"%s\"", name);
-                       RETURN_FALSE;
+                       RETVAL_FALSE;
                } else {
-                       php_mb_nls_get_default_detect_order_list(no_language, &MBSTRG(default_detect_order_list), &MBSTRG(default_detect_order_list_size));
-                       MBSTRG(current_language) = no_language;
-                       RETURN_TRUE;
+                       RETVAL_TRUE;
                }
        }
 }
@@ -1441,10 +1453,10 @@ PHP_FUNCTION(mb_parse_str)
        info.force_register_globals = (track_vars_array == NULL);
        info.report_errors          = 1;
        info.to_encoding            = MBSTRG(current_internal_encoding);
-       info.to_language            = MBSTRG(current_language);
+       info.to_language            = MBSTRG(language);
        info.from_encodings         = MBSTRG(http_input_list);
        info.num_from_encodings     = MBSTRG(http_input_list_size); 
-       info.from_language          = MBSTRG(current_language);
+       info.from_language          = MBSTRG(language);
 
        detected = _php_mb_encoding_handler_ex(&info, track_vars_array, encstr TSRMLS_CC);
 
@@ -1532,7 +1544,7 @@ PHP_FUNCTION(mb_output_handler)
  
        /* feed the string */
        mbfl_string_init(&string);
-       string.no_language = MBSTRG(current_language);
+       string.no_language = MBSTRG(language);
        string.no_encoding = MBSTRG(current_internal_encoding);
        string.val = (unsigned char *)arg_string;
        string.len = arg_string_len;
@@ -1568,7 +1580,7 @@ PHP_FUNCTION(mb_strlen)
                RETURN_FALSE;
        }
 
-       string.no_language = MBSTRG(current_language);
+       string.no_language = MBSTRG(language);
        if (enc_name == NULL) {
                string.no_encoding = MBSTRG(current_internal_encoding);
        } else {
@@ -1600,9 +1612,9 @@ PHP_FUNCTION(mb_strpos)
        
        mbfl_string_init(&haystack);
        mbfl_string_init(&needle);
-       haystack.no_language = MBSTRG(current_language);
+       haystack.no_language = MBSTRG(language);
        haystack.no_encoding = MBSTRG(current_internal_encoding);
-       needle.no_language = MBSTRG(current_language);
+       needle.no_language = MBSTRG(language);
        needle.no_encoding = MBSTRG(current_internal_encoding);
        offset = 0;
 
@@ -1667,9 +1679,9 @@ PHP_FUNCTION(mb_strrpos)
 
        mbfl_string_init(&haystack);
        mbfl_string_init(&needle);
-       haystack.no_language = MBSTRG(current_language);
+       haystack.no_language = MBSTRG(language);
        haystack.no_encoding = MBSTRG(current_internal_encoding);
-       needle.no_language = MBSTRG(current_language);
+       needle.no_language = MBSTRG(language);
        needle.no_encoding = MBSTRG(current_internal_encoding);
 
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|Zs", (char **)&haystack.val, &haystack.len, (char **)&needle.val, &needle.len, &zoffset, &enc_name, &enc_name_len) == FAILURE) {
@@ -1815,9 +1827,9 @@ PHP_FUNCTION(mb_strstr)
 
        mbfl_string_init(&haystack);
        mbfl_string_init(&needle);
-       haystack.no_language = MBSTRG(current_language);
+       haystack.no_language = MBSTRG(language);
        haystack.no_encoding = MBSTRG(current_internal_encoding);
-       needle.no_language = MBSTRG(current_language);
+       needle.no_language = MBSTRG(language);
        needle.no_encoding = MBSTRG(current_internal_encoding);
 
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|bs", (char **)&haystack.val, &haystack.len, (char **)&needle.val, &needle.len, &part, &enc_name, &enc_name_len) == FAILURE) {
@@ -1873,9 +1885,9 @@ PHP_FUNCTION(mb_strrchr)
 
        mbfl_string_init(&haystack);
        mbfl_string_init(&needle);
-       haystack.no_language = MBSTRG(current_language);
+       haystack.no_language = MBSTRG(language);
        haystack.no_encoding = MBSTRG(current_internal_encoding);
-       needle.no_language = MBSTRG(current_language);
+       needle.no_language = MBSTRG(language);
        needle.no_encoding = MBSTRG(current_internal_encoding);
 
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|bs", (char **)&haystack.val, &haystack.len, (char **)&needle.val, &needle.len, &part, &enc_name, &enc_name_len) == FAILURE) {
@@ -1931,9 +1943,9 @@ PHP_FUNCTION(mb_stristr)
        char *from_encoding = (char*)mbfl_no2preferred_mime_name(MBSTRG(current_internal_encoding));
        mbfl_string_init(&haystack);
        mbfl_string_init(&needle);
-       haystack.no_language = MBSTRG(current_language);
+       haystack.no_language = MBSTRG(language);
        haystack.no_encoding = MBSTRG(current_internal_encoding);
-       needle.no_language = MBSTRG(current_language);
+       needle.no_language = MBSTRG(language);
        needle.no_encoding = MBSTRG(current_internal_encoding);
 
 
@@ -1989,9 +2001,9 @@ PHP_FUNCTION(mb_strrichr)
        char *from_encoding = (char*)mbfl_no2preferred_mime_name(MBSTRG(current_internal_encoding));
        mbfl_string_init(&haystack);
        mbfl_string_init(&needle);
-       haystack.no_language = MBSTRG(current_language);
+       haystack.no_language = MBSTRG(language);
        haystack.no_encoding = MBSTRG(current_internal_encoding);
-       needle.no_language = MBSTRG(current_language);
+       needle.no_language = MBSTRG(language);
        needle.no_encoding = MBSTRG(current_internal_encoding);
 
 
@@ -2043,9 +2055,9 @@ PHP_FUNCTION(mb_substr_count)
 
        mbfl_string_init(&haystack);
        mbfl_string_init(&needle);
-       haystack.no_language = MBSTRG(current_language);
+       haystack.no_language = MBSTRG(language);
        haystack.no_encoding = MBSTRG(current_internal_encoding);
-       needle.no_language = MBSTRG(current_language);
+       needle.no_language = MBSTRG(language);
        needle.no_encoding = MBSTRG(current_internal_encoding);
 
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|s", (char **)&haystack.val, &haystack.len, (char **)&needle.val, &needle.len, &enc_name, &enc_name_len) == FAILURE) {
@@ -2083,7 +2095,7 @@ PHP_FUNCTION(mb_substr)
        mbfl_string string, result, *ret;
 
        mbfl_string_init(&string);
-       string.no_language = MBSTRG(current_language);
+       string.no_language = MBSTRG(language);
        string.no_encoding = MBSTRG(current_internal_encoding);
 
        argc = ZEND_NUM_ARGS();
@@ -2175,7 +2187,7 @@ PHP_FUNCTION(mb_strcut)
        mbfl_string string, result, *ret;
 
        mbfl_string_init(&string);
-       string.no_language = MBSTRG(current_language);
+       string.no_language = MBSTRG(language);
        string.no_encoding = MBSTRG(current_internal_encoding);
 
        argc = ZEND_NUM_ARGS();
@@ -2265,7 +2277,7 @@ PHP_FUNCTION(mb_strwidth)
 
        mbfl_string_init(&string);
 
-       string.no_language = MBSTRG(current_language);
+       string.no_language = MBSTRG(language);
        string.no_encoding = MBSTRG(current_internal_encoding);
 
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s", (char **)&string.val, &string.len, &enc_name, &enc_name_len) == FAILURE) {
@@ -2299,9 +2311,9 @@ PHP_FUNCTION(mb_strimwidth)
 
        mbfl_string_init(&string);
        mbfl_string_init(&marker);
-       string.no_language = MBSTRG(current_language);
+       string.no_language = MBSTRG(language);
        string.no_encoding = MBSTRG(current_internal_encoding);
-       marker.no_language = MBSTRG(current_language);
+       marker.no_language = MBSTRG(language);
        marker.no_encoding = MBSTRG(current_internal_encoding);
        marker.val = NULL;
        marker.len = 0;
@@ -2397,7 +2409,7 @@ MBSTRING_API char * php_mb_convert_encoding(char *input, size_t length, char *_t
        mbfl_string_init(&result);
        from_encoding = MBSTRG(current_internal_encoding);
        string.no_encoding = from_encoding;
-       string.no_language = MBSTRG(current_language);
+       string.no_language = MBSTRG(language);
        string.val = (unsigned char *)input;
        string.len = length;
 
@@ -2667,7 +2679,7 @@ PHP_FUNCTION(mb_detect_encoding)
 
        convert_to_string_ex(arg_str);
        mbfl_string_init(&string);
-       string.no_language = MBSTRG(current_language);
+       string.no_language = MBSTRG(language);
        string.val = (unsigned char *)Z_STRVAL_PP(arg_str);
        string.len = Z_STRLEN_PP(arg_str);
        ret = mbfl_identify_encoding_name(&string, elist, size, strict);
@@ -2830,7 +2842,7 @@ PHP_FUNCTION(mb_encode_mimeheader)
        long indent = 0;
 
        mbfl_string_init(&string);
-       string.no_language = MBSTRG(current_language);
+       string.no_language = MBSTRG(language);
        string.no_encoding = MBSTRG(current_internal_encoding);
 
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|sssl", (char **)&string.val, &string.len, &charset_name, &charset_name_len, &trans_enc_name, &trans_enc_name_len, &linefeed, &linefeed_len, &indent) == FAILURE) {
@@ -2847,7 +2859,7 @@ PHP_FUNCTION(mb_encode_mimeheader)
                        RETURN_FALSE;
                }
        } else {
-               const mbfl_language *lang = mbfl_no2language(MBSTRG(current_language));
+               const mbfl_language *lang = mbfl_no2language(MBSTRG(language));
                if (lang != NULL) {
                        charset = lang->mail_charset;
                        transenc = lang->mail_header_encoding;
@@ -2879,7 +2891,7 @@ PHP_FUNCTION(mb_decode_mimeheader)
        mbfl_string string, result, *ret;
 
        mbfl_string_init(&string);
-       string.no_language = MBSTRG(current_language);
+       string.no_language = MBSTRG(language);
        string.no_encoding = MBSTRG(current_internal_encoding);
 
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", (char **)&string.val, &string.len) == FAILURE) {
@@ -2908,7 +2920,7 @@ PHP_FUNCTION(mb_convert_kana)
        int encname_len;
 
        mbfl_string_init(&string);
-       string.no_language = MBSTRG(current_language);
+       string.no_language = MBSTRG(language);
        string.no_encoding = MBSTRG(current_internal_encoding);
 
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|ss", (char **)&string.val, &string.len, &optstr, &optstr_len, &encname, &encname_len) == FAILURE) {
@@ -3040,7 +3052,7 @@ PHP_FUNCTION(mb_convert_variables)
        mbfl_string_init(&result);
        from_encoding = MBSTRG(current_internal_encoding);
        string.no_encoding = from_encoding;
-       string.no_language = MBSTRG(current_language);
+       string.no_language = MBSTRG(language);
 
        /* pre-conversion encoding */
        elist = NULL;
@@ -3244,7 +3256,7 @@ php_mb_numericentity_exec(INTERNAL_FUNCTION_PARAMETERS, int type)
 
        convert_to_string_ex(arg1);
        mbfl_string_init(&string);
-       string.no_language = MBSTRG(current_language);
+       string.no_language = MBSTRG(language);
        string.no_encoding = MBSTRG(current_internal_encoding);
        string.val = (unsigned char *)Z_STRVAL_PP(arg1);
        string.len = Z_STRLEN_PP(arg1);
@@ -3583,7 +3595,7 @@ PHP_FUNCTION(mb_send_mail)
        tran_cs = mbfl_no_encoding_utf8;
        head_enc = mbfl_no_encoding_base64;
        body_enc = mbfl_no_encoding_base64;
-       lang = mbfl_no2language(MBSTRG(current_language));
+       lang = mbfl_no2language(MBSTRG(language));
        if (lang != NULL) {
                tran_cs = lang->mail_charset;
                head_enc = lang->mail_header_encoding;
@@ -3701,7 +3713,7 @@ PHP_FUNCTION(mb_send_mail)
 
        /* Subject: */
        if (subject != NULL && subject_len >= 0) {
-               orig_str.no_language = MBSTRG(current_language);
+               orig_str.no_language = MBSTRG(language);
                orig_str.val = (unsigned char *)subject;
                orig_str.len = subject_len;
                orig_str.no_encoding = MBSTRG(current_internal_encoding);
@@ -3720,7 +3732,7 @@ PHP_FUNCTION(mb_send_mail)
 
        /* message body */
        if (message != NULL) {
-               orig_str.no_language = MBSTRG(current_language);
+               orig_str.no_language = MBSTRG(language);
                orig_str.val = message;
                orig_str.len = message_len;
                orig_str.no_encoding = MBSTRG(current_internal_encoding);
@@ -3837,7 +3849,7 @@ PHP_FUNCTION(mb_get_info)
        char *name;
        const struct mb_overload_def *over_func;
        zval *row1, *row2;
-       const mbfl_language *lang = mbfl_no2language(MBSTRG(current_language));
+       const mbfl_language *lang = mbfl_no2language(MBSTRG(language));
        enum mbfl_no_encoding *entry;
 #ifdef ZEND_MULTIBYTE
        zval *row3;
@@ -3890,7 +3902,7 @@ PHP_FUNCTION(mb_get_info)
                } else {
                        add_assoc_string(return_value, "encoding_translation", "Off", 1);
                }
-               if ((name = (char *)mbfl_no_language2name(MBSTRG(current_language))) != NULL) {
+               if ((name = (char *)mbfl_no_language2name(MBSTRG(language))) != NULL) {
                        add_assoc_string(return_value, "language", name, 1);
                }               
                n = MBSTRG(current_detect_order_list_size);
@@ -3985,7 +3997,7 @@ PHP_FUNCTION(mb_get_info)
                        RETVAL_STRING("Off", 1);
                }
        } else if (!strcasecmp("language", typ)) {
-               if ((name = (char *)mbfl_no_language2name(MBSTRG(current_language))) != NULL) {
+               if ((name = (char *)mbfl_no_language2name(MBSTRG(language))) != NULL) {
                        RETVAL_STRING(name, 1);
                }               
        } else if (!strcasecmp("detect_order", typ)) {
@@ -4083,7 +4095,7 @@ PHP_FUNCTION(mb_check_encoding)
        mbfl_string_init(&string);
        mbfl_string_init(&result);
        string.no_encoding = no_encoding;
-       string.no_language = MBSTRG(current_language);
+       string.no_language = MBSTRG(language);
 
        string.val = (unsigned char *)var;
        string.len = var_len;
@@ -4245,7 +4257,7 @@ MBSTRING_API int php_mb_gpc_encoding_converter(char **str, int *len, int num, co
        mbfl_string_init(&string);
        mbfl_string_init(&result);
        string.no_encoding = from_encoding;
-       string.no_language = MBSTRG(current_language);
+       string.no_language = MBSTRG(language);
 
        for (i=0; i<num; i++){
                string.val = (char*)str[i];
@@ -4326,7 +4338,7 @@ MBSTRING_API int php_mb_gpc_encoding_detector(char **arg_string, int *arg_length
        }
 
        mbfl_string_init(&string);
-       string.no_language = MBSTRG(current_language);
+       string.no_language = MBSTRG(language);
 
        identd = mbfl_encoding_detector_new(elist, size, MBSTRG(strict_detection));
 
@@ -4364,9 +4376,9 @@ MBSTRING_API int php_mb_stripos(int mode, char *old_haystack, int old_haystack_l
 
        mbfl_string_init(&haystack);
        mbfl_string_init(&needle);
-       haystack.no_language = MBSTRG(current_language);
+       haystack.no_language = MBSTRG(language);
        haystack.no_encoding = MBSTRG(current_internal_encoding);
-       needle.no_language = MBSTRG(current_language);
+       needle.no_language = MBSTRG(language);
        needle.no_encoding = MBSTRG(current_internal_encoding);
 
        do {
@@ -4492,7 +4504,7 @@ char* php_mb_encoding_detector(const char *arg_string, int arg_length, char *arg
        }
 
        mbfl_string_init(&string);
-       string.no_language = MBSTRG(current_language);
+       string.no_language = MBSTRG(language);
        string.val = (char*)arg_string;
        string.len = arg_length;
        ret = mbfl_identify_encoding_name(&string, elist, size, 0);
@@ -4530,7 +4542,7 @@ int php_mb_encoding_converter(char **to, int *to_length, const char *from,
        mbfl_string_init(&string);
        mbfl_string_init(&result);
        string.no_encoding = from_encoding;
-       string.no_language = MBSTRG(current_language);
+       string.no_language = MBSTRG(language);
        string.val = (char*)from;
        string.len = from_length;
 
@@ -4565,7 +4577,7 @@ int php_mb_oddlen(const char *string, int length, const char *encoding TSRMLS_DC
        mbfl_string mb_string;
 
        mbfl_string_init(&mb_string);
-       mb_string.no_language = MBSTRG(current_language);
+       mb_string.no_language = MBSTRG(language);
        mb_string.no_encoding = mbfl_name2no_encoding(encoding);
        mb_string.val = (char*)string;
        mb_string.len = length;
index 63afaf50942487887b29f0f9443e8065049e1a9c..80e7a1d0c323ad36f09a60b239ccf934c6e66f4c 100644 (file)
@@ -163,7 +163,6 @@ MBSTRING_API int php_mb_stripos(int mode, char *old_haystack, int old_haystack_l
 
 ZEND_BEGIN_MODULE_GLOBALS(mbstring)
        enum mbfl_no_language language;
-       enum mbfl_no_language current_language;
        enum mbfl_no_encoding internal_encoding;
        enum mbfl_no_encoding current_internal_encoding;
 #ifdef ZEND_MULTIBYTE