summaryrefslogtreecommitdiffstats
path: root/lib/private/L10N
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/private/L10N
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/private/L10N')
-rw-r--r--lib/private/L10N/Factory.php30
1 files changed, 26 insertions, 4 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