diff --git a/phpBB/docs/CHANGELOG.html b/phpBB/docs/CHANGELOG.html
index 85cbb47d3c..5b2dba6825 100644
--- a/phpBB/docs/CHANGELOG.html
+++ b/phpBB/docs/CHANGELOG.html
@@ -172,6 +172,7 @@
[Fix] Fix problems with firebird by no longer using 'count' as a column alias. (Bug #57455)
[Fix] Small language correction for the FAQ page. (Bug #57825)
[Fix] Restrict search for language/../iso.txt to folders. (Bug #57795)
+ [Fix] Make user_email_hash() function independent from system's architecture. (Bug #57755)
[Change] Move redirect into a hidden field to avoid issues with mod_security. (Bug #54145)
[Change] Log activation through inactive users ACP. (Bug #30145)
[Change] Send time of last item instead of current time in ATOM Feeds. (Bug #53305)
diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php
index 23221c69ea..913b1c0fa0 100644
--- a/phpBB/includes/functions.php
+++ b/phpBB/includes/functions.php
@@ -556,11 +556,11 @@ function _hash_crypt_private($password, $setting, &$itoa64)
*
* @param string $email Email address
*
-* @return string Big Integer
+* @return string Unsigned Big Integer
*/
function phpbb_email_hash($email)
{
- return crc32(strtolower($email)) . strlen($email);
+ return sprintf('%u', crc32(strtolower($email))) . strlen($email);
}
/**
diff --git a/phpBB/includes/functions_convert.php b/phpBB/includes/functions_convert.php
index 8b3c6ea8db..0fdae9b274 100644
--- a/phpBB/includes/functions_convert.php
+++ b/phpBB/includes/functions_convert.php
@@ -205,10 +205,12 @@ function get_group_id($group_name)
/**
* Generate the email hash stored in the users table
+*
+* Note: Deprecated, calls should directly go to phpbb_email_hash()
*/
function gen_email_hash($email)
{
- return (crc32(strtolower($email)) . strlen($email));
+ return phpbb_email_hash($email);
}
/**
diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php
index 909c390a9e..29d82be987 100644
--- a/phpBB/install/database_update.php
+++ b/phpBB/install/database_update.php
@@ -1603,6 +1603,34 @@ function change_database_data(&$no_updates, $version)
// No changes from 3.0.7-RC1 to 3.0.7
case '3.0.7-RC1':
+
+ $sql = 'SELECT user_id, user_email, user_email_hash
+ FROM ' . USERS_TABLE . '
+ WHERE user_type <> ' . USER_IGNORE . "
+ AND user_email <> ''";
+ $result = $db->sql_query($sql);
+
+ $i = 0;
+ while ($row = $db->sql_fetchrow($result))
+ {
+ $user_email_hash = phpbb_email_hash($row['user_email']);
+
+ if ($user_email_hash != $row['user_email_hash'])
+ {
+ $sql_ary = array(
+ 'user_email_hash' => $user_email_hash,
+ );
+
+ $sql = 'UPDATE ' . USERS_TABLE . '
+ SET ' . $db->sql_build_array('UPDATE', $sql_ary) . '
+ WHERE user_id = ' . (int) $row['user_id'];
+ __sql($sql, $errored, $error_ary, ($i % 100 == 0));
+
+ ++$i;
+ }
+ }
+ $db->sql_freeresult($result);
+
break;
}
}