moriyoshi               Mon Feb 21 10:14:02 2005 EDT

  Modified files:              
    /php-src/ext/mbstring       mb_gpc.c mbstring.c 
    /php-src/main       SAPI.c SAPI.h main.c php_content_types.c 
                        php_content_types.h 
  Log:
  - Fix bug #28568 (known_post_content_types is not thread safe).
  # What is eventually necessiated is entire SAPI redesign, I think.
  
  
http://cvs.php.net/diff.php/php-src/ext/mbstring/mb_gpc.c?r1=1.13&r2=1.14&ty=u
Index: php-src/ext/mbstring/mb_gpc.c
diff -u php-src/ext/mbstring/mb_gpc.c:1.13 php-src/ext/mbstring/mb_gpc.c:1.14
--- php-src/ext/mbstring/mb_gpc.c:1.13  Thu Feb 10 09:11:06 2005
+++ php-src/ext/mbstring/mb_gpc.c       Mon Feb 21 10:14:01 2005
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: mb_gpc.c,v 1.13 2005/02/10 14:11:06 iliaa Exp $ */
+/* $Id: mb_gpc.c,v 1.14 2005/02/21 15:14:01 moriyoshi Exp $ */
 
 /* {{{ includes */
 #ifdef HAVE_CONFIG_H
@@ -48,49 +48,22 @@
 
 ZEND_EXTERN_MODULE_GLOBALS(mbstring)
 
