From 3d2c83a50135244c31224bb4e605e710f78da8f8 Mon Sep 17 00:00:00 2001 From: Alex Rock Ancelet Date: Thu, 28 May 2020 23:12:16 +0200 Subject: [PATCH] Make sure test targets are sanitized in a windows-compatible way --- src/PendingObjects/UsesCall.php | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/PendingObjects/UsesCall.php b/src/PendingObjects/UsesCall.php index d7cfc1f6..56205be8 100644 --- a/src/PendingObjects/UsesCall.php +++ b/src/PendingObjects/UsesCall.php @@ -59,7 +59,17 @@ final class UsesCall public function in(string ...$targets): void { $targets = array_map(function ($path): string { - return $path[0] === DIRECTORY_SEPARATOR + $startChar = DIRECTORY_SEPARATOR; + + if ('\\' === DIRECTORY_SEPARATOR) { + $path = (string) preg_replace_callback('~^(?P[a-z]+:\\\)~i', function ($match): string { + return strtolower($match['drive']); + }, $path); + + $startChar = strtolower((string) preg_replace('~^([a-z]+:\\\).*$~i', '$1', __DIR__)); + } + + return 0 === strpos($path, $startChar) ? $path : implode(DIRECTORY_SEPARATOR, [ dirname($this->filename), @@ -68,12 +78,12 @@ final class UsesCall }, $targets); $this->targets = array_map(function ($target): string { - $realTarget = realpath($target); - if ($realTarget === false) { - throw new InvalidUsesPath($target); + $isValid = is_dir($target) || file_exists($target); + if (!$isValid) { + throw new InvalidUsesPath($target . "\n"); } - return $realTarget; + return $target; }, $targets); }