Explorar o código

Executable Finder will now try to match if a file is already in the open_basedir list before searching it thru that list

Florin Patan %!s(int64=14) %!d(string=hai) anos
pai
achega
b552354414
Modificáronse 1 ficheiros con 17 adicións e 1 borrados
  1. 17 1
      src/Symfony/Component/Process/ExecutableFinder.php

+ 17 - 1
src/Symfony/Component/Process/ExecutableFinder.php

@@ -41,7 +41,23 @@ class ExecutableFinder
      */
     public function find($name, $default = null)
     {
-        $dirs = explode(PATH_SEPARATOR, ini_get('open_basedir') ? ini_get('open_basedir') : (getenv('PATH') ? getenv('PATH') : getenv('Path')));
+        if (ini_get('open_basedir')) {
+            $searchPath = explode(PATH_SEPARATOR, getenv('open_basedir'));
+            $dirs = array();
+            foreach($searchPath as $path) {
+                if (is_dir($path)) {
+                    $dirs[] = $path;
+                } else {
+                    $file = str_replace(dirname($path), '', $path);
+                    if($path == $name && is_executable($path)) {
+                        return $path;
+                    }
+                }
+            }
+        } else {
+            $dirs = explode(PATH_SEPARATOR, getenv('PATH') ? getenv('PATH') : getenv('Path'));
+        }
+
         $suffixes = DIRECTORY_SEPARATOR == '\\' ? (getenv('PATHEXT') ? explode(PATH_SEPARATOR, getenv('PATHEXT')) : $this->suffixes) : array('');
         foreach ($suffixes as $suffix) {
             foreach ($dirs as $dir) {