diff --git a/src/pocketmine/command/SimpleCommandMap.php b/src/pocketmine/command/SimpleCommandMap.php index 88d95a5ba..d7296f82f 100644 --- a/src/pocketmine/command/SimpleCommandMap.php +++ b/src/pocketmine/command/SimpleCommandMap.php @@ -66,13 +66,13 @@ use pocketmine\command\defaults\VersionCommand; use pocketmine\command\defaults\WhitelistCommand; use pocketmine\command\utils\InvalidCommandSyntaxException; use pocketmine\Server; -use function array_map; use function array_shift; use function count; use function explode; use function implode; use function min; -use function str_getcsv; +use function preg_match_all; +use function stripslashes; use function strpos; use function strtolower; use function trim; @@ -247,7 +247,16 @@ class SimpleCommandMap implements CommandMap{ } public function dispatch(CommandSender $sender, string $commandLine) : bool{ - $args = array_map("\stripslashes", str_getcsv($commandLine, " ")); + $args = []; + preg_match_all('/"((?:\\\\.|[^\\\\"])*)"|(\S+)/u', $commandLine, $matches); + foreach($matches[0] as $k => $_){ + for($i = 1; $i <= 2; ++$i){ + if($matches[$i][$k] !== ""){ + $args[$k] = stripslashes($matches[$i][$k]); + break; + } + } + } $sentCommandLabel = ""; $target = $this->matchCommand($sentCommandLabel, $args);