]> granicus.if.org Git - php/commitdiff
Fix leak caused by fix to bug #65667
authorNikita Popov <nikic@php.net>
Mon, 30 Dec 2013 12:46:55 +0000 (13:46 +0100)
committerNikita Popov <nikic@php.net>
Mon, 30 Dec 2013 12:53:12 +0000 (13:53 +0100)
ftp->stream is now closed in the ftp resource dtor.

ext/ftp/ftp.c
ext/ftp/php_ftp.c

index b82017e21f2a726e3416f06010ca6efc648d9642..fce9ecf8419fc84dea2e89316d35ed09a5d8efa5 100644 (file)
@@ -178,6 +178,10 @@ ftp_close(ftpbuf_t *ftp)
        if (ftp->data) {
                data_close(ftp, ftp->data);
        }
+       if (ftp->stream && ftp->closestream) {
+               TSRMLS_FETCH();
+               php_stream_close(ftp->stream);
+       }
        if (ftp->fd != -1) {
 #if HAVE_OPENSSL_EXT
                if (ftp->ssl_active) {
index 21e13ea46056326a5008ca0b5e06f93b14a21fe0..99f3808c38a72fef579b8dddc53cf6911e74b560 100644 (file)
@@ -963,6 +963,7 @@ PHP_FUNCTION(ftp_nb_get)
 
        if ((ret = ftp_nb_get(ftp, outstream, remote, xtype, resumepos TSRMLS_CC)) == PHP_FTP_FAILED) {
                php_stream_close(outstream);
+               ftp->stream = NULL;
                VCWD_UNLINK(local);
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ftp->inbuf);
                RETURN_LONG(PHP_FTP_FAILED);
@@ -970,6 +971,7 @@ PHP_FUNCTION(ftp_nb_get)
 
        if (ret == PHP_FTP_FINISHED){
                php_stream_close(outstream);
+               ftp->stream = NULL;
        }
 
        RETURN_LONG(ret);
@@ -1003,6 +1005,7 @@ PHP_FUNCTION(ftp_nb_continue)
 
        if (ret != PHP_FTP_MOREDATA && ftp->closestream) {
                php_stream_close(ftp->stream);
+               ftp->stream = NULL;
        }
 
        if (ret == PHP_FTP_FAILED) {
@@ -1214,6 +1217,7 @@ PHP_FUNCTION(ftp_nb_put)
 
        if (ret != PHP_FTP_MOREDATA) {
                php_stream_close(instream);
+               ftp->stream = NULL;
        }
 
        if (ret == PHP_FTP_FAILED) {