com php-src: re-introduce always_populate_raw_post_data : main/main.c main/php_content_types.c main/php _globals.h tests/basic/024.phpt tests/basic/0
26.phpt
| From: | Michael Wallner | Date: | Mon, 30 Dec 2013 13:28:42 +0000 |
| Subject: | com php-src: re-introduce always_populate_raw_post_data : main/main.c main/php_content_types.c main/php _globals.h tests/basic/024.phpt tests/basic/0 26.phpt |
||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-75509@lists.php.net to get a copy of this message | ||
Commit: 3641507fc1a854ec56135740f528d5d428920833
Author: Michael Wallner <mike@php.net> Tue, 26 Nov 2013 15:03:37 +0100
Parents: 71a36fb6aeb7b51b2819d857162564dbbbccae59
Branches: PHP-5.6 master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=3641507fc1a854ec56135740f528d5d428920833
Log:
re-introduce always_populate_raw_post_data
Changed paths:
M main/main.c
M main/php_content_types.c
M main/php_globals.h
A tests/basic/024.phpt
A tests/basic/026.phpt
Diff:
diff --git a/main/main.c b/main/main.c
index 04338e7..fdcf2b0 100644
--- a/main/main.c
+++ b/main/main.c
@@ -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)
diff --git a/main/php_content_types.c b/main/php_content_types.c
index 3346efc..d15f6a7 100644
--- a/main/php_content_types.c
+++ b/main/php_content_types.c
@@ -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);
+ }
}
}
/* }}} */
diff --git a/main/php_globals.h b/main/php_globals.h
index fa2fe3b..49647b0 100644
--- a/main/php_globals.h
+++ b/main/php_globals.h
@@ -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;
diff --git a/tests/basic/024.phpt b/tests/basic/024.phpt
new file mode 100644
index 0000000..bf8a206
--- /dev/null
+++ b/tests/basic/024.phpt
@@ -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"
diff --git a/tests/basic/026.phpt b/tests/basic/026.phpt
new file mode 100644
index 0000000..b98a31f
--- /dev/null
+++ b/tests/basic/026.phpt
@@ -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"