Browse Source

Fix issue with brackets in directory names

bohwaz 2 years ago
parent
commit
5aef69423a
2 changed files with 22 additions and 10 deletions
  1. 12 6
      index.php
  2. 10 4
      server.php

+ 12 - 6
index.php

@@ -1303,13 +1303,19 @@ namespace NanoKaraDAV
 			$this->path = __DIR__ . '/';
 		}
 
+		static protected function glob(string $path, string $pattern = '', int $flags = 0): array
+		{
+			$path = preg_replace('/[\*\?\[\]]/', '\\\\$0', $path);
+			return glob($path . $pattern, $flags);
+		}
+
 		public function list(string $uri, ?array $properties): iterable
 		{
-			$dirs = glob($this->path . $uri . '/*', \GLOB_ONLYDIR);
+			$dirs = self::glob($this->path . $uri, '/*', \GLOB_ONLYDIR);
 			$dirs = array_map('basename', $dirs);
 			natcasesort($dirs);
 
-			$files = glob($this->path . $uri . '/*');
+			$files = self::glob($this->path . $uri, '/*');
 			$files = array_map('basename', $files);
 			$files = array_diff($files, $dirs);
 
@@ -1486,7 +1492,7 @@ namespace NanoKaraDAV
 			}
 
 			if (is_dir($target)) {
-				foreach (glob($target . '/*') as $file) {
+				foreach (self::glob($target, '/*') as $file) {
 					$this->delete(substr($file, strlen($this->path)));
 				}
 
@@ -1583,7 +1589,7 @@ namespace NanoKaraDAV
 			$last = 0;
 			$path = rtrim($path, '/');
 
-			foreach (glob($path . '/*', GLOB_NOSORT) as $f) {
+			foreach (self::glob($path, '/*', GLOB_NOSORT) as $f) {
 				if (is_dir($f)) {
 					$m = self::getDirectoryMTime($f);
 
@@ -1651,11 +1657,11 @@ namespace {
 		$fp = fopen(__FILE__, 'r');
 
 		if ($relative_uri == 'webdav.js') {
-			fseek($fp, 43652, SEEK_SET);
+			fseek($fp, 43873, SEEK_SET);
 			echo fread($fp, 24265);
 		}
 		else {
-			fseek($fp, 43652 + 24265, SEEK_SET);
+			fseek($fp, 43873 + 24265, SEEK_SET);
 			echo fread($fp, 6760);
 		}
 

+ 10 - 4
server.php

@@ -27,13 +27,19 @@ namespace NanoKaraDAV
 			$this->path = __DIR__ . '/';
 		}
 
+		static protected function glob(string $path, string $pattern = '', int $flags = 0): array
+		{
+			$path = preg_replace('/[\*\?\[\]]/', '\\\\$0', $path);
+			return glob($path . $pattern, $flags);
+		}
+
 		public function list(string $uri, ?array $properties): iterable
 		{
-			$dirs = glob($this->path . $uri . '/*', \GLOB_ONLYDIR);
+			$dirs = self::glob($this->path . $uri, '/*', \GLOB_ONLYDIR);
 			$dirs = array_map('basename', $dirs);
 			natcasesort($dirs);
 
-			$files = glob($this->path . $uri . '/*');
+			$files = self::glob($this->path . $uri, '/*');
 			$files = array_map('basename', $files);
 			$files = array_diff($files, $dirs);
 
@@ -210,7 +216,7 @@ namespace NanoKaraDAV
 			}
 
 			if (is_dir($target)) {
-				foreach (glob($target . '/*') as $file) {
+				foreach (self::glob($target, '/*') as $file) {
 					$this->delete(substr($file, strlen($this->path)));
 				}
 
@@ -307,7 +313,7 @@ namespace NanoKaraDAV
 			$last = 0;
 			$path = rtrim($path, '/');
 
-			foreach (glob($path . '/*', GLOB_NOSORT) as $f) {
+			foreach (self::glob($path, '/*', GLOB_NOSORT) as $f) {
 				if (is_dir($f)) {
 					$m = self::getDirectoryMTime($f);