Merge pull request #44415 from nextcloud/backport/44132/stable27

[stable27] fix: don't return null for SharedStorage::getWrapperStorage with share recursion
This commit is contained in:
Stephan Orbaugh 2024-03-25 15:32:08 +01:00 committed by GitHub
commit bc73ac6347
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -101,6 +101,12 @@ class SharedStorage extends \OC\Files\Storage\Wrapper\Jail implements ISharedSto
private static int $initDepth = 0;
/**
* @psalm-suppress NonInvariantDocblockPropertyType
* @var ?\OC\Files\Storage\Storage $storage
*/
protected $storage;
public function __construct($arguments) {
$this->ownerView = $arguments['ownerView'];
$this->logger = \OC::$server->getLogger();
@ -136,8 +142,21 @@ class SharedStorage extends \OC\Files\Storage\Wrapper\Jail implements ISharedSto
return $this->sourceRootInfo;
}
/**
* @psalm-assert \OC\Files\Storage\Storage $this->storage
*/
private function init() {
if ($this->initialized) {
if (!$this->storage) {
// marked as initialized but no storage set
// this is probably because some code path has caused recursion during the share setup
// we setup a "failed storage" so `getWrapperStorage` doesn't return null.
// If the share setup completes after this the "failed storage" will be overwritten by the correct one
$this->logger->warning('Possible share setup recursion detected');
$this->storage = new FailedStorage(['exception' => new \Exception('Possible share setup recursion detected')]);
$this->cache = new FailedCache();
$this->rootPath = '';
}
return;
}