]> granicus.if.org Git - php/commitdiff
Fixed bug #46711 (cURL curl_setopt leaks memory in foreach loops).
authorIlia Alshanetsky <iliaa@php.net>
Sun, 30 Nov 2008 17:30:50 +0000 (17:30 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Sun, 30 Nov 2008 17:30:50 +0000 (17:30 +0000)
ext/curl/interface.c
ext/curl/tests/bug46711.phpt [new file with mode: 0644]

index c1a55c17b59f7b46b307962c30fc59a81a3b070e..eee863df943b9bf1e2cd24c6f354a9fa21568209 100644 (file)
@@ -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 (file)
index 0000000..3f728c8
--- /dev/null
@@ -0,0 +1,31 @@
+--TEST--
+#46711 (lost memory when foreach is used for values passed to curl_setopt())
+--SKIP--
+<?php
+if (!extension_loaded('curl')) die('skip need curl to work');
+?>
+--FILE--
+<?php
+$ch = curl_init();
+
+$opt = array(
+       CURLOPT_AUTOREFERER  => 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)
+}