mirror of
https://github.com/php/php-src.git
synced 2026-04-24 08:28:26 +02:00
fix for #20198:
"always_populate_raw_post_data = On" breaks HTTP file uploads
This commit is contained in:
+5
-1
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
Reference in New Issue
Block a user