From: Adam Harvey Date: Mon, 8 Nov 2010 09:35:33 +0000 (+0000) Subject: Implemented FR #53213 (Adler32 algorithm is very slow). Patch by zavasek at X-Git-Tag: php-5.4.0alpha1~191^2~713 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=18096f4b6811432133e1e6f13b4914d3c1cfd6f9;p=php Implemented FR #53213 (Adler32 algorithm is very slow). Patch by zavasek at yandex dot ru. --- diff --git a/NEWS b/NEWS index 45aace19c8..a2f5622b71 100644 --- a/NEWS +++ b/NEWS @@ -124,6 +124,8 @@ - Implemented FR #53238 (Make third parameter of preg_match_all optional). (Adam) +- Implemented FR #53213 (Adler32 algorithm is very slow). + (zavasek at yandex dot ru) - Implemented FR #52555 (Ability to get HTTP response code). (Paul Dragoonis) - Implemented FR #51295 (SQLite3::busyTimeout not existing). (Mark) - Implemented FR #49366 (Make slash escaping optional in json_encode()). (Adam) diff --git a/ext/hash/hash_adler32.c b/ext/hash/hash_adler32.c index 24c63f5852..b19cc53021 100644 --- a/ext/hash/hash_adler32.c +++ b/ext/hash/hash_adler32.c @@ -34,9 +34,16 @@ PHP_HASH_API void PHP_ADLER32Update(PHP_ADLER32_CTX *context, const unsigned cha s[0] = context->state & 0xffff; s[1] = (context->state >> 16) & 0xffff; for (i = 0; i < len; ++i) { - s[0] = (s[0] + input[i]) % 65521; - s[1] = (s[1] + s[0]) % 65521; + s[0] += input[i]; + s[1] += s[0]; + if (s[1]>=0x7fffffff) + { + s[0] = s[0] % 65521; + s[1] = s[1] % 65521; + } } + s[0] = s[0] % 65521; + s[1] = s[1] % 65521; context->state = s[0] + (s[1] << 16); }