]> granicus.if.org Git - php/commitdiff
- MFH: Fix a bug that mbstring.internal_encoding doesn't take effect within
authorMoriyoshi Koizumi <moriyoshi@php.net>
Sun, 15 Mar 2009 20:44:17 +0000 (20:44 +0000)
committerMoriyoshi Koizumi <moriyoshi@php.net>
Sun, 15 Mar 2009 20:44:17 +0000 (20:44 +0000)
  the request encoding converter.

ext/mbstring/mb_gpc.c
ext/mbstring/mbstring.c
ext/mbstring/mbstring.h

index e67b717696ba9f987d02d9948f767980d0179da9..0fe465a07823fc448853aade1879599fc7c7dcbd 100644 (file)
@@ -59,6 +59,11 @@ MBSTRING_API SAPI_TREAT_DATA_FUNC(mbstr_treat_data)
        enum mbfl_no_encoding detected;
        php_mb_encoding_handler_info_t info;
 
+       {
+               char *value = zend_ini_string("mbstring.internal_encoding", sizeof("mbstring.internal_encoding"), 0);
+               _php_mb_ini_mbstring_internal_encoding_set(value, value ? strlen(value): 0 TSRMLS_CC);
+       }
+
        if (!MBSTRG(encoding_translation)) {
                php_default_treat_data(arg, str, destArray TSRMLS_CC);
                return;
index ec3b1d0690bf275eb138bab9e0a1153557cc93ea..6dae29cee633b4b2d627529a504dcee4af17e340 100644 (file)
@@ -656,7 +656,7 @@ static PHP_INI_MH(OnUpdate_mbstring_http_output)
 /* }}} */
 
 /* {{{ static _php_mb_ini_mbstring_internal_encoding_set */
-static int _php_mb_ini_mbstring_internal_encoding_set(const char *new_value, uint new_value_length TSRMLS_DC)
+int _php_mb_ini_mbstring_internal_encoding_set(const char *new_value, uint new_value_length TSRMLS_DC)
 {
        enum mbfl_no_encoding no_encoding;
        const char *enc_name = NULL;
@@ -826,7 +826,6 @@ static PHP_INI_MH(OnUpdate_mbstring_encoding_translation)
        if (MBSTRG(encoding_translation)) {
                sapi_unregister_post_entry(php_post_entries TSRMLS_CC);
                sapi_register_post_entries(mbstr_post_entries TSRMLS_CC);
-               sapi_register_treat_data(mbstr_treat_data);
        } else {
                sapi_unregister_post_entry(mbstr_post_entries TSRMLS_CC);
                sapi_register_post_entries(php_post_entries TSRMLS_CC);
@@ -927,9 +926,12 @@ PHP_MINIT_FUNCTION(mbstring)
 
        REGISTER_INI_ENTRIES();
 
+       /* This is a global handler. Should not be set in a per-request handler. */
+       sapi_register_treat_data(mbstr_treat_data);
+
+       /* Post handlers are stored in the thread-local context. */
        if (MBSTRG(encoding_translation)) {
                sapi_register_post_entries(mbstr_post_entries TSRMLS_CC);
-               sapi_register_treat_data(mbstr_treat_data);
        }
 
        REGISTER_LONG_CONSTANT("MB_OVERLOAD_MAIL", MB_OVERLOAD_MAIL, CONST_CS | CONST_PERSISTENT);
@@ -968,11 +970,6 @@ PHP_RINIT_FUNCTION(mbstring)
        zend_function *func, *orig;
        const struct mb_overload_def *p;
 
-       {
-               char *value = zend_ini_string("mbstring.internal_encoding", sizeof("mbstring.internal_encoding"), 0);
-               _php_mb_ini_mbstring_internal_encoding_set(value, value ? strlen(value): 0 TSRMLS_CC);
-       }
-
        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);
index b56b6af47fa6d3f8443b4bc4c89abb5b29651e16..4258ddb2160044a9bc37a5b5b8e99a3651c289b3 100644 (file)
@@ -159,6 +159,9 @@ MBSTRING_API int php_mb_gpc_encoding_detector(char **arg_string, int *arg_length
 
 MBSTRING_API int php_mb_stripos(int mode, char *old_haystack, int old_haystack_len, char *old_needle, int old_needle_len, long offset, char *from_encoding TSRMLS_DC);
 
+/* internal use only */
+int _php_mb_ini_mbstring_internal_encoding_set(const char *new_value, uint new_value_length TSRMLS_DC);
+
 ZEND_BEGIN_MODULE_GLOBALS(mbstring)
        enum mbfl_no_language language;
        enum mbfl_no_encoding internal_encoding;