filerepo: Replace confusing substr() with rtrim()
authorThiemo Kreuz <thiemo.kreuz@wikimedia.de>
Wed, 2 Jan 2019 15:29:04 +0000 (16:29 +0100)
committerThiemo Kreuz <thiemo.kreuz@wikimedia.de>
Wed, 2 Jan 2019 15:29:04 +0000 (16:29 +0100)
I just looked at this code for ten minutes to understand what
sub-string is extracted here. Not only are the numbers hard to
understand: With 0 and -1 the last character is removed – that's
really all this does. Even more problematic is the fact there is
no check, hint, not even a comment explaining *which* character is
removed. If – for whatever reason – the code above returns a string
that does *not* end with a slash, the unconditional substr() call
must destroy this string.

rtrim() shows the character.

I checked and these strings are all guaranteed to use forward
slashes, never backwards (Windows) slashes.

Change-Id: I2e17fd583982920bb8a0ca73035094099e5e5d31

includes/filerepo/file/File.php

index 76bdba4..923484a 100644 (file)
@@ -1543,7 +1543,7 @@ abstract class File implements IDBAccessObject {
        function getArchiveRel( $suffix = false ) {
                $path = 'archive/' . $this->getHashPath();
                if ( $suffix === false ) {
-                       $path = substr( $path, 0, -1 );
+                       $path = rtrim( $path, '/' );
                } else {
                        $path .= $suffix;
                }
@@ -1655,7 +1655,7 @@ abstract class File implements IDBAccessObject {
                $ext = $this->getExtension();
                $path = $this->repo->getZoneUrl( 'public', $ext ) . '/archive/' . $this->getHashPath();
                if ( $suffix === false ) {
-                       $path = substr( $path, 0, -1 );
+                       $path = rtrim( $path, '/' );
                } else {
                        $path .= rawurlencode( $suffix );
                }
@@ -1746,7 +1746,7 @@ abstract class File implements IDBAccessObject {
                $this->assertRepoDefined();
                $path = $this->repo->getVirtualUrl() . '/public/archive/' . $this->getHashPath();
                if ( $suffix === false ) {
-                       $path = substr( $path, 0, -1 );
+                       $path = rtrim( $path, '/' );
                } else {
                        $path .= rawurlencode( $suffix );
                }