diff --git a/phpBB/docs/CHANGELOG.html b/phpBB/docs/CHANGELOG.html
index 77951b77df..7ff38d6741 100644
--- a/phpBB/docs/CHANGELOG.html
+++ b/phpBB/docs/CHANGELOG.html
@@ -158,6 +158,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 823c71dbf0..81a11f4867 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 8a1d07c8e5..048212bcfe 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 1d58276b10..748d2d9b10 100644
--- a/phpBB/install/database_update.php
+++ b/phpBB/install/database_update.php
@@ -906,6 +906,9 @@ function database_update_info()
),
),
),
+
+ // No changes from 3.0.7-RC1 to 3.0.7
+ '3.0.7-RC1' => array(),
);
}
@@ -1597,6 +1600,38 @@ function change_database_data(&$no_updates, $version)
$no_updates = false;
break;
+
+ // 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;
}
}