diff options
| author | Antony Dovgal <tony2001@php.net> | 2008-08-18 14:29:55 +0000 |
|---|---|---|
| committer | Antony Dovgal <tony2001@php.net> | 2008-08-18 14:29:55 +0000 |
| commit | 523cccc09d788c789531b2eeabdd453b59386cc2 (patch) | |
| tree | 5af70eb24526d5bcf5fdfd475b9a7063743c6815 | |
| parent | 991ae6e7d3bde939df0abc69654236506d3210a3 (diff) | |
| download | php-git-523cccc09d788c789531b2eeabdd453b59386cc2.tar.gz | |
MFH: fix bug #45028 (CRC32 output endianness is different between crc32() and hash())
| -rw-r--r-- | NEWS | 2 | ||||
| -rw-r--r-- | ext/hash/hash_crc32.c | 12 | ||||
| -rw-r--r-- | ext/hash/tests/crc32.phpt | 12 | ||||
| -rw-r--r-- | ext/hash/tests/hash_copy_001.phpt | 8 |
4 files changed, 23 insertions, 11 deletions
@@ -37,6 +37,8 @@ PHP NEWS - Fixed bug #45384 (parse_ini_file will result in parse error with no trailing newline). (Arnaud) - Fixed bug #45044 (relative paths not resolved correctly). (Dmitry) +- Fixed bug #45028 (CRC32 output endianness is different between crc32() + and hash()). (Tony) - Fixed bug #44925 (preg_grep() modifies input array). (Nuno) - Fixed bug #44842 (parse_ini_file keys that start/end with underscore). (Arnaud) diff --git a/ext/hash/hash_crc32.c b/ext/hash/hash_crc32.c index ccc6de3b0d..9f03ad0704 100644 --- a/ext/hash/hash_crc32.c +++ b/ext/hash/hash_crc32.c @@ -56,6 +56,16 @@ PHP_HASH_API void PHP_CRC32Final(unsigned char digest[4], PHP_CRC32_CTX *context context->state = 0; } +PHP_HASH_API void PHP_CRC32BFinal(unsigned char digest[4], PHP_CRC32_CTX *context) +{ + context->state=~context->state; + digest[0] = (unsigned char) ((context->state >> 24) & 0xff); + digest[1] = (unsigned char) ((context->state >> 16) & 0xff); + digest[2] = (unsigned char) ((context->state >> 8) & 0xff); + digest[3] = (unsigned char) (context->state & 0xff); + context->state = 0; +} + PHP_HASH_API int PHP_CRC32Copy(const php_hash_ops *ops, PHP_CRC32_CTX *orig_context, PHP_CRC32_CTX *copy_context) { copy_context->state = orig_context->state; @@ -75,7 +85,7 @@ const php_hash_ops php_hash_crc32_ops = { const php_hash_ops php_hash_crc32b_ops = { (php_hash_init_func_t) PHP_CRC32Init, (php_hash_update_func_t) PHP_CRC32BUpdate, - (php_hash_final_func_t) PHP_CRC32Final, + (php_hash_final_func_t) PHP_CRC32BFinal, (php_hash_copy_func_t) PHP_CRC32Copy, 4, /* what to say here? */ 4, diff --git a/ext/hash/tests/crc32.phpt b/ext/hash/tests/crc32.phpt index c51209c60d..3862fb17a6 100644 --- a/ext/hash/tests/crc32.phpt +++ b/ext/hash/tests/crc32.phpt @@ -28,9 +28,9 @@ echo hash('crc32b', '12345678901234567890123456789012345678901234567890123456789 882174a0 96790816 00000000 -43beb7e8 -c2412435 -7f9d1520 -bd50274c -d2e6c21f -724aa97c +e8b7be43 +352441c2 +20159d7f +4c2750bd +1fc2e6d2 +7ca94a72 diff --git a/ext/hash/tests/hash_copy_001.phpt b/ext/hash/tests/hash_copy_001.phpt index e3f5081f01..a6d4c61797 100644 --- a/ext/hash/tests/hash_copy_001.phpt +++ b/ext/hash/tests/hash_copy_001.phpt @@ -75,8 +75,8 @@ string(8) "28097c6f" string(8) "28097c6f" string(8) "e5cfc160" string(8) "e5cfc160" -string(8) "4e7a1469" -string(8) "4e7a1469" +string(8) "69147a4e" +string(8) "69147a4e" string(32) "86362472c8895e68e223ef8b3711d8d9" string(32) "86362472c8895e68e223ef8b3711d8d9" string(40) "fabdf6905f3ba18a3c93d6a16b91e31f7222a7a4" @@ -155,8 +155,8 @@ string(8) "28097c6f" string(8) "471714d9" string(8) "e5cfc160" string(8) "59f8d3d2" -string(8) "4e7a1469" -string(8) "9939e63e" +string(8) "69147a4e" +string(8) "3ee63999" string(32) "86362472c8895e68e223ef8b3711d8d9" string(32) "ebeeeb05c18af1e53d2d127b561d5e0d" string(40) "fabdf6905f3ba18a3c93d6a16b91e31f7222a7a4" |
