From 5aec6f4e336ec99a49587494c159459ba31dc67e Mon Sep 17 00:00:00 2001 From: Hartmut Holzgraefe Date: Fri, 8 Nov 2002 08:41:52 +0000 Subject: [PATCH] fix for #20198: "always_populate_raw_post_data = On" breaks HTTP file uploads --- main/SAPI.c | 6 +++++- 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); + } } } /* }}} */ -- 2.40.0