1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-07-31 05:50:42 +02:00

- Remove the BBCode UIDs from the output

- Faster generation of CAPTCHA images


git-svn-id: file:///svn/phpbb/trunk@5575 89ea8834-ac86-4346-8a33-228a782c2dd0
This commit is contained in:
David M
2006-02-22 22:17:36 +00:00
parent 6b13f94be9
commit ac011448ab
2 changed files with 98 additions and 77 deletions

View File

@@ -191,36 +191,51 @@ class ucp_confirm
else
{
// The total length of this image, uncompressed, is just a calculation of pixels
$len = $temp_len = ($width + 1) * $height;
$len = ($width + 1) * $height;
// Optimized Adler-32 loop ported from the GNU Classpath project
$s1 = 1;
$s2 = 0;
$i = 0;
while ($temp_len > 0)
// Adler-32 hash generation
// Note: The hash is _backwards_ so we must reverse it
if (@extension_loaded('hash'))
{
// We can defer the modulo operation:
// s1 maximally grows from 65521 to 65521 + 255 * 3800
// s2 maximally grows by 3800 * median(s1) = 2090079800 < 2^31
$n = 3800;
if ($n > $temp_len)
{
$n = $temp_len;
}
$temp_len -= $n;
while (--$n >= 0)
{
$s1 += (ord($raw_image[$i++]) & 255);
$s2 += $s1;
}
$s1 %= 65521;
$s2 %= 65521;
$adler_hash = hash('adler32', $raw_image, true);
}
else if (@extension_loaded('mhash'))
{
$adler_hash = mhash(MHASH_ADLER32, $raw_image);
}
else
{
// Optimized Adler-32 loop ported from the GNU Classpath project
$temp_len = $len;
$s1 = 1;
$s2 = 0;
$i = 0;
while ($temp_len > 0)
{
// We can defer the modulo operation:
// s1 maximally grows from 65521 to 65521 + 255 * 3800
// s2 maximally grows by 3800 * median(s1) = 2090079800 < 2^31
$n = 3800;
if ($n > $temp_len)
{
$n = $temp_len;
}
$temp_len -= $n;
while (--$n >= 0)
{
$s1 += (ord($raw_image[$i++]) & 255);
$s2 += $s1;
}
$s1 %= 65521;
$s2 %= 65521;
}
$adler = ($s2 << 16) | $s1;
$adler_hash = pack('C4', $adler & 255, ($adler >> 8) & 255, ($adler >> 16) & 255, ($adler >> 24) & 255);
}
$adler = ($s2 << 16) | $s1;
// This is the same thing as gzcompress($raw_image, 0)
$raw_image = pack('C7', 0x78, 0x01, 0x01, $len, ($len >> 8) & 255, ~$len & 255, ~($len >> 8)) . $raw_image;
$raw_image .= pack('C4', ($adler >> 24) & 255, ($adler >> 16) & 255, ($adler >> 8) & 255, $adler & 255);
// This is the same thing as gzcompress($raw_image, 0) but does not need zlib
$raw_image = pack('C7', 0x78, 0x01, 0x01, $len, ($len >> 8) & 255, ~$len & 255, ~($len >> 8)) . $raw_image . strrev($adler_hash);
// The Zlib header + Adler hash make us add on 11
$len += 11;