Вход Регистрация
Файл: vendor/league/flysystem/src/WhitespacePathNormalizer.php
Строк: 25
<?php

declare(strict_types=1);

namespace 
LeagueFlysystem;

use function 
array_pop;
use function 
explode;
use function 
implode;
use function 
preg_match;
use function 
str_replace;

class 
WhitespacePathNormalizer implements PathNormalizer
{
    private 
bool $allowRelativePaths;

    public function 
__construct(bool $allowRelativePathTraversal true)
    {
        
$this->allowRelativePaths $allowRelativePathTraversal;
    }

    public function 
normalizePath(string $path): string
    
{
        
$unixPath str_replace('\', '/', $path);

        if (preg_match('
#p{C}+#u', $unixPath)) {
            
throw CorruptedPathDetected::forPath($path);
        }

        
$parts = [];

        foreach (
explode('/'$unixPath) as $part) {
            switch (
$part) {
                case 
'':
                case 
'.':
                    break;

                case 
'..':
                    if (
$this->allowRelativePaths === false || empty($parts)) {
                        throw 
PathTraversalDetected::forPath($path);
                    }

                    
array_pop($parts);
                    break;

                default:
                    
$parts[] = $part;
                    break;
            }
        }

        return 
implode('/'$parts);
    }
}
Онлайн: 3
Реклама