-/* {{{ static sapi_post_entry mbstr_post_entries[] */
-static sapi_post_entry mbstr_post_entries[] = {
-       { DEFAULT_POST_CONTENT_TYPE, sizeof(DEFAULT_POST_CONTENT_TYPE)-1, 
sapi_read_standard_form_data, php_mb_post_handler },
-       { MULTIPART_CONTENT_TYPE,    sizeof(MULTIPART_CONTENT_TYPE)-1,    NULL, 
                        rfc1867_post_handler },
-       { NULL, 0, NULL, NULL }
-};
-/* }}} */
-
-/* {{{ static sapi_post_entry php_post_entries[] */
-static sapi_post_entry php_post_entries[] = {
-       { DEFAULT_POST_CONTENT_TYPE, sizeof(DEFAULT_POST_CONTENT_TYPE)-1, 
sapi_read_standard_form_data, php_std_post_handler },
-       { MULTIPART_CONTENT_TYPE,    sizeof(MULTIPART_CONTENT_TYPE)-1,    NULL, 
                        rfc1867_post_handler },
-       { NULL, 0, NULL, NULL }
-};
-/* }}} */
-
-/* {{{ int _php_mb_enable_encoding_translation(int flag) */
-int _php_mb_enable_encoding_translation(int flag)
-{
-       if (flag) {
-               sapi_unregister_post_entry(php_post_entries);
-               sapi_register_post_entries(mbstr_post_entries);
-               sapi_register_treat_data(mbstr_treat_data);                     
           
-       } else {
-               sapi_unregister_post_entry(mbstr_post_entries);
-               sapi_register_post_entries(php_post_entries);
-               sapi_register_treat_data(php_default_treat_data);               
                   
-       }
-       return SUCCESS;
-}
-/* }}} */ 
-
 /* {{{ MBSTRING_API SAPI_TREAT_DATA_FUNC(mbstr_treat_data)
  * http input processing */
 MBSTRING_API SAPI_TREAT_DATA_FUNC(mbstr_treat_data)
 {
        char *res = NULL, *separator=NULL;
        const char *c_var;
-       pval *array_ptr;
+       zval *array_ptr;
        int free_buffer=0;
        enum mbfl_no_encoding detected;
        php_mb_encoding_handler_info_t info;
 
+       if (!MBSTRG(encoding_translation)) {
+               php_default_treat_data(arg, str, destArray TSRMLS_CC);
+               return;
+       }
+
        switch (arg) {
                case PARSE_POST:
                case PARSE_GET:
http://cvs.php.net/diff.php/php-src/ext/mbstring/mbstring.c?r1=1.218&r2=1.219&ty=u
Index: php-src/ext/mbstring/mbstring.c
diff -u php-src/ext/mbstring/mbstring.c:1.218 
php-src/ext/mbstring/mbstring.c:1.219
--- php-src/ext/mbstring/mbstring.c:1.218       Mon Feb 21 02:57:07 2005
+++ php-src/ext/mbstring/mbstring.c     Mon Feb 21 10:14:01 2005
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: mbstring.c,v 1.218 2005/02/21 07:57:07 moriyoshi Exp $ */
+/* $Id: mbstring.c,v 1.219 2005/02/21 15:14:01 moriyoshi Exp $ */
 
 /*
  * PHP 4 Multibyte String module "mbstring"
@@ -227,6 +227,14 @@
 };
 /* }}} */
 
+/* {{{ static sapi_post_entry php_post_entries[] */
+static sapi_post_entry php_post_entries[] = {
+       { DEFAULT_POST_CONTENT_TYPE, sizeof(DEFAULT_POST_CONTENT_TYPE)-1, 
sapi_read_standard_form_data, php_std_post_handler },
+       { MULTIPART_CONTENT_TYPE,    sizeof(MULTIPART_CONTENT_TYPE)-1,    NULL, 
                        rfc1867_post_handler },
+       { NULL, 0, NULL, NULL }
+};
+/* }}} */
+
 ZEND_DECLARE_MODULE_GLOBALS(mbstring)
 
 #ifdef COMPILE_DL_MBSTRING
@@ -283,6 +291,14 @@
 };
 /* }}} */
 
+/* {{{ static sapi_post_entry mbstr_post_entries[] */
+static sapi_post_entry mbstr_post_entries[] = {
+       { DEFAULT_POST_CONTENT_TYPE, sizeof(DEFAULT_POST_CONTENT_TYPE)-1, 
sapi_read_standard_form_data, php_mb_post_handler },
+       { MULTIPART_CONTENT_TYPE,    sizeof(MULTIPART_CONTENT_TYPE)-1,    NULL, 
                        rfc1867_post_handler },
+       { NULL, 0, NULL, NULL }
+};
+/* }}} */
+
 /* {{{ static int php_mb_parse_encoding_list()
  *  Return 0 if input contains any illegal encoding, otherwise 1.
  *  Even if any illegal encoding is detected the result may contain a list 
@@ -680,10 +696,13 @@
 
        OnUpdateBool(entry, new_value, new_value_length, mh_arg1, mh_arg2, 
mh_arg3, stage TSRMLS_CC);
 
-       if (MBSTRG(encoding_translation)){
-               _php_mb_enable_encoding_translation(1);
+       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 {
-               _php_mb_enable_encoding_translation(0);
+               sapi_unregister_post_entry(mbstr_post_entries TSRMLS_CC);
+               sapi_register_post_entries(php_post_entries TSRMLS_CC);
        }
 
        return SUCCESS;
@@ -774,7 +793,8 @@
        REGISTER_INI_ENTRIES();
 
        if (MBSTRG(encoding_translation)) {
-               _php_mb_enable_encoding_translation(1);
+               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);
@@ -809,10 +829,6 @@
                free(MBSTRG(detect_order_list));
        }
 
-       if (MBSTRG(encoding_translation)) {
-               _php_mb_enable_encoding_translation(0);
-       }
-
 #if HAVE_MBREGEX
        PHP_MSHUTDOWN(mb_regex) (INIT_FUNC_ARGS_PASSTHRU);
 #endif
http://cvs.php.net/diff.php/php-src/main/SAPI.c?r1=1.192&r2=1.193&ty=u
Index: php-src/main/SAPI.c
diff -u php-src/main/SAPI.c:1.192 php-src/main/SAPI.c:1.193
--- php-src/main/SAPI.c:1.192   Sun Nov 28 08:32:29 2004
+++ php-src/main/SAPI.c Mon Feb 21 10:14:02 2005
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: SAPI.c,v 1.192 2004/11/28 13:32:29 sesser Exp $ */
+/* $Id: SAPI.c,v 1.193 2005/02/21 15:14:02 moriyoshi Exp $ */
 
 #include <ctype.h>
 #include <sys/stat.h>
@@ -51,8 +51,6 @@
 
 #include "php_content_types.h"
 
-static HashTable known_post_content_types;
-
 #ifdef ZTS
 SAPI_API int sapi_globals_id;
 #else
@@ -62,6 +60,13 @@
 static void sapi_globals_ctor(sapi_globals_struct *sapi_globals TSRMLS_DC)
 {
        memset(sapi_globals, 0, sizeof(*sapi_globals));
+       zend_hash_init_ex(&sapi_globals->known_post_content_types, 5,
+                       NULL, NULL, 1, 0);
+}
+
+static void sapi_globals_dtor(sapi_globals_struct *sapi_globals TSRMLS_DC)
+{
+       zend_hash_destroy(&sapi_globals->known_post_content_types);
 }
 
 /* True globals (no need for thread safety) */
@@ -71,11 +76,11 @@
 SAPI_API void sapi_startup(sapi_module_struct *sf)
 {
        sapi_module = *sf;
-       zend_hash_init_ex(&known_post_content_types, 5, NULL, NULL, 1, 0);
 
 #ifdef ZTS
-       ts_allocate_id(&sapi_globals_id, sizeof(sapi_globals_struct), 
(ts_allocate_ctor) sapi_globals_ctor, NULL);
+       ts_allocate_id(&sapi_globals_id, sizeof(sapi_globals_struct), 
(ts_allocate_ctor) sapi_globals_ctor, (ts_allocate_dtor) sapi_globals_dtor);
 #else
+       TSRMLS_FETCH();
        sapi_globals_ctor(&sapi_globals TSRMLS_CC);
 #endif
 
@@ -90,6 +95,13 @@
 
 SAPI_API void sapi_shutdown(void)
 {
+#ifdef ZTS
+       ts_free_id(&sapi_globals_id);
+#else
+       TSRMLS_FETCH();
+       sapi_globals_dtor(&sapi_globals TSRMLS_CC);
+#endif
+
        reentrancy_shutdown();
 
        virtual_cwd_shutdown();
@@ -97,8 +109,6 @@
 #ifdef PHP_WIN32
        tsrm_win32_shutdown();
 #endif
-
-       zend_hash_destroy(&known_post_content_types);
 }
 
 
@@ -151,7 +161,8 @@
        }
 
        /* now try to find an appropriate POST content handler */
-       if (zend_hash_find(&known_post_content_types, content_type, 
content_type_length+1, (void **) &post_entry) == SUCCESS) {
+       if (zend_hash_find(&SG(known_post_content_types), content_type,
+                       content_type_length+1, (void **) &post_entry) == 
SUCCESS) {
                /* found one, register it for use */
                SG(request_info).post_entry = post_entry;
                post_reader_func = post_entry->post_reader;
@@ -802,12 +813,12 @@
 }
 
 
-SAPI_API int sapi_register_post_entries(sapi_post_entry *post_entries)
+SAPI_API int sapi_register_post_entries(sapi_post_entry *post_entries 
TSRMLS_DC)
 {
        sapi_post_entry *p=post_entries;
 
        while (p->content_type) {
-               if (sapi_register_post_entry(p) == FAILURE) {
+               if (sapi_register_post_entry(p TSRMLS_CC) == FAILURE) {
                        return FAILURE;
                }
                p++;
@@ -816,14 +827,17 @@
 }
 
 
-SAPI_API int sapi_register_post_entry(sapi_post_entry *post_entry)
+SAPI_API int sapi_register_post_entry(sapi_post_entry *post_entry TSRMLS_DC)
 {
-       return zend_hash_add(&known_post_content_types, 
post_entry->content_type, post_entry->content_type_len+1, (void *) post_entry, 
sizeof(sapi_post_entry), NULL);
+       return zend_hash_add(&SG(known_post_content_types),
+                       post_entry->content_type, 
post_entry->content_type_len+1,
+                       (void *) post_entry, sizeof(sapi_post_entry), NULL);
 }
 
-SAPI_API void sapi_unregister_post_entry(sapi_post_entry *post_entry)
+SAPI_API void sapi_unregister_post_entry(sapi_post_entry *post_entry TSRMLS_DC)
 {
-       zend_hash_del(&known_post_content_types, post_entry->content_type, 
post_entry->content_type_len+1);
+       zend_hash_del(&SG(known_post_content_types), post_entry->content_type,
+                       post_entry->content_type_len+1);
 }
 
 
http://cvs.php.net/diff.php/php-src/main/SAPI.h?r1=1.110&r2=1.111&ty=u
Index: php-src/main/SAPI.h
diff -u php-src/main/SAPI.h:1.110 php-src/main/SAPI.h:1.111
--- php-src/main/SAPI.h:1.110   Fri Aug 20 23:09:45 2004
+++ php-src/main/SAPI.h Mon Feb 21 10:14:02 2005
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: SAPI.h,v 1.110 2004/08/21 03:09:45 fmk Exp $ */
+/* $Id: SAPI.h,v 1.111 2005/02/21 15:14:02 moriyoshi Exp $ */
 
 #ifndef SAPI_H
 #define SAPI_H
@@ -126,6 +126,7 @@
        int options;
        zend_bool sapi_started;
        time_t global_request_time;
+       HashTable known_post_content_types;
 } sapi_globals_struct;
 
 
@@ -180,9 +181,9 @@
 SAPI_API void sapi_free_header(sapi_header_struct *sapi_header);
 SAPI_API void sapi_handle_post(void *arg TSRMLS_DC);
 
-SAPI_API int sapi_register_post_entries(sapi_post_entry *post_entry);
-SAPI_API int sapi_register_post_entry(sapi_post_entry *post_entry);
-SAPI_API void sapi_unregister_post_entry(sapi_post_entry *post_entry);
+SAPI_API int sapi_register_post_entries(sapi_post_entry *post_entry TSRMLS_DC);
+SAPI_API int sapi_register_post_entry(sapi_post_entry *post_entry TSRMLS_DC);
+SAPI_API void sapi_unregister_post_entry(sapi_post_entry *post_entry 
TSRMLS_DC);
 SAPI_API int sapi_register_default_post_reader(void 
(*default_post_reader)(TSRMLS_D));
 SAPI_API int sapi_register_treat_data(void (*treat_data)(int arg, char *str, 
zval *destArray TSRMLS_DC));
 SAPI_API int sapi_register_input_filter(unsigned int (*input_filter)(int arg, 
char *var, char **val, unsigned int val_len, unsigned int *new_val_len 
TSRMLS_DC));
http://cvs.php.net/diff.php/php-src/main/main.c?r1=1.616&r2=1.617&ty=u
Index: php-src/main/main.c
diff -u php-src/main/main.c:1.616 php-src/main/main.c:1.617
--- php-src/main/main.c:1.616   Sun Jan  9 11:30:09 2005
+++ php-src/main/main.c Mon Feb 21 10:14:02 2005
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: main.c,v 1.616 2005/01/09 16:30:09 sniper Exp $ */
+/* $Id: main.c,v 1.617 2005/02/21 15:14:02 moriyoshi Exp $ */
 
 /* {{{ includes
  */
@@ -1415,7 +1415,7 @@
        zuv.import_use_extension = ".php";
        php_startup_auto_globals(TSRMLS_C);
        zend_set_utility_values(&zuv);
-       php_startup_sapi_content_types();
+       php_startup_sapi_content_types(TSRMLS_C);
 
        REGISTER_MAIN_STRINGL_CONSTANT("PHP_VERSION", PHP_VERSION, 
sizeof(PHP_VERSION)-1, CONST_PERSISTENT | CONST_CS);
        REGISTER_MAIN_STRINGL_CONSTANT("PHP_OS", php_os, strlen(php_os), 
CONST_PERSISTENT | CONST_CS);
http://cvs.php.net/diff.php/php-src/main/php_content_types.c?r1=1.29&r2=1.30&ty=u
Index: php-src/main/php_content_types.c
diff -u php-src/main/php_content_types.c:1.29 
php-src/main/php_content_types.c:1.30
--- php-src/main/php_content_types.c:1.29       Thu Jan  8 03:17:53 2004
+++ php-src/main/php_content_types.c    Mon Feb 21 10:14:02 2005
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_content_types.c,v 1.29 2004/01/08 08:17:53 andi Exp $ */
+/* $Id: php_content_types.c,v 1.30 2005/02/21 15:14:02 moriyoshi Exp $ */
 
 #include "php.h"
 #include "SAPI.h"
@@ -72,9 +72,9 @@
 
 /* {{{ php_startup_sapi_content_types
  */
-int php_startup_sapi_content_types(void)
+int php_startup_sapi_content_types(TSRMLS_D)
 {
-       sapi_register_post_entries(php_post_entries);
+       sapi_register_post_entries(php_post_entries TSRMLS_CC);
        sapi_register_default_post_reader(php_default_post_reader);
        sapi_register_treat_data(php_default_treat_data);
        sapi_register_input_filter(php_default_input_filter);
http://cvs.php.net/diff.php/php-src/main/php_content_types.h?r1=1.9&r2=1.10&ty=u
Index: php-src/main/php_content_types.h
diff -u php-src/main/php_content_types.h:1.9 
php-src/main/php_content_types.h:1.10
--- php-src/main/php_content_types.h:1.9        Thu Jan  8 12:33:04 2004
+++ php-src/main/php_content_types.h    Mon Feb 21 10:14:02 2005
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_content_types.h,v 1.9 2004/01/08 17:33:04 sniper Exp $ */
+/* $Id: php_content_types.h,v 1.10 2005/02/21 15:14:02 moriyoshi Exp $ */
 
 #ifndef PHP_CONTENT_TYPES_H
 #define PHP_CONTENT_TYPES_H
@@ -25,6 +25,6 @@
 
 SAPI_API SAPI_POST_READER_FUNC(php_default_post_reader);
 SAPI_API SAPI_POST_HANDLER_FUNC(php_std_post_handler);
-int php_startup_sapi_content_types(void);
+int php_startup_sapi_content_types(TSRMLS_D);
 
 #endif /* PHP_CONTENT_TYPES_H */

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

Reply via email to