mirror of
https://github.com/bdnugget/php-src.git
synced 2026-11-08 01:37:30 +00:00
Fix bug #52827 (cURL leaks handle and causes assertion error (CURLOPT_STDERR)).
Patch by Gustavo.
This commit is contained in:
1 parent
b6d8462ab2
commit
56ea98734c
2 files changed
+32
-1
No files matched your search
@@ -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;
|
||||
|
||||
@@ -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.
|
||||
Reference in new issue
Block a user