rollback cache rename if trashbin move fails

Signed-off-by: Robin Appelman <robin@icewind.nl>
This commit is contained in:
Robin Appelman 2020-06-30 16:09:50 +02:00 committed by backportbot[bot]
parent c567b1d6b2
commit b6a600e653
2 changed files with 7 additions and 7 deletions

View File

@ -278,6 +278,8 @@ class Trashbin {
/** @var \OC\Files\Storage\Storage $sourceStorage */
[$sourceStorage, $sourceInternalPath] = $ownerView->resolvePath('/files/' . $ownerPath);
$connection = \OC::$server->getDatabaseConnection();
$connection->beginTransaction();
$trashStorage->getUpdater()->renameFromStorage($sourceStorage, $sourceInternalPath, $trashInternalPath);
try {
@ -300,9 +302,12 @@ class Trashbin {
} else {
$sourceStorage->unlink($sourceInternalPath);
}
$connection->rollBack();
return false;
}
$connection->commit();
if ($moveSuccessful) {
$query = \OC_DB::prepare("INSERT INTO `*PREFIX*files_trash` (`id`,`timestamp`,`location`,`user`) VALUES (?,?,?,?)");
$result = $query->execute([$filename, $timestamp, $location, $owner]);

View File

@ -1167,13 +1167,8 @@ class ViewTest extends \Test\TestCase {
->setMethods(['fopen'])
->getMock();
$storage2->expects($this->any())
->method('fopen')
->willReturnCallback(function ($path, $mode) use ($storage2) {
/** @var \PHPUnit_Framework_MockObject_MockObject | \OC\Files\Storage\Temporary $storage2 */
$source = fopen($storage2->getSourcePath($path), $mode);
return Quota::wrap($source, 9);
});
$storage2->method('writeStream')
->willReturn(0);
$storage1->mkdir('sub');
$storage1->file_put_contents('foo.txt', '0123456789ABCDEFGH');