From: Scott MacVicar Date: Thu, 18 Sep 2008 11:59:13 +0000 (+0000) Subject: MFH: mhash algorithm parameter was modified when it was a zval, also update a test. X-Git-Tag: BEFORE_NS_RULES_CHANGE~362 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d875c9f889a92e7a435527958de96498fa1c3133;p=php MFH: mhash algorithm parameter was modified when it was a zval, also update a test. --- diff --git a/NEWS b/NEWS index af4f41102e..2b8a3267a3 100644 --- a/NEWS +++ b/NEWS @@ -6,6 +6,8 @@ PHP NEWS - Changed error level E_ERROR into E_WARNING in Soap extension methods parameter validation. (Felipe) +- Fixed bug causing the algorithm parameter of mhash() to be modified. (Scott) + - Fixed bug #46106 (Memory leaks when using global statement). (Dmitry) - Fixed bug #46099 (Xsltprocessor::setProfiling - memory leak). (Felipe, Rob). - Fixed bug #46087 (DOMXPath - segfault on destruction of a cloned object). 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-- + +--FILE-- + +--EXPECT-- +int(1) +string(32) "098f6bcd4621d373cade4e832627b4f6" +int(1)