]> source.dussan.org Git - nextcloud-server.git/commitdiff
Dots in a filenames fix
authorinfoneo <infoneo@yahoo.pl>
Sat, 11 May 2013 23:47:48 +0000 (01:47 +0200)
committerinfoneo <infoneo@yahoo.pl>
Sat, 11 May 2013 23:47:48 +0000 (01:47 +0200)
lib/files/mapper.php

index 15f5f0628b5cd7ebee9072c1d234dfc2b9727c80..97a2bff915ac950ad3c0d1ddd3e4e2e8c2498ae8 100644 (file)
@@ -172,13 +172,21 @@ class Mapper
 
                $pathElements = explode('/', $path);
                $sluggedElements = array();
-
-               // rip off the extension ext from last element
+               
                $last= end($pathElements);
                $parts = pathinfo($last);
-               $filename = $parts['filename'];
-               array_pop($pathElements);
-               array_push($pathElements, $filename);
+               
+               if ((preg_match('~[-\w]+~', $parts['filename'])) && (preg_match('~[-\w]+~', $parts['extension']))){
+                       
+                       // rip off the extension ext from last element
+                       $filename = $parts['filename'];
+                       array_pop($pathElements);
+                       array_push($pathElements, $filename);
+                       
+               } else {
+                       
+                       unset($parts['extension']);
+               } 
 
                foreach ($pathElements as $pathElement) {
                        // remove empty elements
@@ -213,8 +221,8 @@ class Mapper
         */
        private function slugify($text)
        {
-               // replace non letter or digits by -
-               $text = preg_replace('~[^\\pL\d]+~u', '-', $text);
+               // replace non letter or digits or dots by -
+               $text = preg_replace('~[^\\pL\d\.]+~u', '-', $text);
 
                // trim
                $text = trim($text, '-');
@@ -228,7 +236,10 @@ class Mapper
                $text = strtolower($text);
 
                // remove unwanted characters
-               $text = preg_replace('~[^-\w]+~', '', $text);
+               $text = preg_replace('~[^-\w\.]+~', '', $text);
+               
+               // trim ending dots (for security reasons and win compatibility)
+               $text = preg_replace('~\.+$~', '', $text);
 
                if (empty($text)) {
                        return uniqid();