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
function getArchiveRel( $suffix = false ) {
$path = 'archive/' . $this->getHashPath();
if ( $suffix === false ) {
function getArchiveRel( $suffix = false ) {
$path = 'archive/' . $this->getHashPath();
if ( $suffix === false ) {
- $path = substr( $path, 0, -1 );
+ $path = rtrim( $path, '/' );
} else {
$path .= $suffix;
}
} else {
$path .= $suffix;
}
$ext = $this->getExtension();
$path = $this->repo->getZoneUrl( 'public', $ext ) . '/archive/' . $this->getHashPath();
if ( $suffix === false ) {
$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 );
}
} else {
$path .= rawurlencode( $suffix );
}
$this->assertRepoDefined();
$path = $this->repo->getVirtualUrl() . '/public/archive/' . $this->getHashPath();
if ( $suffix === false ) {
$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 );
}
} else {
$path .= rawurlencode( $suffix );
}