From eadc1ac6378995beb17c983729127b8bdf1b122a Mon Sep 17 00:00:00 2001 From: Magnus Walbeck Date: Mon, 23 Jan 2017 13:28:35 +0100 Subject: Mimetype detection for hidden files Signed-off-by: Magnus Walbeck --- lib/private/Files/Type/Detection.php | 6 ++++++ tests/lib/Files/Type/DetectionTest.php | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/lib/private/Files/Type/Detection.php b/lib/private/Files/Type/Detection.php index 84d727ebb0e..b4c2ec01a8a 100644 --- a/lib/private/Files/Type/Detection.php +++ b/lib/private/Files/Type/Detection.php @@ -167,6 +167,12 @@ class Detection implements IMimeTypeDetector { $this->loadMappings(); $fileName = basename($path); + + // remove leading dot on hidden files with a file extension + if (strpos($fileName, '.') === 0 && strpos($fileName, '.', 1)) { + $fileName = substr($fileName, 1); + } + // note: leading dot doesn't qualify as extension if (strpos($fileName, '.') > 0) { //try to guess the type by the file extension diff --git a/tests/lib/Files/Type/DetectionTest.php b/tests/lib/Files/Type/DetectionTest.php index 87e0f94e3e2..5c1f48a806e 100644 --- a/tests/lib/Files/Type/DetectionTest.php +++ b/tests/lib/Files/Type/DetectionTest.php @@ -74,9 +74,13 @@ class DetectionTest extends \Test\TestCase { $this->assertEquals('text/plain', $this->detection->detectPath('foo.txt')); $this->assertEquals('image/png', $this->detection->detectPath('foo.png')); $this->assertEquals('image/png', $this->detection->detectPath('foo.bar.png')); + $this->assertEquals('image/png', $this->detection->detectPath('.hidden.png')); + $this->assertEquals('image/png', $this->detection->detectPath('.hidden.foo.png')); $this->assertEquals('image/png', $this->detection->detectPath('.hidden/foo.png')); + $this->assertEquals('image/png', $this->detection->detectPath('.hidden/.hidden.png')); $this->assertEquals('image/png', $this->detection->detectPath('test.jpg/foo.png')); $this->assertEquals('application/octet-stream', $this->detection->detectPath('.png')); + $this->assertEquals('application/octet-stream', $this->detection->detectPath('..hidden')); $this->assertEquals('application/octet-stream', $this->detection->detectPath('foo')); $this->assertEquals('application/octet-stream', $this->detection->detectPath('')); } -- cgit v1.2.3 From 3d99ec6832093652868f0dc0420d9d616f5e5310 Mon Sep 17 00:00:00 2001 From: Magnus Walbeck Date: Mon, 23 Jan 2017 17:14:39 +0100 Subject: Reduced code for filename trim Signed-off-by: Magnus Walbeck --- lib/private/Files/Type/Detection.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/private/Files/Type/Detection.php b/lib/private/Files/Type/Detection.php index b4c2ec01a8a..cd4ddc2f067 100644 --- a/lib/private/Files/Type/Detection.php +++ b/lib/private/Files/Type/Detection.php @@ -169,9 +169,7 @@ class Detection implements IMimeTypeDetector { $fileName = basename($path); // remove leading dot on hidden files with a file extension - if (strpos($fileName, '.') === 0 && strpos($fileName, '.', 1)) { - $fileName = substr($fileName, 1); - } + $fileName = ltrim($fileName, '.'); // note: leading dot doesn't qualify as extension if (strpos($fileName, '.') > 0) { -- cgit v1.2.3