From 8600417c790b5dde763f986c834f9e4f46ebc2fc Mon Sep 17 00:00:00 2001
From: Pierre Joye <pajoye@php.net>
Date: Thu, 9 Feb 2006 15:33:53 +0000
Subject: [PATCH] - 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                     | 16 +++++++---------
 ext/standard/tests/strings/bug36306.phpt | 11 +++++++++--
 2 files changed, 16 insertions(+), 11 deletions(-)

diff --git a/ext/standard/crc32.c b/ext/standard/crc32.c
index 02bc54e623..774564a715 100644
--- a/ext/standard/crc32.c
+++ b/ext/standard/crc32.c
@@ -22,25 +22,23 @@
 #include "basic_functions.h"
 #include "crc32.h"
 
-/* {{{ proto string crc32(string str)
-   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);
 }
-/* }}} */
 
 /*
  * Local variables:
diff --git a/ext/standard/tests/strings/bug36306.phpt b/ext/standard/tests/strings/bug36306.phpt
index a4a02dd658..ff6279a2d3 100644
--- a/ext/standard/tests/strings/bug36306.phpt
+++ b/ext/standard/tests/strings/bug36306.phpt
@@ -2,7 +2,14 @@
 Bug #36306 crc32() 64bit
 --FILE--
 <?php
-echo crc32("platform independant") . "\n";
+
+/* as an example how to write crc32 tests
+   PHP does not have uint values, you cannot
+   display crc32 like a signed integer.
+   Have to find some small strings to truely reproduce 
+   the problem, this example being not a problem
+*/
+echo dechex(crc32("platform independant")) . "\n";
 ?>
 --EXPECT--
--858128794
+ccd9fe66
-- 
2.40.0