summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHartmut Holzgraefe <hholzgra@php.net>2002-11-08 08:41:52 +0000
committerHartmut Holzgraefe <hholzgra@php.net>2002-11-08 08:41:52 +0000
commit5aec6f4e336ec99a49587494c159459ba31dc67e (patch)
tree7078d460cc59ff3d3d31ba975841308ed4a063a7
parent72e0aa894aece4d2d68d4e02a25a795e8e69aaae (diff)
downloadphp-git-5aec6f4e336ec99a49587494c159459ba31dc67e.tar.gz
fix for #20198:
"always_populate_raw_post_data = On" breaks HTTP file uploads
-rw-r--r--main/SAPI.c6
-rw-r--r--main/php_content_types.c21
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);
+ }
}
}
/* }}} */