From d4bdf110f9dc7f19aa2c4a53d26115ea5c76504d Mon Sep 17 00:00:00 2001 From: Justin Hileman Date: Sat, 30 Jul 2016 22:59:23 -0700 Subject: [PATCH] Always check is_dir() and file_exists() with filesystem streams. --- src/Mustache/Loader/FilesystemLoader.php | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/Mustache/Loader/FilesystemLoader.php b/src/Mustache/Loader/FilesystemLoader.php index 8f84774..a313751 100644 --- a/src/Mustache/Loader/FilesystemLoader.php +++ b/src/Mustache/Loader/FilesystemLoader.php @@ -51,10 +51,10 @@ class Mustache_Loader_FilesystemLoader implements Mustache_Loader if (strpos($this->baseDir, '://') === false) { $this->baseDir = realpath($this->baseDir); + } - if (!is_dir($this->baseDir)) { - throw new Mustache_Exception_RuntimeException(sprintf('FilesystemLoader baseDir must be a directory: %s', $baseDir)); - } + if ($this->shouldCheckPath() && !is_dir($this->baseDir)) { + throw new Mustache_Exception_RuntimeException(sprintf('FilesystemLoader baseDir must be a directory: %s', $baseDir)); } if (array_key_exists('extension', $options)) { @@ -98,7 +98,7 @@ class Mustache_Loader_FilesystemLoader implements Mustache_Loader { $fileName = $this->getFileName($name); - if (strpos($this->baseDir, '://') === false && !file_exists($fileName)) { + if ($this->shouldCheckPath() && !file_exists($fileName)) { throw new Mustache_Exception_UnknownTemplateException($name); } @@ -121,4 +121,15 @@ class Mustache_Loader_FilesystemLoader implements Mustache_Loader return $fileName; } + + /** + * Only check if baseDir is a directory and requested templates are files if + * baseDir is using the filesystem stream wrapper. + * + * @return bool Whether to check `is_dir` and `file_exists` + */ + protected function shouldCheckPath() + { + return strpos($this->baseDir, '://') === false || strpos($this->baseDir, 'file://') === 0; + } }