From d766d09f01314c5db7dc54288884edb6a159321e Mon Sep 17 00:00:00 2001
From: Daniel Kesselberg <mail@danielkesselberg.de>
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 <mail@danielkesselberg.de>
---
 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 1a5d6c648a1..5b6fedb1cc2 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');
-- 
GitLab