]> granicus.if.org Git - php/commitdiff
mhash algorithm parameter was modified when it was a zval, also update a test.
authorScott MacVicar <scottmac@php.net>
Thu, 18 Sep 2008 11:52:12 +0000 (11:52 +0000)
committerScott MacVicar <scottmac@php.net>
Thu, 18 Sep 2008 11:52:12 +0000 (11:52 +0000)
ext/hash/hash.c
ext/hash/tests/mhash_001.phpt
ext/hash/tests/mhash_004.phpt [new file with mode: 0644]

index f697badb310d842ff86665f41fb75d069635398b..54baadc20eef640e778ccbed731a654a03d7e910 100644 (file)
@@ -797,20 +797,22 @@ static void mhash_init(INIT_FUNC_ARGS)
    Hash data with hash */
 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);
                }
        }
 
index 2d40e68d64756ecf44f9c93ebd2611aa2b2f9bef..f70ebaf8ff642d5d98a36048d2d578370e825e59 100644 (file)
@@ -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 (file)
index 0000000..a9f1803
--- /dev/null
@@ -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)
+unicode(32) "098f6bcd4621d373cade4e832627b4f6"
+int(1)