summaryrefslogtreecommitdiff
path: root/ext/hash
diff options
context:
space:
mode:
authorScott MacVicar <scottmac@php.net>2008-09-18 11:59:13 +0000
committerScott MacVicar <scottmac@php.net>2008-09-18 11:59:13 +0000
commitd875c9f889a92e7a435527958de96498fa1c3133 (patch)
tree330bd803112660bf1a341cefcd2517bd519fa6aa /ext/hash
parent766ad69755c67cceb50b4ab581b9262be4002f4b (diff)
downloadphp-git-d875c9f889a92e7a435527958de96498fa1c3133.tar.gz
MFH: mhash algorithm parameter was modified when it was a zval, also update a test.
Diffstat (limited to 'ext/hash')
-rw-r--r--ext/hash/hash.c12
-rw-r--r--ext/hash/tests/mhash_001.phpt2
-rw-r--r--ext/hash/tests/mhash_004.phpt21
3 files changed, 29 insertions, 6 deletions
diff --git a/ext/hash/hash.c b/ext/hash/hash.c
index 6d7c33b035..ce333f2ed9 100644
--- a/ext/hash/hash.c
+++ b/ext/hash/hash.c
@@ -626,20 +626,22 @@ static void mhash_init(INIT_FUNC_ARGS)
PHP_FUNCTION(mhash)
{
- zval *z_algorithm;
- int algorithm;
+ zval **z_algorithm;
+ long algorithm;
- if (zend_parse_parameters(1 TSRMLS_CC, "z", &z_algorithm) == FAILURE) {
+ if (zend_parse_parameters(1 TSRMLS_CC, "Z", &z_algorithm) == FAILURE) {
return;
}
- algorithm = Z_LVAL_P(z_algorithm);
+ SEPARATE_ZVAL(z_algorithm);
+ convert_to_long_ex(z_algorithm);
+ algorithm = Z_LVAL_PP(z_algorithm);
/* need to conver the first parameter from int to string */
if (algorithm >= 0 && algorithm < MHASH_NUM_ALGOS) {
struct mhash_bc_entry algorithm_lookup = mhash_to_hash[algorithm];
if (algorithm_lookup.hash_name) {
- ZVAL_STRING(z_algorithm, algorithm_lookup.hash_name, 1);
+ ZVAL_STRING(*z_algorithm, algorithm_lookup.hash_name, 1);
}
}
diff --git a/ext/hash/tests/mhash_001.phpt b/ext/hash/tests/mhash_001.phpt
index 2d40e68d64..f70ebaf8ff 100644
--- a/ext/hash/tests/mhash_001.phpt
+++ b/ext/hash/tests/mhash_001.phpt
@@ -33,7 +33,7 @@ foreach ($supported_hash_al as $hash=>$wanted) {
echo "$hash: ";
var_dump($wanted);
echo "$hash: ";
- var_dump($result);
+ var_dump(bin2hex($result));
}
echo "\n";
}
diff --git a/ext/hash/tests/mhash_004.phpt b/ext/hash/tests/mhash_004.phpt
new file mode 100644
index 0000000000..2721663332
--- /dev/null
+++ b/ext/hash/tests/mhash_004.phpt
@@ -0,0 +1,21 @@
+--TEST--
+mhash() modifying algorithm parameter
+--INI--
+magic_quotes_runtime=0
+--SKIPIF--
+<?php
+ include "skip_mhash.inc";
+?>
+--FILE--
+<?php
+
+$algo = MHASH_MD5;
+var_dump($algo);
+var_dump(bin2hex(mhash($algo, "test")));
+var_dump($algo);
+
+?>
+--EXPECT--
+int(1)
+string(32) "098f6bcd4621d373cade4e832627b4f6"
+int(1)