Fix bug #52827 (cURL leaks handle and causes assertion error (CURLOPT_STDERR)).

Patch by Gustavo.
This commit is contained in:
Adam Harvey committed 2010-09-14 10:58:59 +00:00
1 parent b6d8462ab2
commit 56ea98734c
2 files changed
+32 -1

No files matched your search

-1
View File
@@ -1826,7 +1826,6 @@ static int _php_curl_setopt(php_curl *ch, long option, zval **zvalue, zval *retu
}
zval_add_ref(zvalue);
ch->handlers->std_err = *zvalue;
zend_list_addref(Z_LVAL_PP(zvalue));
} else {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "the provided file handle is not writable");
RETVAL_FALSE;
+32
View File
@@ -0,0 +1,32 @@
--TEST--
Bug #52827 (curl_setopt with CURLOPT_STDERR erroneously increments the resource refcount)
--SKIPIF--
<?php
if (!extension_loaded('curl')) {
exit("skip curl extension not loaded");
}
?>
--FILE--
<?php
$s = fopen('php://temp/maxmemory=1024','wb+');
/* force conversion of inner stream to STDIO.
* This is not necessary in Windows because the
* cast to a FILE* handle in curl_setopt already
* forces the conversion in that platform. The
* reason for this conversion is that the memory
* stream has an ugly but working mechanism to
* prevent being double freed when it's encapsulated,
* while STDIO streams don't. */
$i = 0;
while ($i++ < 5000) {
fwrite($s, str_repeat('a',1024));
}
$handle=curl_init('http://www.example.com');
curl_setopt($handle, CURLOPT_STDERR, $s);
echo "Done.";
--EXPECTF--
Done.