From 154bb7c6a76fe4de5d5223dcab6fe575284da96a Mon Sep 17 00:00:00 2001 From: Pierre Joye Date: Thu, 9 Feb 2006 15:48:18 +0000 Subject: [PATCH] - MFB: - revert last fix - ensure that we are in 32bit - do not try to compare the decimal values but hex, php does not have unsigned integer --- ext/standard/crc32.c | 13 +++++++------ ext/standard/tests/strings/bug36306.phpt | 11 +++++++++-- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/ext/standard/crc32.c b/ext/standard/crc32.c index 02bc54e623..484a2786c6 100644 --- a/ext/standard/crc32.c +++ b/ext/standard/crc32.c @@ -26,19 +26,20 @@ Calculate the crc32 polynomial of a string */ PHP_NAMED_FUNCTION(php_if_crc32) { - unsigned int crc = ~0; char *p; int len, nr; - + php_uint32 crcinit = 0; + register php_uint32 crc; + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &p, &nr) == FAILURE) { return; } + crc = crcinit^0xFFFFFFFF; - len = 0 ; - for (len += nr; nr--; ++p) { - CRC32(crc, *p); + for (len =+nr; nr--; ++p) { + crc = ((crc >> 8) & 0x00FFFFFF) ^ crc32tab[(crc ^ (*p)) & 0xFF ]; } - RETVAL_LONG(~ (long) crc); + RETVAL_LONG(crc^0xFFFFFFFF); } /* }}} */ diff --git a/ext/standard/tests/strings/bug36306.phpt b/ext/standard/tests/strings/bug36306.phpt index a4a02dd658..cd1a0c4c0d 100644 --- a/ext/standard/tests/strings/bug36306.phpt +++ b/ext/standard/tests/strings/bug36306.phpt @@ -2,7 +2,14 @@ Bug #36306 crc32() 64bit --FILE-- --EXPECT-- --858128794 +ccd9fe66 -- 2.40.0