[wp-trac] [WordPress Trac] #26598: Broken methods in WP_Filesystem_Direct and WP_Filesystem_SSH2

WordPress Trac noreply at wordpress.org
Fri Dec 13 11:02:50 UTC 2013


#26598: Broken methods in WP_Filesystem_Direct and WP_Filesystem_SSH2
---------------------------+------------------------------
 Reporter:  DavidAnderson  |       Owner:
     Type:  defect (bug)   |      Status:  new
 Priority:  normal         |   Milestone:  Awaiting Review
Component:  Filesystem     |     Version:  trunk
 Severity:  normal         |  Resolution:
 Keywords:  has-patch      |
---------------------------+------------------------------
Description changed by ocean90:

Old description:

> Hi,
>
> https://core.trac.wordpress.org/ticket/25741 mentions some broken methods
> in WP_Filesystem classes, but here are two different broken methods, for
> different reasons:
>
> getchmod() in both WP_Filesystem_Direct and WP_Filesystem_SSH2 uses
> substr(, 3) on the results of decoct().
>
> e.g. in WP_Filesystem_Direct:
>
> {{{
> return substr(decoct(@fileperms($file)),3);
> }}}
>
> That's wrong if $file was a directory; in the directory case, substr(, 3)
> results in the first character being dropped:
>
> {{{
> $ mkdir /tmp/775
> $ chmod 775 /tmp/775
> $ ls -ld /tmp/775
> $ ls -ld /tmp/775
> drwxrwxr-x. 2 david david 4096 Dec 13 10:44 /tmp/775
> $ php -r 'echo decoct(@fileperms("/tmp/775"));'
> 40775
> $ php -r 'echo substr(decoct(@fileperms("/tmp/775")),3);'
> 75
> }}}
>
> The correct result would be obtained for both directories and files with
> the help of a sprintf:
>
> {{{
> substr(sprintf("%06d", decoct(@fileperms($file))),3);
> }}}
>
> e.g.:
>
> {{{
> $ mkdir /tmp/775dir
> $ touch /tmp/775file
> $ chmod 775 /tmp/775dir /tmp/775file
> $ ls -ld /tmp/775 /tmp/775file
> drwxrwxr-x. 2 david david 4096 Dec 13 10:44 /tmp/775
> -rwxrwxr-x. 1 david david    0 Dec 13 10:49 /tmp/775file
> $ php -r 'echo substr(sprintf("%06d",
> decoct(@fileperms("/tmp/775dir"))),3);'
> 775
> $ php -r 'substr(sprintf("%06d", decoct(@fileperms("/tmp/775file"))),3);'
> 775
> }}}
>
> Patch attached.

New description:

 Hi,

 #25741 mentions some broken methods in WP_Filesystem classes, but here are
 two different broken methods, for different reasons:

 getchmod() in both WP_Filesystem_Direct and WP_Filesystem_SSH2 uses
 substr(, 3) on the results of decoct().

 e.g. in WP_Filesystem_Direct:

 {{{
 return substr(decoct(@fileperms($file)),3);
 }}}

 That's wrong if $file was a directory; in the directory case, substr(, 3)
 results in the first character being dropped:

 {{{
 $ mkdir /tmp/775
 $ chmod 775 /tmp/775
 $ ls -ld /tmp/775
 $ ls -ld /tmp/775
 drwxrwxr-x. 2 david david 4096 Dec 13 10:44 /tmp/775
 $ php -r 'echo decoct(@fileperms("/tmp/775"));'
 40775
 $ php -r 'echo substr(decoct(@fileperms("/tmp/775")),3);'
 75
 }}}

 The correct result would be obtained for both directories and files with
 the help of a sprintf:

 {{{
 substr(sprintf("%06d", decoct(@fileperms($file))),3);
 }}}

 e.g.:

 {{{
 $ mkdir /tmp/775dir
 $ touch /tmp/775file
 $ chmod 775 /tmp/775dir /tmp/775file
 $ ls -ld /tmp/775 /tmp/775file
 drwxrwxr-x. 2 david david 4096 Dec 13 10:44 /tmp/775
 -rwxrwxr-x. 1 david david    0 Dec 13 10:49 /tmp/775file
 $ php -r 'echo substr(sprintf("%06d",
 decoct(@fileperms("/tmp/775dir"))),3);'
 775
 $ php -r 'substr(sprintf("%06d", decoct(@fileperms("/tmp/775file"))),3);'
 775
 }}}

 Patch attached.

--

--
Ticket URL: <http://core.trac.wordpress.org/ticket/26598#comment:2>
WordPress Trac <http://core.trac.wordpress.org/>
WordPress blogging software


More information about the wp-trac mailing list