From d766d09f01314c5db7dc54288884edb6a159321e Mon Sep 17 00:00:00 2001 From: Daniel Kesselberg Date: Wed, 22 Jan 2020 21:14:36 +0100 Subject: [PATCH] Add test to ensure that symlinked apps_paths are not resolved Signed-off-by: Daniel Kesselberg --- tests/lib/App/AppManagerTest.php | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/tests/lib/App/AppManagerTest.php b/tests/lib/App/AppManagerTest.php index 1a5d6c648a..5b6fedb1cc 100644 --- a/tests/lib/App/AppManagerTest.php +++ b/tests/lib/App/AppManagerTest.php @@ -338,6 +338,35 @@ class AppManagerTest extends TestCase { $this->assertEquals(\OC::$SERVERROOT . '/apps/files', $this->manager->getAppPath('files')); } + public function testGetAppPathSymlink() { + $fakeAppDirname = sha1(uniqid('test', true)); + $fakeAppPath = sys_get_temp_dir() . '/' . $fakeAppDirname; + $fakeAppLink = \OC::$SERVERROOT . '/' . $fakeAppDirname; + + mkdir($fakeAppPath); + if (symlink($fakeAppPath, $fakeAppLink) === false) { + $this->markTestSkipped('Failed to create symlink'); + } + + // Use the symlink as the app path + \OC::$APPSROOTS[] = [ + 'path' => $fakeAppLink, + 'url' => \OC::$WEBROOT . '/' . $fakeAppDirname, + 'writable' => false, + ]; + + $fakeTestAppPath = $fakeAppPath . '/' . 'test-test-app'; + mkdir($fakeTestAppPath); + + $generatedAppPath = $this->manager->getAppPath('test-test-app'); + + rmdir($fakeTestAppPath); + unlink($fakeAppLink); + rmdir($fakeAppPath); + + $this->assertEquals($fakeAppLink . '/test-test-app', $generatedAppPath); + } + public function testGetAppPathFail() { $this->expectException(AppPathNotFoundException::class); $this->manager->getAppPath('testnotexisting');