diff options
author | Hartmut Holzgraefe <hholzgra@php.net> | 2002-11-08 08:41:52 +0000 |
---|---|---|
committer | Hartmut Holzgraefe <hholzgra@php.net> | 2002-11-08 08:41:52 +0000 |
commit | 5aec6f4e336ec99a49587494c159459ba31dc67e (patch) | |
tree | 7078d460cc59ff3d3d31ba975841308ed4a063a7 | |
parent | 72e0aa894aece4d2d68d4e02a25a795e8e69aaae (diff) | |
download | php-git-5aec6f4e336ec99a49587494c159459ba31dc67e.tar.gz |
fix for #20198:
"always_populate_raw_post_data = On" breaks HTTP file uploads
-rw-r--r-- | main/SAPI.c | 6 | ||||
-rw-r--r-- | main/php_content_types.c | 21 |
2 files changed, 22 insertions, 5 deletions
diff --git a/main/SAPI.c b/main/SAPI.c index 7d0392465c..b2bb58a288 100644 --- a/main/SAPI.c +++ b/main/SAPI.c @@ -150,15 +150,19 @@ static void sapi_read_post_data(TSRMLS_D) } } + /* 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) { + /* found one, register it for use */ SG(request_info).post_entry = post_entry; post_reader_func = post_entry->post_reader; } else { + /* fallback */ + SG(request_info).post_entry = NULL; if (!sapi_module.default_post_reader) { + /* no default reader ? */ sapi_module.sapi_error(E_WARNING, "Unsupported content type: '%s'", content_type); return; } - SG(request_info).post_entry = NULL; } if (oldchar) { *(p-1) = oldchar; diff --git a/main/php_content_types.c b/main/php_content_types.c index dfbb3ffee6..487627afb0 100644 --- a/main/php_content_types.c +++ b/main/php_content_types.c @@ -37,12 +37,25 @@ static sapi_post_entry php_post_entries[] = { */ SAPI_API SAPI_POST_READER_FUNC(php_default_post_reader) { - char *data; + char *data = NULL; if(PG(always_populate_raw_post_data)) { - if(!SG(request_info).post_data) sapi_read_standard_form_data(TSRMLS_C); - data = estrndup(SG(request_info).post_data, SG(request_info).post_data_length); - SET_VAR_STRINGL("HTTP_RAW_POST_DATA", data, SG(request_info).post_data_length); + if(NULL == SG(request_info).post_data) { /* no data yet */ + if(NULL == SG(request_info).post_entry) { + /* no post handler registered, so we just swallow the data */ + sapi_read_standard_form_data(TSRMLS_C); + data = SG(request_info).post_data; + SG(request_info).post_data = NULL; + SG(request_info).post_data_length = 0; + } + } else { + /* copy existing post data */ + data = estrndup(SG(request_info).post_data, SG(request_info).post_data_length); + } + + if(data) { + SET_VAR_STRINGL("HTTP_RAW_POST_DATA", data, SG(request_info).post_data_length); + } } } /* }}} */ |