From d4976e55544ddab17713e2f3aa4f5f5f5eb9986f Mon Sep 17 00:00:00 2001
From: Vincent Petry <pvince81@owncloud.com>
Date: Thu, 13 Oct 2016 10:53:04 +0200
Subject: [PATCH] Fix post_unshareFromSelf hook parameter format

When unsharing from self in a group share situation, the share items
passed to the post_unshareFromSelf hook were using the wrong format in
which the attribute names (ex: "share_type") have non camel-case format.

This fix makes sure that in group sharing case we use the correct
format. It looks like the code was already producing it but in
array_merge it was not using it and adding the unprocessed one.
---
 .../tests/GroupEtagPropagationTest.php        | 22 +++++++++++++++++++
 lib/private/Share/Share.php                   |  4 ++--
 2 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/apps/files_sharing/tests/GroupEtagPropagationTest.php b/apps/files_sharing/tests/GroupEtagPropagationTest.php
index eeb3c06bc59..e339983b404 100644
--- a/apps/files_sharing/tests/GroupEtagPropagationTest.php
+++ b/apps/files_sharing/tests/GroupEtagPropagationTest.php
@@ -122,4 +122,26 @@ class GroupEtagPropagationTest extends PropagationTestCase {
 
 		$this->assertAllUnchanged();
 	}
+
+	public function testRecipientUnsharesFromSelf() {
+		$this->loginAsUser(self::TEST_FILES_SHARING_API_USER2);
+		$this->assertTrue(
+			$this->rootView->unlink('/' . self::TEST_FILES_SHARING_API_USER2 . '/files/test')
+		);
+		$this->assertEtagsChanged([self::TEST_FILES_SHARING_API_USER2]);
+
+		$this->assertAllUnchanged();
+	}
+
+	public function testRecipientUnsharesFromSelfUniqueGroupShare() {
+		$this->loginAsUser(self::TEST_FILES_SHARING_API_USER2);
+		// rename to create an extra entry in the share table
+		$this->rootView->rename('/' . self::TEST_FILES_SHARING_API_USER2 . '/files/test', '/' . self::TEST_FILES_SHARING_API_USER2 . '/files/test_renamed');
+		$this->assertTrue(
+			$this->rootView->unlink('/' . self::TEST_FILES_SHARING_API_USER2 . '/files/test_renamed')
+		);
+		$this->assertEtagsChanged([self::TEST_FILES_SHARING_API_USER2]);
+
+		$this->assertAllUnchanged();
+	}
 }
diff --git a/lib/private/Share/Share.php b/lib/private/Share/Share.php
index 9210dfd1fd1..33801cd6347 100644
--- a/lib/private/Share/Share.php
+++ b/lib/private/Share/Share.php
@@ -1059,7 +1059,7 @@ class Share extends Constants {
 			if (isset($groupShare['file_target'])) {
 				$shareTmp['fileTarget'] = $groupShare['file_target'];
 			}
-			$listOfUnsharedItems = array_merge($listOfUnsharedItems, array($groupShare));
+			$listOfUnsharedItems = array_merge($listOfUnsharedItems, [$shareTmp]);
 			$itemUnshared = true;
 		} elseif (!$itemUnshared && isset($uniqueGroupShare)) {
 			$query = \OC_DB::prepare('UPDATE `*PREFIX*share` SET `permissions` = ? WHERE `id` = ?');
@@ -1074,7 +1074,7 @@ class Share extends Constants {
 			if (isset($uniqueGroupShare['file_target'])) {
 				$shareTmp['fileTarget'] = $uniqueGroupShare['file_target'];
 			}
-			$listOfUnsharedItems = array_merge($listOfUnsharedItems, array($uniqueGroupShare));
+			$listOfUnsharedItems = array_merge($listOfUnsharedItems, [$shareTmp]);
 			$itemUnshared = true;
 		}
 
-- 
GitLab