diff options
Diffstat (limited to 'phpBB/phpbb/request')
| -rw-r--r-- | phpBB/phpbb/request/deactivated_super_global.php | 2 | ||||
| -rw-r--r-- | phpBB/phpbb/request/request.php | 84 | ||||
| -rw-r--r-- | phpBB/phpbb/request/request_interface.php | 22 | ||||
| -rw-r--r-- | phpBB/phpbb/request/type_cast_helper.php | 1 | 
4 files changed, 74 insertions, 35 deletions
diff --git a/phpBB/phpbb/request/deactivated_super_global.php b/phpBB/phpbb/request/deactivated_super_global.php index b6cad59be4..ab56240b14 100644 --- a/phpBB/phpbb/request/deactivated_super_global.php +++ b/phpBB/phpbb/request/deactivated_super_global.php @@ -56,7 +56,7 @@ class deactivated_super_global implements \ArrayAccess, \Countable, \IteratorAgg  		$file = '';  		$line = 0; -		$message = 'Illegal use of $' . $this->name . '. You must use the request class or request_var() to access input data. Found in %s on line %d. This error message was generated by deactivated_super_global.'; +		$message = 'Illegal use of $' . $this->name . '. You must use the request class to access input data. Found in %s on line %d. This error message was generated by deactivated_super_global.';  		$backtrace = debug_backtrace();  		if (isset($backtrace[1])) diff --git a/phpBB/phpbb/request/request.php b/phpBB/phpbb/request/request.php index 4cac6fbaea..92d4213180 100644 --- a/phpBB/phpbb/request/request.php +++ b/phpBB/phpbb/request/request.php @@ -225,6 +225,51 @@ class request implements \phpbb\request\request_interface  	}  	/** +	 * {@inheritdoc} +	 */ +	public function raw_variable($var_name, $default, $super_global = \phpbb\request\request_interface::REQUEST) +	{ +		$path = false; + +		// deep direct access to multi dimensional arrays +		if (is_array($var_name)) +		{ +			$path = $var_name; +			// make sure at least the variable name is specified +			if (empty($path)) +			{ +				return (is_array($default)) ? array() : $default; +			} +			// the variable name is the first element on the path +			$var_name = array_shift($path); +		} + +		if (!isset($this->input[$super_global][$var_name])) +		{ +			return (is_array($default)) ? array() : $default; +		} +		$var = $this->input[$super_global][$var_name]; + +		if ($path) +		{ +			// walk through the array structure and find the element we are looking for +			foreach ($path as $key) +			{ +				if (is_array($var) && isset($var[$key])) +				{ +					$var = $var[$key]; +				} +				else +				{ +					return (is_array($default)) ? array() : $default; +				} +			} +		} + +		return $var; +	} + +	/**  	* Shortcut method to retrieve SERVER variables.  	*  	* Also fall back to getenv(), some CGI setups may need it (probably not, but @@ -369,41 +414,14 @@ class request implements \phpbb\request\request_interface  	*/  	protected function _variable($var_name, $default, $multibyte = false, $super_global = \phpbb\request\request_interface::REQUEST, $trim = true)  	{ -		$path = false; - -		// deep direct access to multi dimensional arrays -		if (is_array($var_name)) -		{ -			$path = $var_name; -			// make sure at least the variable name is specified -			if (empty($path)) -			{ -				return (is_array($default)) ? array() : $default; -			} -			// the variable name is the first element on the path -			$var_name = array_shift($path); -		} +		$var = $this->raw_variable($var_name, $default, $super_global); -		if (!isset($this->input[$super_global][$var_name])) +		// Return prematurely if raw variable is empty array or the same as +		// the default. Using strict comparison to ensure that one can't +		// prevent proper type checking on any input variable +		if ($var === array() || $var === $default)  		{ -			return (is_array($default)) ? array() : $default; -		} -		$var = $this->input[$super_global][$var_name]; - -		if ($path) -		{ -			// walk through the array structure and find the element we are looking for -			foreach ($path as $key) -			{ -				if (is_array($var) && isset($var[$key])) -				{ -					$var = $var[$key]; -				} -				else -				{ -					return (is_array($default)) ? array() : $default; -				} -			} +			return $var;  		}  		$this->type_cast_helper->recursive_set_var($var, $default, $multibyte, $trim); diff --git a/phpBB/phpbb/request/request_interface.php b/phpBB/phpbb/request/request_interface.php index 47b3b3a4ed..3bfa8bb424 100644 --- a/phpBB/phpbb/request/request_interface.php +++ b/phpBB/phpbb/request/request_interface.php @@ -65,6 +65,28 @@ interface request_interface  	public function variable($var_name, $default, $multibyte = false, $super_global = \phpbb\request\request_interface::REQUEST);  	/** +	 * Get a variable without trimming strings and without escaping. +	 * This method MUST NOT be used with queries. +	 * Same functionality as variable(), except does not run trim() on strings +	 * and does not escape input. +	 * This method should only be used when the raw input is needed without +	 * any escaping, i.e. for database password during the installation. +	 * +	 * @param	string|array	$var_name	The form variable's name from which data shall be retrieved. +	 * 										If the value is an array this may be an array of indizes which will give +	 * 										direct access to a value at any depth. E.g. if the value of "var" is array(1 => "a") +	 * 										then specifying array("var", 1) as the name will return "a". +	 * @param	mixed			$default	A default value that is returned if the variable was not set. +	 * 										This function will always return a value of the same type as the default. +	 * @param	\phpbb\request\request_interface::POST|GET|REQUEST|COOKIE	$super_global +	 * 										Specifies which super global should be used +	 * +	 * @return	mixed	The value of $_REQUEST[$var_name] run through {@link set_var set_var} to ensure that the type is the +	 *					the same as that of $default. If the variable is not set $default is returned. +	 */ +	public function raw_variable($var_name, $default, $super_global = \phpbb\request\request_interface::REQUEST); + +	/**  	* Shortcut method to retrieve SERVER variables.  	*  	* @param	string|array	$var_name		See \phpbb\request\request_interface::variable diff --git a/phpBB/phpbb/request/type_cast_helper.php b/phpBB/phpbb/request/type_cast_helper.php index bc654e6182..96e66950ca 100644 --- a/phpBB/phpbb/request/type_cast_helper.php +++ b/phpBB/phpbb/request/type_cast_helper.php @@ -172,7 +172,6 @@ class type_cast_helper implements \phpbb\request\type_cast_helper_interface  			}  			list($default_key, $default_value) = each($default); -			$value_type = gettype($default_value);  			$key_type = gettype($default_key);  			$_var = $var;  | 
