From 4fc07fb0c80c9b7b357358f66fd186cecc30a39b Mon Sep 17 00:00:00 2001 From: pdontthink Date: Sat, 14 Feb 2009 07:32:38 +0000 Subject: [PATCH] Ensure that hash directory computation is the same on both 32 and 64 bit architectures (#2596879) (Thanks to Mike Sweetser) git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@13403 7612ce4b-ef26-0410-bec9-ea0150e637f0 --- ChangeLog | 2 ++ functions/prefs.php | 11 +++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index c861340e..45724f53 100644 --- a/ChangeLog +++ b/ChangeLog @@ -270,6 +270,8 @@ Version 1.5.2 - SVN - Make all submit button names unique on compose screen - Make address book file permissions 0600 - same as preference files - Added compatibility with Dovecot's bigint UIDs + - Ensure that hash directory computation is the same on both 32 and + 64 bit architectures (#2596879). Version 1.5.1 (branched on 2006-02-12) -------------------------------------- diff --git a/functions/prefs.php b/functions/prefs.php index 5b618d56..8d02042d 100644 --- a/functions/prefs.php +++ b/functions/prefs.php @@ -117,8 +117,15 @@ function getHashedDir($username, $dir, $hash_dirs = '') { * @since 1.2.0 */ function computeHashDirs($username) { - /* Compute the hash for this user and extract the hash directories. */ - $hash = base_convert(crc32($username), 10, 16); + /* Compute the hash for this user and extract the hash directories. */ + /* Note that the crc32() function result will be different on 32 and */ + /* 64 bit systems, thus the hack below. */ + $crc = crc32($username); + if ($crc & 0x80000000) { + $crc ^= 0xffffffff; + $crc += 1; + } + $hash = base_convert($crc, 10, 16); $hash_dirs = array(); for ($h = 0; $h < 4; ++ $h) { $hash_dirs[] = substr($hash, $h, 1); -- 2.25.1