summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorLukas Reschke <lukas@statuscode.ch>2016-10-07 21:53:01 +0200
committerLukas Reschke <lukas@statuscode.ch>2016-10-07 21:56:43 +0200
commit0245dd7221b6901aab0118688a1a16328248d530 (patch)
tree41a21191068cda8f2836bead68ea20f313ef3e3f /lib
parentbccc4e618a58281f390b6baa88cc0b03b1e40172 (diff)
downloadnextcloud-server-0245dd7221b6901aab0118688a1a16328248d530.tar.gz
nextcloud-server-0245dd7221b6901aab0118688a1a16328248d530.zip
Simplify isSubDirectory check
Shaves off another 9ms per request as can be seen at https://blackfire.io/profiles/compare/dd54cef3-e58d-4a22-b8f4-c7c4b70697be/graph Signed-off-by: Lukas Reschke <lukas@statuscode.ch>
Diffstat (limited to 'lib')
-rw-r--r--lib/private/L10N/Factory.php30
-rw-r--r--lib/private/legacy/helper.php26
2 files changed, 26 insertions, 30 deletions
diff --git a/lib/private/L10N/Factory.php b/lib/private/L10N/Factory.php
index 91233a0c4a7..8aad395065c 100644
--- a/lib/private/L10N/Factory.php
+++ b/lib/private/L10N/Factory.php
@@ -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>
@@ -288,6 +289,27 @@ class Factory implements IFactory {
}
/**
+ * 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
*
* @param string $app
@@ -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
diff --git a/lib/private/legacy/helper.php b/lib/private/legacy/helper.php
index b19e58a9e6c..0b9477dacd4 100644
--- a/lib/private/legacy/helper.php
+++ b/lib/private/legacy/helper.php
@@ -378,32 +378,6 @@ class OC_Helper {
}
/**
- * 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.
*
* @param array $input The array to work on