|
17 | 17 | #include "php_hash.h"
|
18 | 18 | #include "php_hash_xxhash.h"
|
19 | 19 |
|
| 20 | +static int php_hash_xxh32_unserialize( |
| 21 | + php_hashcontext_object *hash, zend_long magic, const zval *zv); |
| 22 | +static int php_hash_xxh64_unserialize( |
| 23 | + php_hashcontext_object *hash, zend_long magic, const zval *zv); |
| 24 | + |
20 | 25 | const php_hash_ops php_hash_xxh32_ops = {
|
21 | 26 | "xxh32",
|
22 | 27 | (php_hash_init_func_t) PHP_XXH32Init,
|
23 | 28 | (php_hash_update_func_t) PHP_XXH32Update,
|
24 | 29 | (php_hash_final_func_t) PHP_XXH32Final,
|
25 | 30 | (php_hash_copy_func_t) PHP_XXH32Copy,
|
26 | 31 | php_hash_serialize,
|
27 |
| - php_hash_unserialize, |
| 32 | + php_hash_xxh32_unserialize, |
28 | 33 | PHP_XXH32_SPEC,
|
29 | 34 | 4,
|
30 | 35 | 4,
|
@@ -72,14 +77,28 @@ PHP_HASH_API int PHP_XXH32Copy(const php_hash_ops *ops, PHP_XXH32_CTX *orig_cont
|
72 | 77 | return SUCCESS;
|
73 | 78 | }
|
74 | 79 |
|
| 80 | +static int php_hash_xxh32_unserialize( |
| 81 | + php_hashcontext_object *hash, zend_long magic, const zval *zv) |
| 82 | +{ |
| 83 | + PHP_XXH32_CTX *ctx = (PHP_XXH32_CTX *) hash->context; |
| 84 | + int r = FAILURE; |
| 85 | + if (magic == PHP_HASH_SERIALIZE_MAGIC_SPEC |
| 86 | + && (r = php_hash_unserialize_spec(hash, zv, PHP_XXH32_SPEC)) == SUCCESS |
| 87 | + && ctx->s.memsize < 32) { |
| 88 | + return SUCCESS; |
| 89 | + } else { |
| 90 | + return r != SUCCESS ? r : -2000; |
| 91 | + } |
| 92 | +} |
| 93 | + |
75 | 94 | const php_hash_ops php_hash_xxh64_ops = {
|
76 | 95 | "xxh64",
|
77 | 96 | (php_hash_init_func_t) PHP_XXH64Init,
|
78 | 97 | (php_hash_update_func_t) PHP_XXH64Update,
|
79 | 98 | (php_hash_final_func_t) PHP_XXH64Final,
|
80 | 99 | (php_hash_copy_func_t) PHP_XXH64Copy,
|
81 | 100 | php_hash_serialize,
|
82 |
| - php_hash_unserialize, |
| 101 | + php_hash_xxh64_unserialize, |
83 | 102 | PHP_XXH64_SPEC,
|
84 | 103 | 8,
|
85 | 104 | 8,
|
@@ -188,6 +207,20 @@ PHP_HASH_API int PHP_XXH3_64_Copy(const php_hash_ops *ops, PHP_XXH3_64_CTX *orig
|
188 | 207 | return SUCCESS;
|
189 | 208 | }
|
190 | 209 |
|
| 210 | +static int php_hash_xxh64_unserialize( |
| 211 | + php_hashcontext_object *hash, zend_long magic, const zval *zv) |
| 212 | +{ |
| 213 | + PHP_XXH64_CTX *ctx = (PHP_XXH64_CTX *) hash->context; |
| 214 | + int r = FAILURE; |
| 215 | + if (magic == PHP_HASH_SERIALIZE_MAGIC_SPEC |
| 216 | + && (r = php_hash_unserialize_spec(hash, zv, PHP_XXH64_SPEC)) == SUCCESS |
| 217 | + && ctx->s.memsize < 32) { |
| 218 | + return SUCCESS; |
| 219 | + } else { |
| 220 | + return r != SUCCESS ? r : -2000; |
| 221 | + } |
| 222 | +} |
| 223 | + |
191 | 224 | const php_hash_ops php_hash_xxh3_128_ops = {
|
192 | 225 | "xxh128",
|
193 | 226 | (php_hash_init_func_t) PHP_XXH3_128_Init,
|
|
0 commit comments