diff -u b/src/PathProcessor.php b/src/PathProcessor.php --- b/src/PathProcessor.php +++ b/src/PathProcessor.php @@ -121,20 +121,23 @@ return $path; } $original_path = $path; - $subpath = []; - $max_depth = $this->getMaxDepth(); - $i = 0; - while (($path_array = explode('/', ltrim($path, '/'))) && ($max_depth === 0 || $i < $max_depth)) { - $i++; - $subpath[] = array_pop($path_array); - if (empty($path_array)) { - break; - } - $path = '/' . implode('/', $path_array); - $processed_path = $this->pathProcessor->processOutbound($path, $options, $request); - if ($processed_path !== $path) { - $path = $processed_path . '/' . implode('/', array_reverse($subpath)); - return $path; + if ($valid_path = $this->isValidPath($path)) { + $subpath = []; + $max_depth = $this->getMaxDepth(); + $i = 0; + while (($path_array = explode('/', ltrim($path, '/'))) && ($max_depth === 0 || $i < $max_depth)) { + $i++; + $subpath[] = array_pop($path_array); + if (empty($path_array)) { + break; + } + $path = '/' . implode('/', $path_array); + + $processed_path = $this->pathProcessor->processOutbound($path, $options, $request); + if ($processed_path !== $path) { + $path = $processed_path . '/' . implode('/', array_reverse($subpath)); + return $path; + } } } @@ -179,12 +182,9 @@ // Ignore whitelisted paths and return false $blacklist = \Drupal::config('subpathauto.settings')->get('blacklist'); - $patterns = explode('\n', $blacklist); - if ($patterns) { - foreach ($patterns as $pattern) { - if (\Drupal::service('path.matcher')->matchPath($path, $pattern)) { - return FALSE; - } + if ($blacklist) { + if (\Drupal::service('path.matcher')->matchPath($path, $blacklist)) { + return FALSE; } }