Commit 17f94f0a4cd for php
commit 17f94f0a4cdb3bb507ef535f86253a771d703d2c
Author: Jorg Sowa <jorg.sowa@gmail.com>
Date: Mon Oct 19 12:12:37 2026 +0200
Fix xxh64 seed deprecation emitted when no seed is given
Closes GH-24412
diff --git a/ext/hash/hash_xxhash.c b/ext/hash/hash_xxhash.c
index b7253b0c99c..a63149f2fc2 100644
--- a/ext/hash/hash_xxhash.c
+++ b/ext/hash/hash_xxhash.c
@@ -115,11 +115,13 @@ PHP_HASH_API void PHP_XXH64Init(PHP_XXH64_CTX *ctx, HashTable *args)
zval *seed = zend_hash_str_find_deref(args, "seed", sizeof("seed") - 1);
/* This might be a bit too restrictive, but thinking that a seed might be set
once and for all, it should be done a clean way. */
- if (seed && IS_LONG == Z_TYPE_P(seed)) {
- XXH64_reset(&ctx->s, (XXH64_hash_t)Z_LVAL_P(seed));
- return;
- } else {
- php_error_docref(NULL, E_DEPRECATED, "Passing a seed of a type other than int is deprecated because it is the same as setting the seed to 0");
+ if (seed) {
+ if (IS_LONG == Z_TYPE_P(seed)) {
+ XXH64_reset(&ctx->s, (XXH64_hash_t)Z_LVAL_P(seed));
+ return;
+ } else {
+ php_error_docref(NULL, E_DEPRECATED, "Passing a seed of a type other than int is deprecated because it is the same as setting the seed to 0");
+ }
}
}
diff --git a/ext/hash/tests/xxhash_options_without_seed.phpt b/ext/hash/tests/xxhash_options_without_seed.phpt
new file mode 100644
index 00000000000..87660f1f57f
--- /dev/null
+++ b/ext/hash/tests/xxhash_options_without_seed.phpt
@@ -0,0 +1,15 @@
+--TEST--
+Hash: xxHash options without a seed do not emit a deprecation
+--FILE--
+<?php
+
+foreach (["xxh32", "xxh64", "xxh3", "xxh128"] as $a) {
+ var_dump(hash($a, "x", options: []) === hash($a, "x"));
+}
+
+?>
+--EXPECT--
+bool(true)
+bool(true)
+bool(true)
+bool(true)