[ticket/9970] User language input is checked for existance

Users could select a language which did not exist in the database by altering
form fields because there was no back-end verification.

PHPBB3-9970
This commit is contained in:
Josh Woody 2011-01-05 18:48:57 -06:00 committed by Andreas Fischer
parent 7027489c8e
commit f7723b3e95
3 changed files with 32 additions and 2 deletions

View file

@ -1421,6 +1421,36 @@ function validate_match($string, $optional = false, $match = '')
return false; return false;
} }
/**
* Validate Language string
*
* Tests whether a language string is valid and exists on the disk
* This is the same criteria used to determine whether to include it or not.
*
* @param $lang - The language string to test
*
* @return boolean|string Either false if validation succeeded or a string which will be used as the error message (with the variable name appended)
*/
function validate_language($lang)
{
global $phpbb_root_path;
// Note: Two language strings are identical here because the English
// version "Language you specified is not valid" is correct for both
// cases
if (!preg_match('#^[a-z_\-]{2,}$#i', $lang))
{
return 'WRONG_DATA';
}
if (!file_exists($phpbb_root_path . 'language/' . $lang . '/'))
{
return 'WRONG_DATA';
}
return false;
}
/** /**
* Check to see if the username has been taken, or if it is disallowed. * Check to see if the username has been taken, or if it is disallowed.
* Also checks if it includes the " character, which we don't allow in usernames. * Also checks if it includes the " character, which we don't allow in usernames.

View file

@ -65,7 +65,7 @@ class ucp_prefs
$error = validate_data($data, array( $error = validate_data($data, array(
'dateformat' => array('string', false, 1, 30), 'dateformat' => array('string', false, 1, 30),
'lang' => array('match', false, '#^[a-z0-9_\-]{2,}$#i'), 'lang' => array('language'),
'tz' => array('num', false, -14, 14), 'tz' => array('num', false, -14, 14),
)); ));

View file

@ -210,7 +210,7 @@ class ucp_register
array('email')), array('email')),
'email_confirm' => array('string', false, 6, 60), 'email_confirm' => array('string', false, 6, 60),
'tz' => array('num', false, -14, 14), 'tz' => array('num', false, -14, 14),
'lang' => array('match', false, '#^[a-z_\-]{2,}$#i'), 'lang' => array('language'),
)); ));
if (!check_form_key('ucp_register')) if (!check_form_key('ucp_register'))