Isset is a native language construct and thus A LOT faster than using strlen()
On my local machine this leads to a 1s performance gain for about 1 million paths. Considering that this function will be called a lot for every file operation this makes a noticable difference.
private function assertPathLength($path) {
$maxLen = min(PHP_MAXPATHLEN, 4000);
- $pathLen = strlen($path);
- if ($pathLen > $maxLen) {
+ // Check for the string length - performed using isset() instead of strlen()
+ // because isset() is about 5x-40x faster.
+ if(isset($path[$maxLen])) {
+ $pathLen = strlen($path);
throw new \OCP\Files\InvalidPathException("Path length($pathLen) exceeds max path length($maxLen): $path");
}
}