Procházet zdrojové kódy

Mark $usersSetup only if user was found in initMountPoints

initMountPoints is marking a user as successfully initialized too
early. If the user was not found an NoUserException was thrown, the
second time initMountPoints is called would not rethrow the exception
and happily continue.

This fix makes sure that we consistently throw NoUserException when
initMountPoints is called repeatedly with invalid users.
tags/v9.1.0beta1
Vincent Petry před 8 roky
rodič
revize
13c01e62cf
Žádný účet není propojen s e-mailovou adresou tvůrce revize
2 změnil soubory, kde provedl 24 přidání a 2 odebrání
  1. 2
    2
      lib/private/files/filesystem.php
  2. 22
    0
      tests/lib/files/filesystem.php

+ 2
- 2
lib/private/files/filesystem.php Zobrazit soubor

@@ -378,8 +378,6 @@ class Filesystem {
if (isset(self::$usersSetup[$user])) {
return;
}
self::$usersSetup[$user] = true;

$root = \OC_User::getHome($user);

$userManager = \OC::$server->getUserManager();
@@ -390,6 +388,8 @@ class Filesystem {
throw new \OC\User\NoUserException('Backends provided no user object for ' . $user);
}

self::$usersSetup[$user] = true;

$homeStorage = \OC::$server->getConfig()->getSystemValue('objectstore');
if (!empty($homeStorage)) {
// sanity checks

+ 22
- 0
tests/lib/files/filesystem.php Zobrazit soubor

@@ -341,6 +341,28 @@ class Filesystem extends \Test\TestCase {
$this->assertEquals(2, $thrown);
}

/**
* Tests that an exception is thrown when passed user does not exist.
*/
public function testLocalMountWhenUserDoesNotExistTwice() {
$thrown = 0;
$userId = $this->getUniqueID('user_');

try {
\OC\Files\Filesystem::initMountPoints($userId);
} catch (NoUserException $e) {
$thrown++;
}

try {
\OC\Files\Filesystem::initMountPoints($userId);
} catch (NoUserException $e) {
$thrown++;
}

$this->assertEquals(2, $thrown);
}

/**
* Tests that the home storage is used for the user's mount point
*/

Načítá se…
Zrušit
Uložit