Fix check whether a non-owned index is being dropped in DatabaseTableChangeProcessor
authorTim Düsterhus <duesterhus@woltlab.com>
Thu, 19 Aug 2021 14:43:57 +0000 (16:43 +0200)
committerTim Düsterhus <duesterhus@woltlab.com>
Thu, 19 Aug 2021 14:43:57 +0000 (16:43 +0200)
The reproducer and fix is effectively identical to the one in
d7f721d6f920d66f75102723b504d89e57a8c9ff.

Package A: Installs KEY someIndex (`UNIQUE`)
Package B: Installs UNIQUE KEY someIndex2 (`UNIQUE`)
Package B: Drops UNIQUE KEY someIndex2 (`UNIQUE`)

It was erroneously detected that Package B would drop the index owned by
Package A. The actual dropping logic was already correct, just the safety check
was incorrect.

wcfsetup/install/files/lib/system/database/table/DatabaseTableChangeProcessor.class.php

index 7bd6d57ea9240f5a71a17af72e6d7d5cb7759c59..3ee2a2b7b60d95dd93c6431d128000722a8e15ea 100644 (file)
@@ -1199,7 +1199,7 @@ class DatabaseTableChangeProcessor
 
                         foreach ($table->getIndices() as $index) {
                             foreach ($existingIndices as $existingIndex) {
-                                if (empty(\array_diff($index->getData(), $existingIndex->getData()))) {
+                                if (empty(\array_diff_assoc($index->getData(), $existingIndex->getData()))) {
                                     if ($index->willBeDropped()) {
                                         if ($this->getIndexPackageID($table, $index) !== $this->package->packageID) {
                                             $errors[] = [