Browse Source

- 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
migration/RELEASE_1_0_0
Pierre Joye 20 years ago
parent
commit
154bb7c6a7
  1. 13
      ext/standard/crc32.c
  2. 11
      ext/standard/tests/strings/bug36306.phpt

13
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);
}
/* }}} */

11
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
Loading…
Cancel
Save