<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[48089] trunk/src/wp-admin/includes: Coding Standards: Add some space around control structures in `WP_Filesystem_*` classes for consistency and better readability.</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { white-space: pre-line; overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta" style="font-size: 105%">
<dt style="float: left; width: 6em; font-weight: bold">Revision</dt> <dd><a style="font-weight: bold" href="https://core.trac.wordpress.org/changeset/48089">48089</a><script type="application/ld+json">{"@context":"http://schema.org","@type":"EmailMessage","description":"Review this Commit","action":{"@type":"ViewAction","url":"https://core.trac.wordpress.org/changeset/48089","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>SergeyBiryukov</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2020-06-19 10:34:26 +0000 (Fri, 19 Jun 2020)</dd>
</dl>

<pre style='padding-left: 1em; margin: 2em 0; border-left: 2px solid #ccc; line-height: 1.25; font-size: 105%; font-family: sans-serif'>Coding Standards: Add some space around control structures in `WP_Filesystem_*` classes for consistency and better readability.

Additionally, synchronize `$tempfile` and `$temphandle` variable names in `WP_Filesystem_FTPext` and `WP_Filesystem_ftpsockets`.

See <a href="https://core.trac.wordpress.org/ticket/49542">#49542</a>.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunksrcwpadminincludesclasswpfilesystembasephp">trunk/src/wp-admin/includes/class-wp-filesystem-base.php</a></li>
<li><a href="#trunksrcwpadminincludesclasswpfilesystemdirectphp">trunk/src/wp-admin/includes/class-wp-filesystem-direct.php</a></li>
<li><a href="#trunksrcwpadminincludesclasswpfilesystemftpextphp">trunk/src/wp-admin/includes/class-wp-filesystem-ftpext.php</a></li>
<li><a href="#trunksrcwpadminincludesclasswpfilesystemftpsocketsphp">trunk/src/wp-admin/includes/class-wp-filesystem-ftpsockets.php</a></li>
<li><a href="#trunksrcwpadminincludesclasswpfilesystemssh2php">trunk/src/wp-admin/includes/class-wp-filesystem-ssh2.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunksrcwpadminincludesclasswpfilesystembasephp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-admin/includes/class-wp-filesystem-base.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-admin/includes/class-wp-filesystem-base.php  2020-06-18 23:00:31 UTC (rev 48088)
+++ trunk/src/wp-admin/includes/class-wp-filesystem-base.php    2020-06-19 10:34:26 UTC (rev 48089)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -55,11 +55,13 @@
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="cx" style="display: block; padding: 0 10px">        public function abspath() {
</span><span class="cx" style="display: block; padding: 0 10px">                $folder = $this->find_folder( ABSPATH );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 // Perhaps the FTP folder is rooted at the WordPress install.
</span><span class="cx" style="display: block; padding: 0 10px">                // Check for wp-includes folder in root. Could have some false positives, but rare.
</span><span class="cx" style="display: block; padding: 0 10px">                if ( ! $folder && $this->is_dir( '/' . WPINC ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $folder = '/';
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $folder;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -188,6 +190,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                if ( ! defined( $constant ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                        continue;
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                                 if ( $folder === $dir ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                        return trailingslashit( constant( $constant ) );
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -198,6 +201,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                if ( ! defined( $constant ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                        continue;
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                                 if ( 0 === stripos( $folder, $dir ) ) { // $folder starts with $dir.
</span><span class="cx" style="display: block; padding: 0 10px">                                        $potential_folder = preg_replace( '#^' . preg_quote( $dir, '#' ) . '/#i', trailingslashit( constant( $constant ) ), $folder );
</span><span class="cx" style="display: block; padding: 0 10px">                                        $potential_folder = trailingslashit( $potential_folder );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -204,6 +208,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                        if ( $this->is_dir( $potential_folder ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                                $this->cache[ $folder ] = $potential_folder;
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                                                 return $potential_folder;
</span><span class="cx" style="display: block; padding: 0 10px">                                        }
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -210,6 +215,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px">                } elseif ( 'direct' === $this->method ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $folder = str_replace( '\\', '/', $folder ); // Windows path sanitisation.
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                         return trailingslashit( $folder );
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -223,12 +229,16 @@
</span><span class="cx" style="display: block; padding: 0 10px">                if ( $this->exists( $folder ) ) { // Folder exists at that absolute path.
</span><span class="cx" style="display: block; padding: 0 10px">                        $folder                 = trailingslashit( $folder );
</span><span class="cx" style="display: block; padding: 0 10px">                        $this->cache[ $folder ] = $folder;
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                         return $folder;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 $return = $this->search_for_folder( $folder );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( $return ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $this->cache[ $folder ] = $return;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $return;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -279,6 +289,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                // Let's try that folder:
</span><span class="cx" style="display: block; padding: 0 10px">                                $newdir = trailingslashit( path_join( $base, $key ) );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                                 if ( $this->verbose ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                        /* translators: %s: Directory name. */
</span><span class="cx" style="display: block; padding: 0 10px">                                        printf( "\n" . __( 'Changing to %s' ) . "<br/>\n", $newdir );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -287,6 +298,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                // Only search for the remaining path tokens in the directory, not the full path again.
</span><span class="cx" style="display: block; padding: 0 10px">                                $newfolder = implode( '/', array_slice( $folder_parts, $index + 1 ) );
</span><span class="cx" style="display: block; padding: 0 10px">                                $ret       = $this->search_for_folder( $newfolder, $newdir, $loop );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                                 if ( $ret ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                        return $ret;
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -300,6 +312,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                /* translators: %s: Directory name. */
</span><span class="cx" style="display: block; padding: 0 10px">                                printf( "\n" . __( 'Found %s' ) . "<br/>\n", $base . $last_path );
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                         return trailingslashit( $base . $last_path );
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -329,6 +342,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="cx" style="display: block; padding: 0 10px">        public function gethchmod( $file ) {
</span><span class="cx" style="display: block; padding: 0 10px">                $perms = intval( $this->getchmod( $file ), 8 );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( ( $perms & 0xC000 ) == 0xC000 ) { // Socket.
</span><span class="cx" style="display: block; padding: 0 10px">                        $info = 's';
</span><span class="cx" style="display: block; padding: 0 10px">                } elseif ( ( $perms & 0xA000 ) == 0xA000 ) { // Symbolic Link.
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -367,6 +381,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                $info .= ( ( $perms & 0x0001 ) ?
</span><span class="cx" style="display: block; padding: 0 10px">                                        ( ( $perms & 0x0200 ) ? 't' : 'x' ) :
</span><span class="cx" style="display: block; padding: 0 10px">                                        ( ( $perms & 0x0200 ) ? 'T' : '-' ) );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $info;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -402,6 +417,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                for ( $i = 0, $c = count( $attarray ); $i < $c; $i++ ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $key = array_search( $attarray[ $i ], $legal, true );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                         if ( $key ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                $realmode .= $legal[ $key ];
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -420,6 +436,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                $newmode .= $mode[1] + $mode[2] + $mode[3];
</span><span class="cx" style="display: block; padding: 0 10px">                $newmode .= $mode[4] + $mode[5] + $mode[6];
</span><span class="cx" style="display: block; padding: 0 10px">                $newmode .= $mode[7] + $mode[8] + $mode[9];
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $newmode;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span></span></pre></div>
<a id="trunksrcwpadminincludesclasswpfilesystemdirectphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-admin/includes/class-wp-filesystem-direct.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-admin/includes/class-wp-filesystem-direct.php        2020-06-18 23:00:31 UTC (rev 48088)
+++ trunk/src/wp-admin/includes/class-wp-filesystem-direct.php  2020-06-19 10:34:26 UTC (rev 48089)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -64,6 +64,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="cx" style="display: block; padding: 0 10px">        public function put_contents( $file, $contents, $mode = false ) {
</span><span class="cx" style="display: block; padding: 0 10px">                $fp = @fopen( $file, 'wb' );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( ! $fp ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -125,15 +126,19 @@
</span><span class="cx" style="display: block; padding: 0 10px">                if ( ! $this->exists( $file ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( ! $recursive ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return chgrp( $file, $group );
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( ! $this->is_dir( $file ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return chgrp( $file, $group );
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 // Is a directory, and we want recursive.
</span><span class="cx" style="display: block; padding: 0 10px">                $file     = trailingslashit( $file );
</span><span class="cx" style="display: block; padding: 0 10px">                $filelist = $this->dirlist( $file );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 foreach ( $filelist as $filename ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $this->chgrp( $file . $filename, $group, $recursive );
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -167,9 +172,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">                if ( ! $recursive || ! $this->is_dir( $file ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return chmod( $file, $mode );
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 // Is a directory, and we want recursive.
</span><span class="cx" style="display: block; padding: 0 10px">                $file     = trailingslashit( $file );
</span><span class="cx" style="display: block; padding: 0 10px">                $filelist = $this->dirlist( $file );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 foreach ( (array) $filelist as $filename => $filemeta ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $this->chmod( $file . $filename, $mode, $recursive );
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -192,17 +199,22 @@
</span><span class="cx" style="display: block; padding: 0 10px">                if ( ! $this->exists( $file ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( ! $recursive ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return chown( $file, $owner );
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( ! $this->is_dir( $file ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return chown( $file, $owner );
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 // Is a directory, and we want recursive.
</span><span class="cx" style="display: block; padding: 0 10px">                $filelist = $this->dirlist( $file );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 foreach ( $filelist as $filename ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $this->chown( $file . '/' . $filename, $owner, $recursive );
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return true;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -216,16 +228,21 @@
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="cx" style="display: block; padding: 0 10px">        public function owner( $file ) {
</span><span class="cx" style="display: block; padding: 0 10px">                $owneruid = @fileowner( $file );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( ! $owneruid ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( ! function_exists( 'posix_getpwuid' ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return $owneruid;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 $ownerarray = posix_getpwuid( $owneruid );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( ! $ownerarray ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $ownerarray['name'];
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -253,16 +270,21 @@
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="cx" style="display: block; padding: 0 10px">        public function group( $file ) {
</span><span class="cx" style="display: block; padding: 0 10px">                $gid = @filegroup( $file );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( ! $gid ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( ! function_exists( 'posix_getgrgid' ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return $gid;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 $grouparray = posix_getgrgid( $gid );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( ! $grouparray ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $grouparray['name'];
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -285,9 +307,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                $rtval = copy( $source, $destination );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( $mode ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $this->chmod( $destination, $mode );
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $rtval;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -314,6 +338,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                if ( $this->copy( $source, $destination, $overwrite ) && $this->exists( $destination ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $this->delete( $source );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                         return true;
</span><span class="cx" style="display: block; padding: 0 10px">                } else {
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -337,11 +362,13 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        // Some filesystems report this as /, which can cause non-expected recursive deletion of all files in the filesystem.
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 $file = str_replace( '\\', '/', $file ); // For Win32, occasional problems deleting files otherwise.
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                if ( 'f' === $type || $this->is_file( $file ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return @unlink( $file );
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( ! $recursive && $this->is_dir( $file ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return @rmdir( $file );
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -351,6 +378,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                $filelist = $this->dirlist( $file, true );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                $retval = true;
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( is_array( $filelist ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        foreach ( $filelist as $filename => $fileinfo ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                if ( ! $this->delete( $file . $filename, $recursive, $fileinfo['type'] ) ) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -480,9 +508,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">                if ( 0 == $time ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $time = time();
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( 0 == $atime ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $atime = time();
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return touch( $file, $time, $atime );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -503,6 +533,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">        public function mkdir( $path, $chmod = false, $chown = false, $chgrp = false ) {
</span><span class="cx" style="display: block; padding: 0 10px">                // Safe mode fails with a trailing slash under certain PHP versions.
</span><span class="cx" style="display: block; padding: 0 10px">                $path = untrailingslashit( $path );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( empty( $path ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -514,13 +545,17 @@
</span><span class="cx" style="display: block; padding: 0 10px">                if ( ! @mkdir( $path ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 $this->chmod( $path, $chmod );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( $chown ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $this->chown( $path, $chown );
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( $chgrp ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $this->chgrp( $path, $chgrp );
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return true;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -576,6 +611,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                $dir = dir( $path );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( ! $dir ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -619,8 +655,10 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        $ret[ $struc['name'] ] = $struc;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 $dir->close();
</span><span class="cx" style="display: block; padding: 0 10px">                unset( $dir );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $ret;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span></span></pre></div>
<a id="trunksrcwpadminincludesclasswpfilesystemftpextphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-admin/includes/class-wp-filesystem-ftpext.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-admin/includes/class-wp-filesystem-ftpext.php        2020-06-18 23:00:31 UTC (rev 48088)
+++ trunk/src/wp-admin/includes/class-wp-filesystem-ftpext.php  2020-06-19 10:34:26 UTC (rev 48089)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -69,6 +69,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                $this->options['ssl'] = false;
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( isset( $opt['connection_type'] ) && 'ftps' === $opt['connection_type'] ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $this->options['ssl'] = true;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -97,6 +98,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        $this->options['hostname'] . ':' . $this->options['port']
</span><span class="cx" style="display: block; padding: 0 10px">                                )
</span><span class="cx" style="display: block; padding: 0 10px">                        );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                         return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -109,11 +111,13 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        $this->options['username']
</span><span class="cx" style="display: block; padding: 0 10px">                                )
</span><span class="cx" style="display: block; padding: 0 10px">                        );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                         return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                // Set the connection to use Passive FTP.
</span><span class="cx" style="display: block; padding: 0 10px">                ftp_pasv( $this->link, true );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( @ftp_get_option( $this->link, FTP_TIMEOUT_SEC ) < FS_TIMEOUT ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        @ftp_set_option( $this->link, FTP_TIMEOUT_SEC, FS_TIMEOUT );
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -131,29 +135,30 @@
</span><span class="cx" style="display: block; padding: 0 10px">         *                      or if the file couldn't be retrieved.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="cx" style="display: block; padding: 0 10px">        public function get_contents( $file ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                $tempfile = wp_tempnam( $file );
-               $temp     = fopen( $tempfile, 'w+' );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         $tempfile   = wp_tempnam( $file );
+               $temphandle = fopen( $tempfile, 'w+' );
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                if ( ! $temp ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         if ( ! $temphandle ) {
</ins><span class="cx" style="display: block; padding: 0 10px">                         unlink( $tempfile );
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                if ( ! ftp_fget( $this->link, $temp, $file, FTP_BINARY ) ) {
-                       fclose( $temp );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         if ( ! ftp_fget( $this->link, $temphandle, $file, FTP_BINARY ) ) {
+                       fclose( $temphandle );
</ins><span class="cx" style="display: block; padding: 0 10px">                         unlink( $tempfile );
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                fseek( $temp, 0 ); // Skip back to the start of the file being written to.
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         fseek( $temphandle, 0 ); // Skip back to the start of the file being written to.
</ins><span class="cx" style="display: block; padding: 0 10px">                 $contents = '';
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                while ( ! feof( $temp ) ) {
-                       $contents .= fread( $temp, 8 * KB_IN_BYTES );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         while ( ! feof( $temphandle ) ) {
+                       $contents .= fread( $temphandle, 8 * KB_IN_BYTES );
</ins><span class="cx" style="display: block; padding: 0 10px">                 }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                fclose( $temp );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         fclose( $temphangle );
</ins><span class="cx" style="display: block; padding: 0 10px">                 unlink( $tempfile );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $contents;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -181,10 +186,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool True on success, false on failure.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="cx" style="display: block; padding: 0 10px">        public function put_contents( $file, $contents, $mode = false ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                $tempfile = wp_tempnam( $file );
-               $temp     = fopen( $tempfile, 'wb+' );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         $tempfile   = wp_tempnam( $file );
+               $temphandle = fopen( $tempfile, 'wb+' );
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                if ( ! $temp ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         if ( ! $temphandle ) {
</ins><span class="cx" style="display: block; padding: 0 10px">                         unlink( $tempfile );
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -192,21 +197,21 @@
</span><span class="cx" style="display: block; padding: 0 10px">                mbstring_binary_safe_encoding();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                $data_length   = strlen( $contents );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                $bytes_written = fwrite( $temp, $contents );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         $bytes_written = fwrite( $temphandle, $contents );
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                reset_mbstring_encoding();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                if ( $data_length !== $bytes_written ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        fclose( $temp );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 fclose( $temphandle );
</ins><span class="cx" style="display: block; padding: 0 10px">                         unlink( $tempfile );
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                fseek( $temp, 0 ); // Skip back to the start of the file being written to.
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         fseek( $temphandle, 0 ); // Skip back to the start of the file being written to.
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                $ret = ftp_fput( $this->link, $file, $temp, FTP_BINARY );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         $ret = ftp_fput( $this->link, $file, $temphandle, FTP_BINARY );
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                fclose( $temp );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         fclose( $temphandle );
</ins><span class="cx" style="display: block; padding: 0 10px">                 unlink( $tempfile );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                $this->chmod( $file, $mode );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -223,9 +228,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="cx" style="display: block; padding: 0 10px">        public function cwd() {
</span><span class="cx" style="display: block; padding: 0 10px">                $cwd = ftp_pwd( $this->link );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( $cwd ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $cwd = trailingslashit( $cwd );
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $cwd;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -267,6 +274,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                // chmod any sub-objects if recursive.
</span><span class="cx" style="display: block; padding: 0 10px">                if ( $recursive && $this->is_dir( $file ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $filelist = $this->dirlist( $file );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                         foreach ( (array) $filelist as $filename => $filemeta ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                $this->chmod( $file . '/' . $filename, $mode, $recursive );
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -276,6 +284,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                if ( ! function_exists( 'ftp_chmod' ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return (bool) ftp_site( $this->link, sprintf( 'CHMOD %o %s', $mode, $file ) );
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return (bool) ftp_chmod( $this->link, $mode, $file );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -289,6 +298,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="cx" style="display: block; padding: 0 10px">        public function owner( $file ) {
</span><span class="cx" style="display: block; padding: 0 10px">                $dir = $this->dirlist( $file );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $dir[ $file ]['owner'];
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -302,6 +312,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="cx" style="display: block; padding: 0 10px">        public function getchmod( $file ) {
</span><span class="cx" style="display: block; padding: 0 10px">                $dir = $this->dirlist( $file );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $dir[ $file ]['permsn'];
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -315,6 +326,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="cx" style="display: block; padding: 0 10px">        public function group( $file ) {
</span><span class="cx" style="display: block; padding: 0 10px">                $dir = $this->dirlist( $file );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $dir[ $file ]['group'];
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -335,10 +347,13 @@
</span><span class="cx" style="display: block; padding: 0 10px">                if ( ! $overwrite && $this->exists( $destination ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 $content = $this->get_contents( $source );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( false === $content ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $this->put_contents( $destination, $content, $mode );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -373,19 +388,23 @@
</span><span class="cx" style="display: block; padding: 0 10px">                if ( empty( $file ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( 'f' === $type || $this->is_file( $file ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return ftp_delete( $this->link, $file );
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( ! $recursive ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return ftp_rmdir( $this->link, $file );
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                $filelist = $this->dirlist( trailingslashit( $file ) );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( ! empty( $filelist ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        foreach ( $filelist as $delete_file ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                $this->delete( trailingslashit( $file ) . $delete_file['name'], $recursive, $delete_file['type'] );
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return ftp_rmdir( $this->link, $file );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -430,10 +449,12 @@
</span><span class="cx" style="display: block; padding: 0 10px">        public function is_dir( $path ) {
</span><span class="cx" style="display: block; padding: 0 10px">                $cwd    = $this->cwd();
</span><span class="cx" style="display: block; padding: 0 10px">                $result = @ftp_chdir( $this->link, trailingslashit( $path ) );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( $result && $path == $this->cwd() || $this->cwd() != $cwd ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        @ftp_chdir( $this->link, $cwd );
</span><span class="cx" style="display: block; padding: 0 10px">                        return true;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return false;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -531,6 +552,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="cx" style="display: block; padding: 0 10px">        public function mkdir( $path, $chmod = false, $chown = false, $chgrp = false ) {
</span><span class="cx" style="display: block; padding: 0 10px">                $path = untrailingslashit( $path );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( empty( $path ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -538,7 +560,9 @@
</span><span class="cx" style="display: block; padding: 0 10px">                if ( ! ftp_mkdir( $this->link, $path ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 $this->chmod( $path, $chmod );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return true;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -563,6 +587,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="cx" style="display: block; padding: 0 10px">        public function parselisting( $line ) {
</span><span class="cx" style="display: block; padding: 0 10px">                static $is_windows = null;
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( is_null( $is_windows ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $is_windows = stripos( ftp_systype( $this->link ), 'win' ) !== false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -569,17 +594,21 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                if ( $is_windows && preg_match( '/([0-9]{2})-([0-9]{2})-([0-9]{2}) +([0-9]{2}):([0-9]{2})(AM|PM) +([0-9]+|<DIR>) +(.+)/', $line, $lucifer ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $b = array();
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                         if ( $lucifer[3] < 70 ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                $lucifer[3] += 2000;
</span><span class="cx" style="display: block; padding: 0 10px">                        } else {
</span><span class="cx" style="display: block; padding: 0 10px">                                $lucifer[3] += 1900; // 4-digit year fix.
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                         $b['isdir'] = ( '<DIR>' === $lucifer[7] );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                         if ( $b['isdir'] ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                $b['type'] = 'd';
</span><span class="cx" style="display: block; padding: 0 10px">                        } else {
</span><span class="cx" style="display: block; padding: 0 10px">                                $b['type'] = 'f';
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                         $b['size']   = $lucifer[7];
</span><span class="cx" style="display: block; padding: 0 10px">                        $b['month']  = $lucifer[1];
</span><span class="cx" style="display: block; padding: 0 10px">                        $b['day']    = $lucifer[2];
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -591,15 +620,19 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        $b['name']   = $lucifer[8];
</span><span class="cx" style="display: block; padding: 0 10px">                } elseif ( ! $is_windows ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $lucifer = preg_split( '/[ ]/', $line, 9, PREG_SPLIT_NO_EMPTY );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                         if ( $lucifer ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                // echo $line."\n";
</span><span class="cx" style="display: block; padding: 0 10px">                                $lcount = count( $lucifer );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                                 if ( $lcount < 8 ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                        return '';
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                                 $b           = array();
</span><span class="cx" style="display: block; padding: 0 10px">                                $b['isdir']  = 'd' === $lucifer[0][0];
</span><span class="cx" style="display: block; padding: 0 10px">                                $b['islink'] = 'l' === $lucifer[0][0];
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                                 if ( $b['isdir'] ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                        $b['type'] = 'd';
</span><span class="cx" style="display: block; padding: 0 10px">                                } elseif ( $b['islink'] ) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -607,6 +640,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                } else {
</span><span class="cx" style="display: block; padding: 0 10px">                                        $b['type'] = 'f';
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                                 $b['perms']  = $lucifer[0];
</span><span class="cx" style="display: block; padding: 0 10px">                                $b['permsn'] = $this->getnumchmodfromh( $b['perms'] );
</span><span class="cx" style="display: block; padding: 0 10px">                                $b['number'] = $lucifer[1];
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -613,14 +647,17 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                $b['owner']  = $lucifer[2];
</span><span class="cx" style="display: block; padding: 0 10px">                                $b['group']  = $lucifer[3];
</span><span class="cx" style="display: block; padding: 0 10px">                                $b['size']   = $lucifer[4];
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                                 if ( 8 == $lcount ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                        sscanf( $lucifer[5], '%d-%d-%d', $b['year'], $b['month'], $b['day'] );
</span><span class="cx" style="display: block; padding: 0 10px">                                        sscanf( $lucifer[6], '%d:%d', $b['hour'], $b['minute'] );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                                         $b['time'] = mktime( $b['hour'], $b['minute'], 0, $b['month'], $b['day'], $b['year'] );
</span><span class="cx" style="display: block; padding: 0 10px">                                        $b['name'] = $lucifer[7];
</span><span class="cx" style="display: block; padding: 0 10px">                                } else {
</span><span class="cx" style="display: block; padding: 0 10px">                                        $b['month'] = $lucifer[5];
</span><span class="cx" style="display: block; padding: 0 10px">                                        $b['day']   = $lucifer[6];
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                                         if ( preg_match( '/([0-9]{2}):([0-9]{2})/', $lucifer[7], $l2 ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                                $b['year']   = gmdate( 'Y' );
</span><span class="cx" style="display: block; padding: 0 10px">                                                $b['hour']   = $l2[1];
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -630,6 +667,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                $b['hour']   = 0;
</span><span class="cx" style="display: block; padding: 0 10px">                                                $b['minute'] = 0;
</span><span class="cx" style="display: block; padding: 0 10px">                                        }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                                         $b['time'] = strtotime( sprintf( '%d %s %d %02d:%02d', $b['day'], $b['month'], $b['year'], $b['hour'], $b['minute'] ) );
</span><span class="cx" style="display: block; padding: 0 10px">                                        $b['name'] = $lucifer[8];
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -678,10 +716,13 @@
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                $pwd = ftp_pwd( $this->link );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( ! @ftp_chdir( $this->link, $path ) ) { // Can't change to folder = folder doesn't exist.
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 $list = ftp_rawlist( $this->link, '-a', false );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 @ftp_chdir( $this->link, $pwd );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                if ( empty( $list ) ) { // Empty array = non-existent folder (real folder will show . at least).
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -689,8 +730,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                $dirlist = array();
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 foreach ( $list as $k => $v ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $entry = $this->parselisting( $v );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                         if ( empty( $entry ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                continue;
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -711,6 +754,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                $ret = array();
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 foreach ( (array) $dirlist as $struc ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        if ( 'd' === $struc['type'] ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                if ( $recursive ) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -722,6 +766,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        $ret[ $struc['name'] ] = $struc;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $ret;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span></span></pre></div>
<a id="trunksrcwpadminincludesclasswpfilesystemftpsocketsphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-admin/includes/class-wp-filesystem-ftpsockets.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-admin/includes/class-wp-filesystem-ftpsockets.php    2020-06-18 23:00:31 UTC (rev 48088)
+++ trunk/src/wp-admin/includes/class-wp-filesystem-ftpsockets.php      2020-06-19 10:34:26 UTC (rev 48089)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -36,6 +36,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                if ( ! include_once ABSPATH . 'wp-admin/includes/class-ftp.php' ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 $this->ftp = new ftp();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                if ( empty( $opt['port'] ) ) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -87,6 +88,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        $this->options['hostname'] . ':' . $this->options['port']
</span><span class="cx" style="display: block; padding: 0 10px">                                )
</span><span class="cx" style="display: block; padding: 0 10px">                        );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                         return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -99,6 +101,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        $this->options['hostname'] . ':' . $this->options['port']
</span><span class="cx" style="display: block; padding: 0 10px">                                )
</span><span class="cx" style="display: block; padding: 0 10px">                        );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                         return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -111,6 +114,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        $this->options['username']
</span><span class="cx" style="display: block; padding: 0 10px">                                )
</span><span class="cx" style="display: block; padding: 0 10px">                        );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                         return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -117,6 +121,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                $this->ftp->SetType( FTP_BINARY );
</span><span class="cx" style="display: block; padding: 0 10px">                $this->ftp->Passive( true );
</span><span class="cx" style="display: block; padding: 0 10px">                $this->ftp->setTimeout( FS_TIMEOUT );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return true;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -134,11 +139,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                $temp = wp_tempnam( $file );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         $tempfile   = wp_tempnam( $file );
+               $temphandle = fopen( $tempfile, 'w+' );
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                $temphandle = fopen( $temp, 'w+' );
</del><span class="cx" style="display: block; padding: 0 10px">                 if ( ! $temphandle ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        unlink( $temp );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 unlink( $tempfile );
</ins><span class="cx" style="display: block; padding: 0 10px">                         return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -146,7 +151,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                if ( ! $this->ftp->fget( $temphandle, $file ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        fclose( $temphandle );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        unlink( $temp );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 unlink( $tempfile );
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        reset_mbstring_encoding();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -163,7 +168,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                fclose( $temphandle );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                unlink( $temp );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         unlink( $tempfile );
+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $contents;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -191,10 +197,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool True on success, false on failure.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="cx" style="display: block; padding: 0 10px">        public function put_contents( $file, $contents, $mode = false ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                $temp       = wp_tempnam( $file );
-               $temphandle = @fopen( $temp, 'w+' );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         $tempfile   = wp_tempnam( $file );
+               $temphandle = @fopen( $tempfile, 'w+' );
+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( ! $temphandle ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        unlink( $temp );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 unlink( $tempfile );
</ins><span class="cx" style="display: block; padding: 0 10px">                         return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -202,9 +209,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">                mbstring_binary_safe_encoding();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                $bytes_written = fwrite( $temphandle, $contents );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( false === $bytes_written || strlen( $contents ) != $bytes_written ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        fclose( $temphandle );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        unlink( $temp );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 unlink( $tempfile );
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        reset_mbstring_encoding();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -218,7 +226,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                reset_mbstring_encoding();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                fclose( $temphandle );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                unlink( $temp );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         unlink( $tempfile );
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                $this->chmod( $file, $mode );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -234,9 +242,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="cx" style="display: block; padding: 0 10px">        public function cwd() {
</span><span class="cx" style="display: block; padding: 0 10px">                $cwd = $this->ftp->pwd();
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( $cwd ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $cwd = trailingslashit( $cwd );
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $cwd;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -278,6 +288,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                // chmod any sub-objects if recursive.
</span><span class="cx" style="display: block; padding: 0 10px">                if ( $recursive && $this->is_dir( $file ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $filelist = $this->dirlist( $file );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                         foreach ( (array) $filelist as $filename => $filemeta ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                $this->chmod( $file . '/' . $filename, $mode, $recursive );
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -297,6 +308,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="cx" style="display: block; padding: 0 10px">        public function owner( $file ) {
</span><span class="cx" style="display: block; padding: 0 10px">                $dir = $this->dirlist( $file );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $dir[ $file ]['owner'];
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -310,6 +322,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="cx" style="display: block; padding: 0 10px">        public function getchmod( $file ) {
</span><span class="cx" style="display: block; padding: 0 10px">                $dir = $this->dirlist( $file );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $dir[ $file ]['permsn'];
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -323,6 +336,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="cx" style="display: block; padding: 0 10px">        public function group( $file ) {
</span><span class="cx" style="display: block; padding: 0 10px">                $dir = $this->dirlist( $file );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $dir[ $file ]['group'];
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -345,6 +359,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                $content = $this->get_contents( $source );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( false === $content ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -383,9 +398,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">                if ( empty( $file ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( 'f' === $type || $this->is_file( $file ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return $this->ftp->delete( $file );
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( ! $recursive ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return $this->ftp->rmdir( $file );
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -424,9 +441,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">                if ( $this->is_dir( $file ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( $this->exists( $file ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return true;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return false;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -440,10 +459,12 @@
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="cx" style="display: block; padding: 0 10px">        public function is_dir( $path ) {
</span><span class="cx" style="display: block; padding: 0 10px">                $cwd = $this->cwd();
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( $this->chdir( $path ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $this->chdir( $cwd );
</span><span class="cx" style="display: block; padding: 0 10px">                        return true;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return false;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -541,6 +562,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="cx" style="display: block; padding: 0 10px">        public function mkdir( $path, $chmod = false, $chown = false, $chgrp = false ) {
</span><span class="cx" style="display: block; padding: 0 10px">                $path = untrailingslashit( $path );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( empty( $path ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -548,10 +570,13 @@
</span><span class="cx" style="display: block; padding: 0 10px">                if ( ! $this->ftp->mkdir( $path ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( ! $chmod ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $chmod = FS_CHMOD_DIR;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 $this->chmod( $path, $chmod );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return true;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -605,6 +630,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                mbstring_binary_safe_encoding();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                $list = $this->ftp->dirlist( $path );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( empty( $list ) && ! $this->exists( $path ) ) {
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        reset_mbstring_encoding();
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -613,6 +639,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                $ret = array();
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 foreach ( $list as $struc ) {
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        if ( '.' === $struc['name'] || '..' === $struc['name'] ) {
</span></span></pre></div>
<a id="trunksrcwpadminincludesclasswpfilesystemssh2php"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-admin/includes/class-wp-filesystem-ssh2.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-admin/includes/class-wp-filesystem-ssh2.php  2020-06-18 23:00:31 UTC (rev 48088)
+++ trunk/src/wp-admin/includes/class-wp-filesystem-ssh2.php    2020-06-19 10:34:26 UTC (rev 48089)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -132,6 +132,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        $this->options['hostname'] . ':' . $this->options['port']
</span><span class="cx" style="display: block; padding: 0 10px">                                )
</span><span class="cx" style="display: block; padding: 0 10px">                        );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                         return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -145,6 +146,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                $this->options['username']
</span><span class="cx" style="display: block; padding: 0 10px">                                        )
</span><span class="cx" style="display: block; padding: 0 10px">                                );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                                 return false;
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px">                } else {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -157,11 +159,13 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                $this->options['username']
</span><span class="cx" style="display: block; padding: 0 10px">                                        )
</span><span class="cx" style="display: block; padding: 0 10px">                                );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                                 return false;
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                $this->sftp_link = ssh2_sftp( $this->link );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( ! $this->sftp_link ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $this->errors->add(
</span><span class="cx" style="display: block; padding: 0 10px">                                'connect',
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -171,6 +175,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        $this->options['hostname'] . ':' . $this->options['port']
</span><span class="cx" style="display: block; padding: 0 10px">                                )
</span><span class="cx" style="display: block; padding: 0 10px">                        );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                         return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -194,6 +199,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                if ( '/' === $path ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $path = '/./';
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return 'ssh2.sftp://' . $this->sftp_link . '/' . ltrim( $path, '/' );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -211,6 +217,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                $stream = ssh2_exec( $this->link, $command );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( ! $stream ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $this->errors->add(
</span><span class="cx" style="display: block; padding: 0 10px">                                'command',
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -232,6 +239,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                return $data;
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return false;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -292,9 +300,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="cx" style="display: block; padding: 0 10px">        public function cwd() {
</span><span class="cx" style="display: block; padding: 0 10px">                $cwd = ssh2_sftp_realpath( $this->sftp_link, '.' );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( $cwd ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $cwd = trailingslashit( trim( $cwd ) );
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $cwd;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -325,9 +335,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">                if ( ! $this->exists( $file ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( ! $recursive || ! $this->is_dir( $file ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return $this->run_command( sprintf( 'chgrp %s %s', escapeshellarg( $group ), escapeshellarg( $file ) ), true );
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $this->run_command( sprintf( 'chgrp -R %s %s', escapeshellarg( $group ), escapeshellarg( $file ) ), true );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -361,6 +373,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                if ( ! $recursive || ! $this->is_dir( $file ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return $this->run_command( sprintf( 'chmod %o %s', $mode, escapeshellarg( $file ) ), true );
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $this->run_command( sprintf( 'chmod -R %o %s', $mode, escapeshellarg( $file ) ), true );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -379,9 +392,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">                if ( ! $this->exists( $file ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( ! $recursive || ! $this->is_dir( $file ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return $this->run_command( sprintf( 'chown %s %s', escapeshellarg( $owner ), escapeshellarg( $file ) ), true );
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $this->run_command( sprintf( 'chown -R %s %s', escapeshellarg( $owner ), escapeshellarg( $file ) ), true );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -395,16 +410,21 @@
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="cx" style="display: block; padding: 0 10px">        public function owner( $file ) {
</span><span class="cx" style="display: block; padding: 0 10px">                $owneruid = @fileowner( $this->sftp_path( $file ) );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( ! $owneruid ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( ! function_exists( 'posix_getpwuid' ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return $owneruid;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 $ownerarray = posix_getpwuid( $owneruid );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( ! $ownerarray ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $ownerarray['name'];
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -430,16 +450,21 @@
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="cx" style="display: block; padding: 0 10px">        public function group( $file ) {
</span><span class="cx" style="display: block; padding: 0 10px">                $gid = @filegroup( $this->sftp_path( $file ) );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( ! $gid ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( ! function_exists( 'posix_getgrgid' ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return $gid;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 $grouparray = posix_getgrgid( $gid );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( ! $grouparray ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $grouparray['name'];
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -460,10 +485,13 @@
</span><span class="cx" style="display: block; padding: 0 10px">                if ( ! $overwrite && $this->exists( $destination ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 $content = $this->get_contents( $source );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( false === $content ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $this->put_contents( $destination, $content, $mode );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -508,15 +536,19 @@
</span><span class="cx" style="display: block; padding: 0 10px">                if ( 'f' === $type || $this->is_file( $file ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return ssh2_sftp_unlink( $this->sftp_link, $file );
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( ! $recursive ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return ssh2_sftp_rmdir( $this->sftp_link, $file );
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 $filelist = $this->dirlist( $file );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( is_array( $filelist ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        foreach ( $filelist as $filename => $fileinfo ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                $this->delete( $file . '/' . $filename, $recursive, $fileinfo['type'] );
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return ssh2_sftp_rmdir( $this->sftp_link, $file );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -650,6 +682,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="cx" style="display: block; padding: 0 10px">        public function mkdir( $path, $chmod = false, $chown = false, $chgrp = false ) {
</span><span class="cx" style="display: block; padding: 0 10px">                $path = untrailingslashit( $path );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( empty( $path ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -657,15 +690,19 @@
</span><span class="cx" style="display: block; padding: 0 10px">                if ( ! $chmod ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $chmod = FS_CHMOD_DIR;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( ! ssh2_sftp_mkdir( $this->sftp_link, $path, $chmod, true ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( $chown ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $this->chown( $path, $chown );
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( $chgrp ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $this->chgrp( $path, $chgrp );
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return true;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -764,8 +801,10 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        $ret[ $struc['name'] ] = $struc;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 $dir->close();
</span><span class="cx" style="display: block; padding: 0 10px">                unset( $dir );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $ret;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span></span></pre>
</div>
</div>

</body>
</html>