CSSMin: Clean up $remote trailing slash fix
authorTimo Tijhof <ttijhof@wikimedia.org>
Wed, 20 Jun 2012 11:05:03 +0000 (13:05 +0200)
committerAntoine Musso <hashar@free.fr>
Wed, 20 Jun 2012 12:30:10 +0000 (14:30 +0200)
* No need to strip them from everywhere all over. This bug is only
  caused by the presence of a trailing slash on $remote.

* To make sure everything still works before and after I added
  unit tests for CSSMin in Ic9195614acfd, making this dependent
  on that change.

Change-Id: Ia82048a328a056117afe0d653fe22f5429b21f5a

includes/libs/CSSMin.php

index e9c2bad..fc75cdc 100644 (file)
@@ -152,6 +152,13 @@ class CSSMin {
                                $offset = $match[0][1] + strlen( $match[0][0] ) + $lengthIncrease;
                                continue;
                        }
+
+                       // Guard against double slashes, because "some/remote/../foo.png"
+                       // resolves to "some/remote/foo.png" on (some?) clients (bug 27052).
+                       if ( substr( $remote, -1 ) == '/' ) {
+                               $remote = substr( $remote, 0, -1 );
+                       }
+
                        // Shortcuts
                        $embed = $match['embed'][0];
                        $pre = $match['pre'][0];
@@ -159,10 +166,9 @@ class CSSMin {
                        $query = $match['query'][0];
                        $url = "{$remote}/{$match['file'][0]}";
                        $file = "{$local}/{$match['file'][0]}";
-                       // bug 27052 - Guard against double slashes, because foo//../bar
-                       // apparently resolves to foo/bar on (some?) clients
-                       $url = preg_replace( '#([^:])//+#', '\1/', $url );
+
                        $replacement = false;
+
                        if ( $local !== false && file_exists( $file ) ) {
                                // Add version parameter as a time-stamp in ISO 8601 format,
                                // using Z for the timezone, meaning GMT