mirror of
https://github.com/nextcloud/server.git
synced 2026-06-09 08:44:07 -04:00
Merge pull request #1665 from nextcloud/speed-up-is-subdirectory-test
Simplify isSubDirectory check
This commit is contained in:
commit
38104241a2
3 changed files with 26 additions and 43 deletions
|
|
@ -2,6 +2,7 @@
|
|||
/**
|
||||
* @copyright Copyright (c) 2016, ownCloud, Inc.
|
||||
* @copyright 2016 Roeland Jago Douma <roeland@famdouma.nl>
|
||||
* @copyright 2016 Lukas Reschke <lukas@statuscode.ch>
|
||||
*
|
||||
* @author Bart Visscher <bartv@thisnet.nl>
|
||||
* @author Joas Schilling <coding@schilljs.com>
|
||||
|
|
@ -287,6 +288,27 @@ class Factory implements IFactory {
|
|||
return $requestLanguage;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if $sub is a subdirectory of $parent
|
||||
*
|
||||
* @param string $sub
|
||||
* @param string $parent
|
||||
* @return bool
|
||||
*/
|
||||
private function isSubDirectory($sub, $parent) {
|
||||
// Check whether $sub contains no ".."
|
||||
if(strpos($sub, '..') !== false) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check whether $sub is a subdirectory of $parent
|
||||
if (strpos($sub, $parent) === 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a list of language files that should be loaded
|
||||
*
|
||||
|
|
@ -302,10 +324,10 @@ class Factory implements IFactory {
|
|||
$i18nDir = $this->findL10nDir($app);
|
||||
$transFile = strip_tags($i18nDir) . strip_tags($lang) . '.json';
|
||||
|
||||
if ((\OC_Helper::isSubDirectory($transFile, $this->serverRoot . '/core/l10n/')
|
||||
|| \OC_Helper::isSubDirectory($transFile, $this->serverRoot . '/lib/l10n/')
|
||||
|| \OC_Helper::isSubDirectory($transFile, $this->serverRoot . '/settings/l10n/')
|
||||
|| \OC_Helper::isSubDirectory($transFile, \OC_App::getAppPath($app) . '/l10n/')
|
||||
if (($this->isSubDirectory($transFile, $this->serverRoot . '/core/l10n/')
|
||||
|| $this->isSubDirectory($transFile, $this->serverRoot . '/lib/l10n/')
|
||||
|| $this->isSubDirectory($transFile, $this->serverRoot . '/settings/l10n/')
|
||||
|| $this->isSubDirectory($transFile, \OC_App::getAppPath($app) . '/l10n/')
|
||||
)
|
||||
&& file_exists($transFile)) {
|
||||
// load the translations file
|
||||
|
|
|
|||
|
|
@ -377,32 +377,6 @@ class OC_Helper {
|
|||
return $newpath;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if $sub is a subdirectory of $parent
|
||||
*
|
||||
* @param string $sub
|
||||
* @param string $parent
|
||||
* @return bool
|
||||
*/
|
||||
public static function isSubDirectory($sub, $parent) {
|
||||
$realpathSub = realpath($sub);
|
||||
$realpathParent = realpath($parent);
|
||||
|
||||
// realpath() may return false in case the directory does not exist
|
||||
// since we can not be sure how different PHP versions may behave here
|
||||
// we do an additional check whether realpath returned false
|
||||
if($realpathSub === false || $realpathParent === false) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check whether $sub is a subdirectory of $parent
|
||||
if (strpos($realpathSub, $realpathParent) === 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an array with all keys from input lowercased or uppercased. Numbered indices are left as is.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -76,19 +76,6 @@ class LegacyHelperTest extends \Test\TestCase {
|
|||
];
|
||||
}
|
||||
|
||||
function testIsSubDirectory() {
|
||||
$result = OC_Helper::isSubDirectory("./data/", "/anotherDirectory/");
|
||||
$this->assertFalse($result);
|
||||
|
||||
$result = OC_Helper::isSubDirectory("./data/", "./data/");
|
||||
$this->assertTrue($result);
|
||||
|
||||
mkdir("data/TestSubdirectory", 0777);
|
||||
$result = OC_Helper::isSubDirectory("data/TestSubdirectory/", "data");
|
||||
rmdir("data/TestSubdirectory");
|
||||
$this->assertTrue($result);
|
||||
}
|
||||
|
||||
function testMb_array_change_key_case() {
|
||||
$arrayStart = array(
|
||||
"Foo" => "bar",
|
||||
|
|
|
|||
Loading…
Reference in a new issue