From 8d6b2b886752f974ad4db61fda8a38df9b5bf009 Mon Sep 17 00:00:00 2001 From: Olivier Paroz Date: Sun, 25 Jan 2015 16:38:32 +0100 Subject: [PATCH 1/3] Keep the extension in temp files The file extension helps some applications like ImageMagick to properly process files --- lib/private/tempmanager.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/private/tempmanager.php b/lib/private/tempmanager.php index 60b9c9dc0d4..213d57b2e28 100644 --- a/lib/private/tempmanager.php +++ b/lib/private/tempmanager.php @@ -42,7 +42,7 @@ class TempManager implements ITempManager { } protected function generatePath($postFix) { - return $this->tmpBaseDir . '/oc_tmp_' . md5(time() . rand()) . $postFix; + return $this->tmpBaseDir . '/oc_tmp_' . md5(time() . rand()) . '.' . $postFix; } /** From 60b1643f02a2588d90fa77346bc377f5c1db8fbe Mon Sep 17 00:00:00 2001 From: Olivier Paroz Date: Sun, 25 Jan 2015 19:05:30 +0100 Subject: [PATCH 2/3] Fix the office class The office converter already replaces the original extension with '.pdf', so we need to switch the extensions of the tmp file instead of appending '.pdf' to it --- lib/private/preview/office.php | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/private/preview/office.php b/lib/private/preview/office.php index 5bd61bde3be..1f6d977ade4 100644 --- a/lib/private/preview/office.php +++ b/lib/private/preview/office.php @@ -31,12 +31,16 @@ abstract class Office extends Provider { shell_exec($exec); //create imagick object from pdf + $pdfPreview = null; try{ - $pdf = new \imagick($absPath . '.pdf' . '[0]'); + list( $dirname, , , $filename ) = array_values( pathinfo($absPath) ); + $pdfPreview = $dirname . '/' . $filename . '.pdf'; + + $pdf = new \imagick($pdfPreview . '[0]'); $pdf->setImageFormat('jpg'); } catch (\Exception $e) { unlink($absPath); - unlink($absPath . '.pdf'); + unlink($pdfPreview); \OC_Log::write('core', $e->getmessage(), \OC_Log::ERROR); return false; } @@ -45,7 +49,7 @@ abstract class Office extends Provider { $image->loadFromData($pdf); unlink($absPath); - unlink($absPath . '.pdf'); + unlink($pdfPreview); return $image->valid() ? $image : false; } From f890c3ffb1b7f7f1b744b37426993010e0c39138 Mon Sep 17 00:00:00 2001 From: Olivier Paroz Date: Thu, 19 Mar 2015 15:35:36 +0100 Subject: [PATCH 3/3] Make the method compatible with all types of extensions Fix existing tests --- lib/private/tempmanager.php | 5 ++++- tests/lib/tempmanager.php | 12 ++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/lib/private/tempmanager.php b/lib/private/tempmanager.php index 213d57b2e28..fa23749b708 100644 --- a/lib/private/tempmanager.php +++ b/lib/private/tempmanager.php @@ -42,7 +42,10 @@ class TempManager implements ITempManager { } protected function generatePath($postFix) { - return $this->tmpBaseDir . '/oc_tmp_' . md5(time() . rand()) . '.' . $postFix; + if ($postFix) { + $postFix = '.' . ltrim($postFix, '.'); + } + return $this->tmpBaseDir . '/oc_tmp_' . md5(time() . rand()) . $postFix; } /** diff --git a/tests/lib/tempmanager.php b/tests/lib/tempmanager.php index c030eef2c9e..427e260c3fb 100644 --- a/tests/lib/tempmanager.php +++ b/tests/lib/tempmanager.php @@ -51,7 +51,7 @@ class TempManager extends \Test\TestCase { public function testGetFile() { $manager = $this->getManager(); - $file = $manager->getTemporaryFile('.txt'); + $file = $manager->getTemporaryFile('txt'); $this->assertStringEndsWith('.txt', $file); $this->assertTrue(is_file($file)); $this->assertTrue(is_writable($file)); @@ -73,8 +73,8 @@ class TempManager extends \Test\TestCase { public function testCleanFiles() { $manager = $this->getManager(); - $file1 = $manager->getTemporaryFile('.txt'); - $file2 = $manager->getTemporaryFile('.txt'); + $file1 = $manager->getTemporaryFile('txt'); + $file2 = $manager->getTemporaryFile('txt'); $this->assertTrue(file_exists($file1)); $this->assertTrue(file_exists($file2)); @@ -105,8 +105,8 @@ class TempManager extends \Test\TestCase { public function testCleanOld() { $manager = $this->getManager(); - $oldFile = $manager->getTemporaryFile('.txt'); - $newFile = $manager->getTemporaryFile('.txt'); + $oldFile = $manager->getTemporaryFile('txt'); + $newFile = $manager->getTemporaryFile('txt'); $folder = $manager->getTemporaryFolder(); $nonOcFile = $this->baseDir . '/foo.txt'; file_put_contents($nonOcFile, 'bar'); @@ -135,7 +135,7 @@ class TempManager extends \Test\TestCase { $logger->expects($this->once()) ->method('warning') ->with($this->stringContains('Can not create a temporary file in directory')); - $this->assertFalse($manager->getTemporaryFile('.txt')); + $this->assertFalse($manager->getTemporaryFile('txt')); } public function testLogCantCreateFolder() {