Skip to content
Permalink
Browse files

re-introduce always_populate_raw_post_data

  • Loading branch information
m6w6 committed Nov 26, 2013
1 parent 71a36fb commit 3641507fc1a854ec56135740f528d5d428920833
Showing with 100 additions and 0 deletions.
  1. +32 −0 main/main.c
  2. +24 −0 main/php_content_types.c
  3. +1 −0 main/php_globals.h
  4. +28 −0 tests/basic/024.phpt
  5. +15 −0 tests/basic/026.phpt
@@ -460,6 +460,37 @@ static PHP_INI_MH(OnChangeMailForceExtra)
/* defined in browscap.c */
PHP_INI_MH(OnChangeBrowscap);

/* {{{ PHP_INI_MH
*/
static PHP_INI_MH(OnChangeAlwaysPopulateRawPostData)
{
signed char *p;
#ifndef ZTS
char *base = (char *) mh_arg2;
#else
char *base;

base = (char *) ts_resource(*((int *) mh_arg2));
#endif

p = (signed char *) (base+(size_t) mh_arg1);

*p = zend_atol(new_value, new_value_length);
if (new_value_length == 2 && strcasecmp("on", new_value) == 0) {
*p = (signed char) 1;
}
else if (new_value_length == 3 && strcasecmp("yes", new_value) == 0) {
*p = (signed char) 1;
}
else if (new_value_length == 4 && strcasecmp("true", new_value) == 0) {
*p = (signed char) 1;
}
else {
*p = (signed char) atoi(new_value);
}
return SUCCESS;
}
/* }}} */

/* Need to be read from the environment (?):
* PHP_AUTO_PREPEND_FILE
@@ -562,6 +593,7 @@ PHP_INI_BEGIN()
STD_PHP_INI_BOOLEAN("allow_url_fopen", "1", PHP_INI_SYSTEM, OnUpdateBool, allow_url_fopen, php_core_globals, core_globals)
STD_PHP_INI_BOOLEAN("allow_url_include", "0", PHP_INI_SYSTEM, OnUpdateBool, allow_url_include, php_core_globals, core_globals)
STD_PHP_INI_BOOLEAN("enable_post_data_reading", "1", PHP_INI_SYSTEM|PHP_INI_PERDIR, OnUpdateBool, enable_post_data_reading, php_core_globals, core_globals)
STD_PHP_INI_BOOLEAN("always_populate_raw_post_data","0",PHP_INI_SYSTEM|PHP_INI_PERDIR, OnChangeAlwaysPopulateRawPostData, always_populate_raw_post_data, php_core_globals, core_globals)

STD_PHP_INI_ENTRY("realpath_cache_size", "16K", PHP_INI_SYSTEM, OnUpdateLong, realpath_cache_size_limit, virtual_cwd_globals, cwd_globals)
STD_PHP_INI_ENTRY("realpath_cache_ttl", "120", PHP_INI_SYSTEM, OnUpdateLong, realpath_cache_ttl, virtual_cwd_globals, cwd_globals)
@@ -33,6 +33,19 @@ static sapi_post_entry php_post_entries[] = {
};
/* }}} */

static zend_bool populate_raw_post_data(TSRMLS_D)
{
if (!SG(request_info).request_body) {
return (zend_bool) 0;
}

if (!PG(always_populate_raw_post_data)) {
return (zend_bool) !SG(request_info).post_entry;
}

return (zend_bool) (PG(always_populate_raw_post_data) > 0);
}

/* {{{ SAPI_POST_READER_FUNC
*/
SAPI_API SAPI_POST_READER_FUNC(php_default_post_reader)
@@ -42,6 +55,17 @@ SAPI_API SAPI_POST_READER_FUNC(php_default_post_reader)
/* no post handler registered, so we just swallow the data */
sapi_read_standard_form_data(TSRMLS_C);
}

if (populate_raw_post_data(TSRMLS_C)) {
size_t length;
char *data = NULL;

php_stream_rewind(SG(request_info).request_body);
length = php_stream_copy_to_mem(SG(request_info).request_body, &data, PHP_STREAM_COPY_ALL, 0);
php_stream_rewind(SG(request_info).request_body);

SET_VAR_STRINGL("HTTP_RAW_POST_DATA", data, length);
}
}
}
/* }}} */
@@ -132,6 +132,7 @@ struct _php_core_globals {
zend_bool allow_url_fopen;
zend_bool enable_post_data_reading;
zend_bool report_zend_debug;
long always_populate_raw_post_data;

int last_error_type;
char *last_error_message;
@@ -0,0 +1,28 @@
--TEST--
Test HTTP_RAW_POST_DATA creation
--INI--
always_populate_raw_post_data=1
max_input_vars=1000
--POST--
a=ABC&y=XYZ&c[]=1&c[]=2&c[a]=3
--FILE--
<?php
var_dump($_POST, $HTTP_RAW_POST_DATA);
?>
--EXPECT--
array(3) {
["a"]=>
string(3) "ABC"
["y"]=>
string(3) "XYZ"
["c"]=>
array(3) {
[0]=>
string(1) "1"
[1]=>
string(1) "2"
["a"]=>
string(1) "3"
}
}
string(30) "a=ABC&y=XYZ&c[]=1&c[]=2&c[a]=3"
@@ -0,0 +1,15 @@
--TEST--
Registration of HTTP_RAW_POST_DATA due to unknown content-type
--INI--
always_populate_raw_post_data=0
--POST_RAW--
Content-Type: unknown/type
a=1&b=ZYX
--FILE--
<?php
var_dump($_POST, $HTTP_RAW_POST_DATA);
?>
--EXPECT--
array(0) {
}
string(9) "a=1&b=ZYX"

0 comments on commit 3641507

Please sign in to comment.
You can’t perform that action at this time.