Skip to content

Commit

Permalink
Fix #71890: Add support for crc32c Castagnoli's polynomial.
Browse files Browse the repository at this point in the history
This variant of crc32 is heavily used by storage systems, such as iSCSI, SCTP,
Btrfs, ext4, and is increasingly being used in API (such as Google Cloud
Storage, and Apache Kafka).
  • Loading branch information
bramp committed Mar 5, 2019
1 parent 95aa6ba commit 09757eb
Show file tree
Hide file tree
Showing 9 changed files with 201 additions and 9 deletions.
8 changes: 5 additions & 3 deletions ext/hash/hash.c
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -40,10 +40,10 @@ struct mhash_bc_entry {
int value; int value;
}; };


#define MHASH_NUM_ALGOS 34 #define MHASH_NUM_ALGOS 35


static struct mhash_bc_entry mhash_to_hash[MHASH_NUM_ALGOS] = { static struct mhash_bc_entry mhash_to_hash[MHASH_NUM_ALGOS] = {
{"CRC32", "crc32", 0}, {"CRC32", "crc32", 0}, /* used by bzip */
{"MD5", "md5", 1}, {"MD5", "md5", 1},
{"SHA1", "sha1", 2}, {"SHA1", "sha1", 2},
{"HAVAL256", "haval256,3", 3}, {"HAVAL256", "haval256,3", 3},
Expand All @@ -52,7 +52,7 @@ static struct mhash_bc_entry mhash_to_hash[MHASH_NUM_ALGOS] = {
{NULL, NULL, 6}, {NULL, NULL, 6},
{"TIGER", "tiger192,3", 7}, {"TIGER", "tiger192,3", 7},
{"GOST", "gost", 8}, {"GOST", "gost", 8},
{"CRC32B", "crc32b", 9}, {"CRC32B", "crc32b", 9}, /* used by ethernet (IEEE 802.3), gzip, zip, png, etc */
{"HAVAL224", "haval224,3", 10}, {"HAVAL224", "haval224,3", 10},
{"HAVAL192", "haval192,3", 11}, {"HAVAL192", "haval192,3", 11},
{"HAVAL160", "haval160,3", 12}, {"HAVAL160", "haval160,3", 12},
Expand All @@ -77,6 +77,7 @@ static struct mhash_bc_entry mhash_to_hash[MHASH_NUM_ALGOS] = {
{"FNV164", "fnv164", 31}, {"FNV164", "fnv164", 31},
{"FNV1A64", "fnv1a64", 32}, {"FNV1A64", "fnv1a64", 32},
{"JOAAT", "joaat", 33}, {"JOAAT", "joaat", 33},
{"CRC32C", "crc32c", 34}, /* Castagnoli's CRC, used by iSCSI, SCTP, Btrfs, ext4, etc */
}; };
#endif #endif


Expand Down Expand Up @@ -1204,6 +1205,7 @@ PHP_MINIT_FUNCTION(hash)
php_hash_register_algo("adler32", &php_hash_adler32_ops); php_hash_register_algo("adler32", &php_hash_adler32_ops);
php_hash_register_algo("crc32", &php_hash_crc32_ops); php_hash_register_algo("crc32", &php_hash_crc32_ops);
php_hash_register_algo("crc32b", &php_hash_crc32b_ops); php_hash_register_algo("crc32b", &php_hash_crc32b_ops);
php_hash_register_algo("crc32c", &php_hash_crc32c_ops);
php_hash_register_algo("fnv132", &php_hash_fnv132_ops); php_hash_register_algo("fnv132", &php_hash_fnv132_ops);
php_hash_register_algo("fnv1a32", &php_hash_fnv1a32_ops); php_hash_register_algo("fnv1a32", &php_hash_fnv1a32_ops);
php_hash_register_algo("fnv164", &php_hash_fnv164_ops); php_hash_register_algo("fnv164", &php_hash_fnv164_ops);
Expand Down
28 changes: 24 additions & 4 deletions ext/hash/hash_crc32.c
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -44,7 +44,16 @@ PHP_HASH_API void PHP_CRC32BUpdate(PHP_CRC32_CTX *context, const unsigned char *
} }
} }


