From: Ilia Alshanetsky Date: Sun, 30 Nov 2008 17:30:50 +0000 (+0000) Subject: Fixed bug #46711 (cURL curl_setopt leaks memory in foreach loops). X-Git-Tag: php-5.3.0alpha2~33 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fdc286abeeaa01905568553d7022fbe013cffc3a;p=php Fixed bug #46711 (cURL curl_setopt leaks memory in foreach loops). --- diff --git a/ext/curl/interface.c b/ext/curl/interface.c index c1a55c17b5..eee863df94 100644 --- a/ext/curl/interface.c +++ b/ext/curl/interface.c @@ -1733,17 +1733,17 @@ static int _php_curl_setopt(php_curl *ch, long option, zval **zvalue, zval *retu Set an option for a cURL transfer */ PHP_FUNCTION(curl_setopt) { - zval *zid, *zvalue; + zval *zid, **zvalue; long zoption; php_curl *ch; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rlz", &zid, &zoption, &zvalue) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rlZ", &zid, &zoption, &zvalue) == FAILURE) { return; } ZEND_FETCH_RESOURCE(ch, php_curl *, &zid, -1, le_curl_name, le_curl); - if (!_php_curl_setopt(ch, zoption, &zvalue, return_value TSRMLS_CC)) { + if (!_php_curl_setopt(ch, zoption, zvalue, return_value TSRMLS_CC)) { RETURN_TRUE; } else { RETURN_FALSE; diff --git a/ext/curl/tests/bug46711.phpt b/ext/curl/tests/bug46711.phpt new file mode 100644 index 0000000000..3f728c8591 --- /dev/null +++ b/ext/curl/tests/bug46711.phpt @@ -0,0 +1,31 @@ +--TEST-- +#46711 (lost memory when foreach is used for values passed to curl_setopt()) +--SKIP-- + +--FILE-- + TRUE, + CURLOPT_BINARYTRANSFER => TRUE +); + +curl_setopt( $ch, CURLOPT_AUTOREFERER , TRUE ); + +foreach( $opt as $option => $value ) { + curl_setopt( $ch, $option, $value ); +} + +var_dump($opt); // with this bug, $opt[58] becomes NULL + +?> +--EXPECT-- +array(2) { + [58]=> + bool(true) + [19914]=> + bool(true) +}