svn: /php/php-src/ branches/PHP_5_3/ext/curl/interface.c branches/PHP_5_4/ext/curl/interface.c trunk/ext/curl/interface.c
| From: | Pierrick Charron | Date: | Mon, 21 Nov 2011 02:29:24 +0000 |
| Subject: | svn: /php/php-src/ branches/PHP_5_3/ext/curl/interface.c branches/PHP_5_4/ext/curl/interface.c trunk/ext/curl/interface.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-67065@lists.php.net to get a copy of this message | ||
pierrick Mon, 21 Nov 2011 02:29:24 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=319593
Log:
Fix memory leak
Changed paths:
U php/php-src/branches/PHP_5_3/ext/curl/interface.c
U php/php-src/branches/PHP_5_4/ext/curl/interface.c
U php/php-src/trunk/ext/curl/interface.c
Modified: php/php-src/branches/PHP_5_3/ext/curl/interface.c
===================================================================
--- php/php-src/branches/PHP_5_3/ext/curl/interface.c 2011-11-21 02:10:57 UTC (rev 319592)
+++ php/php-src/branches/PHP_5_3/ext/curl/interface.c 2011-11-21 02:29:24 UTC (rev 319593)
@@ -1422,6 +1422,9 @@
(*ch)->header.str_len = 0;
memset(&(*ch)->err, 0, sizeof((*ch)->err));
+ (*ch)->handlers->write->stream = NULL;
+ (*ch)->handlers->write_header->stream = NULL;
+ (*ch)->handlers->read->stream = NULL;
zend_llist_init(&(*ch)->to_free.str, sizeof(char *), (llist_dtor_func_t)
curl_free_string, 0);
zend_llist_init(&(*ch)->to_free.slist, sizeof(struct curl_slist), (llist_dtor_func_t)
curl_free_slist, 0);
@@ -1890,6 +1893,9 @@
switch (option) {
case CURLOPT_FILE:
if (((php_stream *) what)->mode[0] != 'r' || ((php_stream *) what)->mode[1] ==
'+') {
+ if (ch->handlers->write->stream) {
+ Z_DELREF_P(ch->handlers->write->stream);
+ }
Z_ADDREF_PP(zvalue);
ch->handlers->write->fp = fp;
ch->handlers->write->method = PHP_CURL_FILE;
@@ -1902,6 +1908,9 @@
break;
case CURLOPT_WRITEHEADER:
if (((php_stream *) what)->mode[0] != 'r' || ((php_stream *) what)->mode[1] ==
'+') {
+ if (ch->handlers->write_header->stream) {
+ Z_DELREF_P(ch->handlers->write_header->stream);
+ }
Z_ADDREF_PP(zvalue);
ch->handlers->write_header->fp = fp;
ch->handlers->write_header->method = PHP_CURL_FILE;
@@ -1913,6 +1922,9 @@
}
break;
case CURLOPT_INFILE:
+ if (ch->handlers->read->stream) {
+ Z_DELREF_P(ch->handlers->read->stream);
+ }
Z_ADDREF_PP(zvalue);
ch->handlers->read->fp = fp;
ch->handlers->read->fd = Z_LVAL_PP(zvalue);
Modified: php/php-src/branches/PHP_5_4/ext/curl/interface.c
===================================================================
--- php/php-src/branches/PHP_5_4/ext/curl/interface.c 2011-11-21 02:10:57 UTC (rev 319592)
+++ php/php-src/branches/PHP_5_4/ext/curl/interface.c 2011-11-21 02:29:24 UTC (rev 319593)
@@ -1420,6 +1420,9 @@
(*ch)->header.str_len = 0;
memset(&(*ch)->err, 0, sizeof((*ch)->err));
+ (*ch)->handlers->write->stream = NULL;
+ (*ch)->handlers->write_header->stream = NULL;
+ (*ch)->handlers->read->stream = NULL;
zend_llist_init(&(*ch)->to_free.str, sizeof(char *), (llist_dtor_func_t)
curl_free_string, 0);
zend_llist_init(&(*ch)->to_free.slist, sizeof(struct curl_slist), (llist_dtor_func_t)
curl_free_slist, 0);
@@ -1886,6 +1889,9 @@
switch (option) {
case CURLOPT_FILE:
if (((php_stream *) what)->mode[0] != 'r' || ((php_stream *) what)->mode[1] ==
'+') {
+ if (ch->handlers->write->stream) {
+ Z_DELREF_P(ch->handlers->write->stream);
+ }
Z_ADDREF_PP(zvalue);
ch->handlers->write->fp = fp;
ch->handlers->write->method = PHP_CURL_FILE;
@@ -1898,6 +1904,9 @@
break;
case CURLOPT_WRITEHEADER:
if (((php_stream *) what)->mode[0] != 'r' || ((php_stream *) what)->mode[1] ==
'+') {
+ if (ch->handlers->write_header->stream) {
+ Z_DELREF_P(ch->handlers->write_header->stream);
+ }
Z_ADDREF_PP(zvalue);
ch->handlers->write_header->fp = fp;
ch->handlers->write_header->method = PHP_CURL_FILE;
@@ -1909,6 +1918,9 @@
}
break;
case CURLOPT_INFILE:
+ if (ch->handlers->read->stream) {
+ Z_DELREF_P(ch->handlers->read->stream);
+ }
Z_ADDREF_PP(zvalue);
ch->handlers->read->fp = fp;
ch->handlers->read->fd = Z_LVAL_PP(zvalue);
Modified: php/php-src/trunk/ext/curl/interface.c
===================================================================
--- php/php-src/trunk/ext/curl/interface.c 2011-11-21 02:10:57 UTC (rev 319592)
+++ php/php-src/trunk/ext/curl/interface.c 2011-11-21 02:29:24 UTC (rev 319593)
@@ -1420,6 +1420,9 @@
(*ch)->header.str_len = 0;
memset(&(*ch)->err, 0, sizeof((*ch)->err));
+ (*ch)->handlers->write->stream = NULL;
+ (*ch)->handlers->write_header->stream = NULL;
+ (*ch)->handlers->read->stream = NULL;
zend_llist_init(&(*ch)->to_free.str, sizeof(char *), (llist_dtor_func_t)
curl_free_string, 0);
zend_llist_init(&(*ch)->to_free.slist, sizeof(struct curl_slist), (llist_dtor_func_t)
curl_free_slist, 0);
@@ -1886,6 +1889,9 @@
switch (option) {
case CURLOPT_FILE:
if (((php_stream *) what)->mode[0] != 'r' || ((php_stream *) what)->mode[1] ==
'+') {
+ if (ch->handlers->write->stream) {
+ Z_DELREF_P(ch->handlers->write->stream);
+ }
Z_ADDREF_PP(zvalue);
ch->handlers->write->fp = fp;
ch->handlers->write->method = PHP_CURL_FILE;
@@ -1898,6 +1904,9 @@
break;
case CURLOPT_WRITEHEADER:
if (((php_stream *) what)->mode[0] != 'r' || ((php_stream *) what)->mode[1] ==
'+') {
+ if (ch->handlers->write_header->stream) {
+ Z_DELREF_P(ch->handlers->write_header->stream);
+ }
Z_ADDREF_PP(zvalue);
ch->handlers->write_header->fp = fp;
ch->handlers->write_header->method = PHP_CURL_FILE;
@@ -1909,6 +1918,9 @@
}
break;
case CURLOPT_INFILE:
+ if (ch->handlers->read->stream) {
+ Z_DELREF_P(ch->handlers->read->stream);
+ }
Z_ADDREF_PP(zvalue);
ch->handlers->read->fp = fp;
ch->handlers->read->fd = Z_LVAL_PP(zvalue);