PHP_HASH_API void PHP_CRC32Final(unsigned char digest[4], PHP_CRC32_CTX *context) PHP_HASH_API void PHP_CRC32CUpdate(PHP_CRC32_CTX *context, const unsigned char *input, size_t len)
{
size_t i;

for (i = 0; i < len; ++i) {
context->state = (context->state >> 8) ^ crc32c_table[(context->state ^ input[i]) & 0xff];
}
}

PHP_HASH_API void PHP_CRC32LEFinal(unsigned char digest[4], PHP_CRC32_CTX *context)
{ {
context->state=~context->state; context->state=~context->state;
digest[3] = (unsigned char) ((context->state >> 24) & 0xff); digest[3] = (unsigned char) ((context->state >> 24) & 0xff);
Expand All @@ -54,7 +63,7 @@ PHP_HASH_API void PHP_CRC32Final(unsigned char digest[4], PHP_CRC32_CTX *context
context->state = 0; context->state = 0;
} }


PHP_HASH_API void PHP_CRC32BFinal(unsigned char digest[4], PHP_CRC32_CTX *context) PHP_HASH_API void PHP_CRC32BEFinal(unsigned char digest[4], PHP_CRC32_CTX *context)
{ {
context->state=~context->state; context->state=~context->state;
digest[0] = (unsigned char) ((context->state >> 24) & 0xff); digest[0] = (unsigned char) ((context->state >> 24) & 0xff);
Expand All @@ -73,7 +82,7 @@ PHP_HASH_API int PHP_CRC32Copy(const php_hash_ops *ops, PHP_CRC32_CTX *orig_cont
const php_hash_ops php_hash_crc32_ops = { const php_hash_ops php_hash_crc32_ops = {
(php_hash_init_func_t) PHP_CRC32Init, (php_hash_init_func_t) PHP_CRC32Init,
(php_hash_update_func_t) PHP_CRC32Update, (php_hash_update_func_t) PHP_CRC32Update,
(php_hash_final_func_t) PHP_CRC32Final, (php_hash_final_func_t) PHP_CRC32LEFinal,
(php_hash_copy_func_t) PHP_CRC32Copy, (php_hash_copy_func_t) PHP_CRC32Copy,
4, /* what to say here? */ 4, /* what to say here? */
4, 4,
Expand All @@ -84,7 +93,18 @@ const php_hash_ops php_hash_crc32_ops = {
const php_hash_ops php_hash_crc32b_ops = { const php_hash_ops php_hash_crc32b_ops = {
(php_hash_init_func_t) PHP_CRC32Init, (php_hash_init_func_t) PHP_CRC32Init,
(php_hash_update_func_t) PHP_CRC32BUpdate, (php_hash_update_func_t) PHP_CRC32BUpdate,
(php_hash_final_func_t) PHP_CRC32BFinal, (php_hash_final_func_t) PHP_CRC32BEFinal,
(php_hash_copy_func_t) PHP_CRC32Copy,
4, /* what to say here? */
4,
sizeof(PHP_CRC32_CTX),
0
};

const php_hash_ops php_hash_crc32c_ops = {
(php_hash_init_func_t) PHP_CRC32Init,
(php_hash_update_func_t) PHP_CRC32CUpdate,
(php_hash_final_func_t) PHP_CRC32BEFinal,
(php_hash_copy_func_t) PHP_CRC32Copy, (php_hash_copy_func_t) PHP_CRC32Copy,
4, /* what to say here? */ 4, /* what to say here? */
4, 4,
Expand Down
1 change: 1 addition & 0 deletions ext/hash/php_hash.h
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ extern const php_hash_ops php_hash_gost_crypto_ops;
extern const php_hash_ops php_hash_adler32_ops; extern const php_hash_ops php_hash_adler32_ops;
extern const php_hash_ops php_hash_crc32_ops; extern const php_hash_ops php_hash_crc32_ops;
extern const php_hash_ops php_hash_crc32b_ops; extern const php_hash_ops php_hash_crc32b_ops;
extern const php_hash_ops php_hash_crc32c_ops;
extern const php_hash_ops php_hash_fnv132_ops; extern const php_hash_ops php_hash_fnv132_ops;
extern const php_hash_ops php_hash_fnv1a32_ops; extern const php_hash_ops php_hash_fnv1a32_ops;
extern const php_hash_ops php_hash_fnv164_ops; extern const php_hash_ops php_hash_fnv164_ops;
Expand Down
4 changes: 3 additions & 1 deletion ext/hash/php_hash_crc32.h
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -28,7 +28,9 @@ typedef struct {
PHP_HASH_API void PHP_CRC32Init(PHP_CRC32_CTX *context); PHP_HASH_API void PHP_CRC32Init(PHP_CRC32_CTX *context);
PHP_HASH_API void PHP_CRC32Update(PHP_CRC32_CTX *context, const unsigned char *input, size_t len); PHP_HASH_API void PHP_CRC32Update(PHP_CRC32_CTX *context, const unsigned char *input, size_t len);
PHP_HASH_API void PHP_CRC32BUpdate(PHP_CRC32_CTX *context, const unsigned char *input, size_t len); PHP_HASH_API void PHP_CRC32BUpdate(PHP_CRC32_CTX *context, const unsigned char *input, size_t len);
PHP_HASH_API void PHP_CRC32Final(unsigned char digest[4], PHP_CRC32_CTX *context); PHP_HASH_API void PHP_CRC32CUpdate(PHP_CRC32_CTX *context, const unsigned char *input, size_t len);
PHP_HASH_API void PHP_CRC32LEFinal(unsigned char digest[4], PHP_CRC32_CTX *context);
PHP_HASH_API void PHP_CRC32BEFinal(unsigned char digest[4], PHP_CRC32_CTX *context);
PHP_HASH_API int PHP_CRC32Copy(const php_hash_ops *ops, PHP_CRC32_CTX *orig_context, PHP_CRC32_CTX *copy_context); PHP_HASH_API int PHP_CRC32Copy(const php_hash_ops *ops, PHP_CRC32_CTX *orig_context, PHP_CRC32_CTX *copy_context);


#endif #endif
68 changes: 68 additions & 0 deletions ext/hash/php_hash_crc32_tables.h
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -136,3 +136,71 @@ static const uint32_t crc32b_table[] = {
0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,
}; };

static const uint32_t crc32c_table[] = {
0x00000000, 0xf26b8303, 0xe13b70f7, 0x1350f3f4,
0xc79a971f, 0x35f1141c, 0x26a1e7e8, 0xd4ca64eb,
0x8ad958cf, 0x78b2dbcc, 0x6be22838, 0x9989ab3b,
0x4d43cfd0, 0xbf284cd3, 0xac78bf27, 0x5e133c24,
0x105ec76f, 0xe235446c, 0xf165b798, 0x030e349b,
0xd7c45070, 0x25afd373, 0x36ff2087, 0xc494a384,
0x9a879fa0, 0x68ec1ca3, 0x7bbcef57, 0x89d76c54,
0x5d1d08bf, 0xaf768bbc, 0xbc267848, 0x4e4dfb4b,
0x20bd8ede, 0xd2d60ddd, 0xc186fe29, 0x33ed7d2a,
0xe72719c1, 0x154c9ac2, 0x061c6936, 0xf477ea35,
0xaa64d611, 0x580f5512, 0x4b5fa6e6, 0xb93425e5,
0x6dfe410e, 0x9f95c20d, 0x8cc531f9, 0x7eaeb2fa,
0x30e349b1, 0xc288cab2, 0xd1d83946, 0x23b3ba45,
0xf779deae, 0x05125dad, 0x1642ae59, 0xe4292d5a,
0xba3a117e, 0x4851927d, 0x5b016189, 0xa96ae28a,
0x7da08661, 0x8fcb0562, 0x9c9bf696, 0x6ef07595,
0x417b1dbc, 0xb3109ebf, 0xa0406d4b, 0x522bee48,
0x86e18aa3, 0x748a09a0, 0x67dafa54, 0x95b17957,
0xcba24573, 0x39c9c670, 0x2a993584, 0xd8f2b687,
0x0c38d26c, 0xfe53516f, 0xed03a29b, 0x1f682198,
0x5125dad3, 0xa34e59d0, 0xb01eaa24, 0x42752927,
0x96bf4dcc, 0x64d4cecf, 0x77843d3b, 0x85efbe38,
0xdbfc821c, 0x2997011f, 0x3ac7f2eb, 0xc8ac71e8,
0x1c661503, 0xee0d9600, 0xfd5d65f4, 0x0f36e6f7,
0x61c69362, 0x93ad1061, 0x80fde395, 0x72966096,
0xa65c047d, 0x5437877e, 0x4767748a, 0xb50cf789,
0xeb1fcbad, 0x197448ae, 0x0a24bb5a, 0xf84f3859,
0x2c855cb2, 0xdeeedfb1, 0xcdbe2c45, 0x3fd5af46,
0x7198540d, 0x83f3d70e, 0x90a324fa, 0x62c8a7f9,
0xb602c312, 0x44694011, 0x5739b3e5, 0xa55230e6,
0xfb410cc2, 0x092a8fc1, 0x1a7a7c35, 0xe811ff36,
0x3cdb9bdd, 0xceb018de, 0xdde0eb2a, 0x2f8b6829,
0x82f63b78, 0x709db87b, 0x63cd4b8f, 0x91a6c88c,
0x456cac67, 0xb7072f64, 0xa457dc90, 0x563c5f93,
0x082f63b7, 0xfa44e0b4, 0xe9141340, 0x1b7f9043,
0xcfb5f4a8, 0x3dde77ab, 0x2e8e845f, 0xdce5075c,
0x92a8fc17, 0x60c37f14, 0x73938ce0, 0x81f80fe3,
0x55326b08, 0xa759e80b, 0xb4091bff, 0x466298fc,
0x1871a4d8, 0xea1a27db, 0xf94ad42f, 0x0b21572c,
0xdfeb33c7, 0x2d80b0c4, 0x3ed04330, 0xccbbc033,
0xa24bb5a6, 0x502036a5, 0x4370c551, 0xb11b4652,
0x65d122b9, 0x97baa1ba, 0x84ea524e, 0x7681d14d,
0x2892ed69, 0xdaf96e6a, 0xc9a99d9e, 0x3bc21e9d,
0xef087a76, 0x1d63f975, 0x0e330a81, 0xfc588982,
0xb21572c9, 0x407ef1ca, 0x532e023e, 0xa145813d,
0x758fe5d6, 0x87e466d5, 0x94b49521, 0x66df1622,
0x38cc2a06, 0xcaa7a905, 0xd9f75af1, 0x2b9cd9f2,
0xff56bd19, 0x0d3d3e1a, 0x1e6dcdee, 0xec064eed,
0xc38d26c4, 0x31e6a5c7, 0x22b65633, 0xd0ddd530,
0x0417b1db, 0xf67c32d8, 0xe52cc12c, 0x1747422f,
0x49547e0b, 0xbb3ffd08, 0xa86f0efc, 0x5a048dff,
0x8ecee914, 0x7ca56a17, 0x6ff599e3, 0x9d9e1ae0,
0xd3d3e1ab, 0x21b862a8, 0x32e8915c, 0xc083125f,
0x144976b4, 0xe622f5b7, 0xf5720643, 0x07198540,
0x590ab964, 0xab613a67, 0xb831c993, 0x4a5a4a90,
0x9e902e7b, 0x6cfbad78, 0x7fab5e8c, 0x8dc0dd8f,
0xe330a81a, 0x115b2b19, 0x020bd8ed, 0xf0605bee,
0x24aa3f05, 0xd6c1bc06, 0xc5914ff2, 0x37faccf1,
0x69e9f0d5, 0x9b8273d6, 0x88d28022, 0x7ab90321,
0xae7367ca, 0x5c18e4c9, 0x4f48173d, 0xbd23943e,
0xf36e6f75, 0x0105ec76, 0x12551f82, 0xe03e9c81,
0x34f4f86a, 0xc69f7b69, 0xd5cf889d, 0x27a40b9e,
0x79b737ba, 0x8bdcb4b9, 0x988c474d, 0x6ae7c44e,
0xbe2da0a5, 0x4c4623a6, 0x5f16d052, 0xad7d5351,
};

85 changes: 85 additions & 0 deletions ext/hash/tests/crc32.phpt
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -2,33 +2,118 @@
Hash: CRC32 algorithm Hash: CRC32 algorithm
--FILE-- --FILE--
<?php <?php
echo "crc32\n";
echo hash('crc32', ''), "\n"; echo hash('crc32', ''), "\n";
echo hash('crc32', 'a'), "\n"; echo hash('crc32', 'a'), "\n";
echo hash('crc32', 'abc'), "\n"; echo hash('crc32', 'abc'), "\n";
echo hash('crc32', 'message digest'), "\n"; echo hash('crc32', 'message digest'), "\n";
echo hash('crc32', 'abcdefghijklmnopqrstuvwxyz'), "\n"; echo hash('crc32', 'abcdefghijklmnopqrstuvwxyz'), "\n";
echo hash('crc32', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'), "\n"; echo hash('crc32', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'), "\n";
echo hash('crc32', '12345678901234567890123456789012345678901234567890123456789012345678901234567890'), "\n"; echo hash('crc32', '12345678901234567890123456789012345678901234567890123456789012345678901234567890'), "\n";

echo "crc32b\n";
echo hash('crc32b', ''), "\n"; echo hash('crc32b', ''), "\n";
echo hash('crc32b', 'a'), "\n"; echo hash('crc32b', 'a'), "\n";
echo hash('crc32b', 'abc'), "\n"; echo hash('crc32b', 'abc'), "\n";
echo hash('crc32b', 'message digest'), "\n"; echo hash('crc32b', 'message digest'), "\n";
echo hash('crc32b', 'abcdefghijklmnopqrstuvwxyz'), "\n"; echo hash('crc32b', 'abcdefghijklmnopqrstuvwxyz'), "\n";
echo hash('crc32b', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'), "\n"; echo hash('crc32b', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'), "\n";
echo hash('crc32b', '12345678901234567890123456789012345678901234567890123456789012345678901234567890'), "\n"; echo hash('crc32b', '12345678901234567890123456789012345678901234567890123456789012345678901234567890'), "\n";

echo "crc32c\n";
echo hash('crc32c', ''), "\n";
echo hash('crc32c', 'a'), "\n";
echo hash('crc32c', 'ab'), "\n";
echo hash('crc32c', 'abc'), "\n";
echo hash('crc32c', 'abcd'), "\n";
echo hash('crc32c', 'abcde'), "\n";
echo hash('crc32c', 'abcdef'), "\n";
echo hash('crc32c', 'abcdefg'), "\n";
echo hash('crc32c', 'abcdefgh'), "\n";
echo hash('crc32c', 'abcdefghi'), "\n";
echo hash('crc32c', 'abcdefghij'), "\n";
echo hash('crc32c', 'abcdefghijklmnopqrstuvwxyz'), "\n";
echo hash('crc32c', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'), "\n";
echo hash('crc32c', '12345678901234567890123456789012345678901234567890123456789012345678901234567890'), "\n";
echo hash('crc32c', 'message digest'), "\n";
echo hash('crc32c', "I can't remember anything"), "\n";
echo hash('crc32c', "I can't remember anything" . "Can’t tell if this is true or dream"), "\n";
echo hash('crc32c', 'Discard medicine more than two years old.'), "\n";
echo hash('crc32c', 'He who has a shady past knows that nice guys finish last.'), "\n";
echo hash('crc32c', "I wouldn't marry him with a ten foot pole."), "\n";
echo hash('crc32c', "Free! Free!/A trip/to Mars/for 900/empty jars/Burma Shave"), "\n";
echo hash('crc32c', "The days of the digital watch are numbered. -Tom Stoppard"), "\n";
echo hash('crc32c', "Nepal premier won't resign."), "\n";
echo hash('crc32c', "For every action there is an equal and opposite government program."), "\n";
echo hash('crc32c', "His money is twice tainted: 'taint yours and 'taint mine."), "\n";
echo hash('crc32c', "There is no reason for any individual to have a computer in their home. -Ken Olsen, 1977"), "\n";
echo hash('crc32c', "It's a tiny change to the code and not completely disgusting. - Bob Manchek"), "\n";
echo hash('crc32c', "size: a.out: bad magic"), "\n";
echo hash('crc32c', "The major problem is with sendmail. -Mark Horton"), "\n";
echo hash('crc32c', "Give me a rock, paper and scissors and I will move the world. CCFestoon"), "\n";
echo hash('crc32c', "If the enemy is within range, then so are you."), "\n";
echo hash('crc32c', "It's well we cannot hear the screams/That we create in others' dreams."), "\n";
echo hash('crc32c', "You remind me of a TV show, but that's all right: I watch it anyway."), "\n";
echo hash('crc32c', "C is as portable as Stonehedge!!"), "\n";
echo hash('crc32c', "Even if I could be Shakespeare, I think I should still choose to be Faraday. - A. Huxley"), "\n";
echo hash('crc32c', "The fugacity of a constituent in a mixture of gases at a given temperature is proportional to its mole fraction. Lewis-Randall Rule"), "\n";
echo hash('crc32c', "How can you write a big system without C++? -Paul Glick"), "\n";
echo hash('crc32c', "\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\v\f\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#\$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"), "\n";

?> ?>
--EXPECT-- --EXPECT--
crc32
00000000 00000000
6b9b9319 6b9b9319
73bb8c64 73bb8c64
5703c9bf 5703c9bf
9693bf77 9693bf77
882174a0 882174a0
96790816 96790816
crc32b
00000000 00000000
e8b7be43 e8b7be43
352441c2 352441c2
20159d7f 20159d7f
4c2750bd 4c2750bd
1fc2e6d2 1fc2e6d2
7ca94a72 7ca94a72
crc32c
00000000
c1d04330
e2a22936
364b3fb7
92c80a31
c450d697
53bceff1
e627f441
0a9421b7
2ddc99fc
e6599437
9ee6ef25
a245d57d
477a6781
02bd79d0
5e405e93
516ad412
b2cc01fe
0e28207f
be93f964
9e3be0c3
f505ef04
85d3dc82
c5142380
75eb77dd
91ebe9f7
f0b1168e
572b74e2
8a58a6d5
9c426c50
735400a4
bec49c95
a95a2079
de2e65c5
297a88ed
66ed1d8b
dcded527
9c44184b
6 changes: 6 additions & 0 deletions ext/hash/tests/hash-clone.phpt
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -125,6 +125,9 @@ string(8) "e5cfc160"
string(6) "crc32b" string(6) "crc32b"
string(8) "69147a4e" string(8) "69147a4e"
string(8) "69147a4e" string(8) "69147a4e"
string(6) "crc32c"
string(8) "5e405e93"
string(8) "5e405e93"
string(6) "fnv132" string(6) "fnv132"
string(8) "98139504" string(8) "98139504"
string(8) "98139504" string(8) "98139504"
Expand Down Expand Up @@ -281,6 +284,9 @@ string(8) "59f8d3d2"
string(6) "crc32b" string(6) "crc32b"
string(8) "69147a4e" string(8) "69147a4e"
string(8) "3ee63999" string(8) "3ee63999"
string(6) "crc32c"
string(8) "5e405e93"
string(8) "516ad412"
string(6) "fnv132" string(6) "fnv132"
string(8) "98139504" string(8) "98139504"
string(8) "59ad036f" string(8) "59ad036f"
Expand Down
4 changes: 3 additions & 1 deletion ext/hash/tests/hash_algos.phpt
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ var_dump(hash_algos());
===Done=== ===Done===
--EXPECTF-- --EXPECTF--
*** Testing hash_algos() : basic functionality *** *** Testing hash_algos() : basic functionality ***
array(52) { array(53) {
[%d]=> [%d]=>
string(3) "md2" string(3) "md2"
[%d]=> [%d]=>
Expand Down Expand Up @@ -82,6 +82,8 @@ array(52) {
[%d]=> [%d]=>
string(6) "crc32b" string(6) "crc32b"
[%d]=> [%d]=>
string(6) "crc32c"
[%d]=>
string(6) "fnv132" string(6) "fnv132"
[%d]=> [%d]=>
string(7) "fnv1a32" string(7) "fnv1a32"
Expand Down
6 changes: 6 additions & 0 deletions ext/hash/tests/hash_copy_001.phpt
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -125,6 +125,9 @@ string(8) "e5cfc160"
string(6) "crc32b" string(6) "crc32b"
string(8) "69147a4e" string(8) "69147a4e"
string(8) "69147a4e" string(8) "69147a4e"
string(6) "crc32c"
string(8) "5e405e93"
string(8) "5e405e93"
string(6) "fnv132" string(6) "fnv132"
string(8) "98139504" string(8) "98139504"
string(8) "98139504" string(8) "98139504"
Expand Down Expand Up @@ -281,6 +284,9 @@ string(8) "59f8d3d2"
string(6) "crc32b" string(6) "crc32b"
string(8) "69147a4e" string(8) "69147a4e"
string(8) "3ee63999" string(8) "3ee63999"
string(6) "crc32c"
string(8) "5e405e93"
string(8) "516ad412"
string(6) "fnv132" string(6) "fnv132"
string(8) "98139504" string(8) "98139504"
string(8) "59ad036f" string(8) "59ad036f"
Expand Down

0 comments on commit 09757eb

Please sign in to comment.