From 9a373cb5bbe2cc56ba96f1a6dff298912f4d88e7 Mon Sep 17 00:00:00 2001
From: Roeland Jago Douma <roeland@famdouma.nl>
Date: Wed, 23 Sep 2015 10:27:35 +0200
Subject: [PATCH] Do not blindy copy expiration date on reshare

If a file/folder is reshared we should not blindly copy the expiration
date of the parent share. User/Group shares do not have expiration dates
currently, and thus this is always set to null.

Fixes #19119

* Added testcase
---
 lib/private/share/share.php |  1 -
 tests/lib/share/share.php   | 37 +++++++++++++++++++++++++++++++++++++
 2 files changed, 37 insertions(+), 1 deletion(-)

diff --git a/lib/private/share/share.php b/lib/private/share/share.php
index 07c7f31a853..32389f34868 100644
--- a/lib/private/share/share.php
+++ b/lib/private/share/share.php
@@ -1998,7 +1998,6 @@ class Share extends Constants {
 			$suggestedItemTarget = $result['suggestedItemTarget'];
 			$suggestedFileTarget = $result['suggestedFileTarget'];
 			$filePath = $result['filePath'];
-			$expirationDate = $result['expirationDate'];
 		}
 
 		$isGroupShare = false;
diff --git a/tests/lib/share/share.php b/tests/lib/share/share.php
index ef0d9822085..58a76470afa 100644
--- a/tests/lib/share/share.php
+++ b/tests/lib/share/share.php
@@ -1567,6 +1567,43 @@ class Test_Share extends \Test\TestCase {
 		$this->setHttpHelper($oldHttpHelper);
 	}
 
+	/**
+	 * Test case for #19119
+	 */
+	public function testReshareWithLinkDefaultExpirationDate() {
+		$config = \OC::$server->getConfig();
+		$config->setAppValue('core', 'shareapi_default_expire_date', 'yes');
+		$config->setAppValue('core', 'shareapi_expire_after_n_days', '2');
+
+		// Expiration date
+		$expireAt = time() + 2 * 24*60*60;
+		$date = new DateTime();
+		$date->setTimestamp($expireAt);
+		$date->setTime(0, 0, 0);
+
+		//Share a file from user 1 to user 2
+		$this->shareUserTestFileWithUser($this->user1, $this->user2);
+
+		//User 2 shares as link
+		OC_User::setUserId($this->user2);
+		$result = OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_LINK, null, \OCP\Constants::PERMISSION_READ);
+		$this->assertTrue(is_string($result));
+
+		//Check if expire date is correct
+		$result = OCP\Share::getItemShared('test', 'test.txt');
+		$this->assertCount(1, $result);
+		$result = reset($result);
+		$this->assertNotEmpty($result['expiration']);
+		$expireDate = new DateTime($result['expiration']);
+		$this->assertEquals($date, $expireDate);
+
+		//Unshare
+		$this->assertTrue(OCP\Share::unshareAll('test', 'test.txt'));
+
+		//Reset config
+		$config->deleteAppValue('core', 'shareapi_default_expire_date');
+		$config->deleteAppValue('core', 'shareapi_expire_after_n_days');
+	}
 }
 
 class DummyShareClass extends \OC\Share\Share {
-- 
GitLab