Changeset 99944 in spip-zone


Ignore:
Timestamp:
Oct 14, 2016, 5:03:31 PM (2 years ago)
Author:
rastapopoulos@…
Message:

Mise à jour de la librairie http-foundation ET au passage de l'autoloader fourni. Il était TRES vieux, et du coup il passait avant celui fourni par Indexer, et ça plantait (méthode manquante). Un jour je continuerai de regarder les propositions de marcimat pour mutualiser l'autoloader/composer… Pour ce qui est de la lib c'est une mise à jour mineure dans la même branche 2.3, donc ne devrait rien casser, le but était surtout de mettre à jour le loader.

Location:
_plugins_/http/trunk
Files:
17 added
102 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/http/trunk/composer.lock

    r78576 r99944  
    22    "_readme": [
    33        "This file locks the dependencies of your project to a known state",
    4         "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file"
     4        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
     5        "This file is @generated automatically"
    56    ],
    6     "hash": "ed1c854bf2ff44e202cbcc182c550cc2",
     7    "content-hash": "961d74da7f9d07c9836b30bef57e2f46",
    78    "packages": [
    89        {
     
    1213            "source": {
    1314                "type": "git",
    14                 "url": "https://github.com/symfony/HttpFoundation.git",
    15                 "reference": "796619f49371629db8f5ef5ce82f2f52e4fdfd9d"
     15                "url": "https://github.com/symfony/http-foundation.git",
     16                "reference": "9f4dbb1f3e3cad22d9462e0306c9c71212458f61"
    1617            },
    1718            "dist": {
    1819                "type": "zip",
    19                 "url": "https://api.github.com/repos/symfony/HttpFoundation/zipball/796619f49371629db8f5ef5ce82f2f52e4fdfd9d",
    20                 "reference": "796619f49371629db8f5ef5ce82f2f52e4fdfd9d",
     20                "url": "https://api.github.com/repos/symfony/http-foundation/zipball/9f4dbb1f3e3cad22d9462e0306c9c71212458f61",
     21                "reference": "9f4dbb1f3e3cad22d9462e0306c9c71212458f61",
    2122                "shasum": ""
    2223            },
    2324            "require": {
    24                 "php": ">=5.3.3"
     25                "php": ">=5.3.3",
     26                "symfony/polyfill-mbstring": "~1.1"
    2527            },
    2628            "type": "library",
     
    3638                "classmap": [
    3739                    "Symfony/Component/HttpFoundation/Resources/stubs"
     40                ],
     41                "exclude-from-classmap": [
     42                    "/Tests/"
    3843                ]
    3944            },
     
    4954                {
    5055                    "name": "Symfony Community",
    51                     "homepage": "http://symfony.com/contributors"
     56                    "homepage": "https://symfony.com/contributors"
    5257                }
    5358            ],
    5459            "description": "Symfony HttpFoundation Component",
    55             "homepage": "http://symfony.com",
    56             "time": "2013-11-04 06:09:51"
     60            "homepage": "https://symfony.com",
     61            "time": "2016-05-13 15:22:39"
     62        },
     63        {
     64            "name": "symfony/polyfill-mbstring",
     65            "version": "dev-master",
     66            "source": {
     67                "type": "git",
     68                "url": "https://github.com/symfony/polyfill-mbstring.git",
     69                "reference": "53ad9faffe141fbe8f98cd6a7fd9a5e84513f56c"
     70            },
     71            "dist": {
     72                "type": "zip",
     73                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/53ad9faffe141fbe8f98cd6a7fd9a5e84513f56c",
     74                "reference": "53ad9faffe141fbe8f98cd6a7fd9a5e84513f56c",
     75                "shasum": ""
     76            },
     77            "require": {
     78                "php": ">=5.3.3"
     79            },
     80            "suggest": {
     81                "ext-mbstring": "For best performance"
     82            },
     83            "type": "library",
     84            "extra": {
     85                "branch-alias": {
     86                    "dev-master": "1.2-dev"
     87                }
     88            },
     89            "autoload": {
     90                "psr-4": {
     91                    "Symfony\\Polyfill\\Mbstring\\": ""
     92                },
     93                "files": [
     94                    "bootstrap.php"
     95                ]
     96            },
     97            "notification-url": "https://packagist.org/downloads/",
     98            "license": [
     99                "MIT"
     100            ],
     101            "authors": [
     102                {
     103                    "name": "Nicolas Grekas",
     104                    "email": "p@tchwork.com"
     105                },
     106                {
     107                    "name": "Symfony Community",
     108                    "homepage": "https://symfony.com/contributors"
     109                }
     110            ],
     111            "description": "Symfony polyfill for the Mbstring extension",
     112            "homepage": "https://symfony.com",
     113            "keywords": [
     114                "compatibility",
     115                "mbstring",
     116                "polyfill",
     117                "portable",
     118                "shim"
     119            ],
     120            "time": "2016-08-30 17:06:17"
    57121        }
    58122    ],
    59     "packages-dev": [
    60 
    61     ],
    62     "aliases": [
    63 
    64     ],
     123    "packages-dev": [],
     124    "aliases": [],
    65125    "minimum-stability": "dev",
    66     "stability-flags": [
    67 
    68     ],
     126    "stability-flags": [],
     127    "prefer-stable": false,
     128    "prefer-lowest": false,
    69129    "platform": {
    70130        "php": ">=5.3.3"
    71131    },
    72     "platform-dev": [
    73 
    74     ]
     132    "platform-dev": []
    75133}
  • _plugins_/http/trunk/vendor/autoload.php

    r78576 r99944  
    33// autoload.php @generated by Composer
    44
    5 require_once __DIR__ . '/composer' . '/autoload_real.php';
     5require_once __DIR__ . '/composer/autoload_real.php';
    66
    77return ComposerAutoloaderInit9e10c0dae8b46295655c405e355426a0::getLoader();
  • _plugins_/http/trunk/vendor/composer/ClassLoader.php

    r78576 r99944  
    1414
    1515/**
    16  * ClassLoader implements a PSR-0 class loader
    17  *
    18  * See https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md
     16 * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
    1917 *
    2018 *     $loader = new \Composer\Autoload\ClassLoader();
     
    4038 * @author Fabien Potencier <fabien@symfony.com>
    4139 * @author Jordi Boggiano <j.boggiano@seld.be>
     40 * @see    http://www.php-fig.org/psr/psr-0/
     41 * @see    http://www.php-fig.org/psr/psr-4/
    4242 */
    4343class ClassLoader
    4444{
    45     private $prefixes = array();
    46     private $fallbackDirs = array();
     45    // PSR-4
     46    private $prefixLengthsPsr4 = array();
     47    private $prefixDirsPsr4 = array();
     48    private $fallbackDirsPsr4 = array();
     49
     50    // PSR-0
     51    private $prefixesPsr0 = array();
     52    private $fallbackDirsPsr0 = array();
     53
    4754    private $useIncludePath = false;
    4855    private $classMap = array();
     56    private $classMapAuthoritative = false;
     57    private $missingClasses = array();
    4958
    5059    public function getPrefixes()
    5160    {
    52         return call_user_func_array('array_merge', $this->prefixes);
     61        if (!empty($this->prefixesPsr0)) {
     62            return call_user_func_array('array_merge', $this->prefixesPsr0);
     63        }
     64
     65        return array();
     66    }
     67
     68    public function getPrefixesPsr4()
     69    {
     70        return $this->prefixDirsPsr4;
    5371    }
    5472
    5573    public function getFallbackDirs()
    5674    {
    57         return $this->fallbackDirs;
     75        return $this->fallbackDirsPsr0;
     76    }
     77
     78    public function getFallbackDirsPsr4()
     79    {
     80        return $this->fallbackDirsPsr4;
    5881    }
    5982
     
    7699
    77100    /**
    78      * Registers a set of classes, merging with any others previously set.
    79      *
    80      * @param string       $prefix  The classes prefix
    81      * @param array|string $paths   The location(s) of the classes
    82      * @param bool         $prepend Prepend the location(s)
     101     * Registers a set of PSR-0 directories for a given prefix, either
     102     * appending or prepending to the ones previously set for this prefix.
     103     *
     104     * @param string       $prefix  The prefix
     105     * @param array|string $paths   The PSR-0 root directories
     106     * @param bool         $prepend Whether to prepend the directories
    83107     */
    84108    public function add($prefix, $paths, $prepend = false)
     
    86110        if (!$prefix) {
    87111            if ($prepend) {
    88                 $this->fallbackDirs = array_merge(
     112                $this->fallbackDirsPsr0 = array_merge(
    89113                    (array) $paths,
    90                     $this->fallbackDirs
     114                    $this->fallbackDirsPsr0
    91115                );
    92116            } else {
    93                 $this->fallbackDirs = array_merge(
    94                     $this->fallbackDirs,
     117                $this->fallbackDirsPsr0 = array_merge(
     118                    $this->fallbackDirsPsr0,
    95119                    (array) $paths
    96120                );
     
    101125
    102126        $first = $prefix[0];
    103         if (!isset($this->prefixes[$first][$prefix])) {
    104             $this->prefixes[$first][$prefix] = (array) $paths;
     127        if (!isset($this->prefixesPsr0[$first][$prefix])) {
     128            $this->prefixesPsr0[$first][$prefix] = (array) $paths;
    105129
    106130            return;
    107131        }
    108132        if ($prepend) {
    109             $this->prefixes[$first][$prefix] = array_merge(
     133            $this->prefixesPsr0[$first][$prefix] = array_merge(
    110134                (array) $paths,
    111                 $this->prefixes[$first][$prefix]
     135                $this->prefixesPsr0[$first][$prefix]
    112136            );
    113137        } else {
    114             $this->prefixes[$first][$prefix] = array_merge(
    115                 $this->prefixes[$first][$prefix],
     138            $this->prefixesPsr0[$first][$prefix] = array_merge(
     139                $this->prefixesPsr0[$first][$prefix],
    116140                (array) $paths
    117141            );
     
    120144
    121145    /**
    122      * Registers a set of classes, replacing any others previously set.
    123      *
    124      * @param string       $prefix The classes prefix
    125      * @param array|string $paths  The location(s) of the classes
     146     * Registers a set of PSR-4 directories for a given namespace, either
     147     * appending or prepending to the ones previously set for this namespace.
     148     *
     149     * @param string       $prefix  The prefix/namespace, with trailing '\\'
     150     * @param array|string $paths   The PSR-4 base directories
     151     * @param bool         $prepend Whether to prepend the directories
     152     *
     153     * @throws \InvalidArgumentException
     154     */
     155    public function addPsr4($prefix, $paths, $prepend = false)
     156    {
     157        if (!$prefix) {
     158            // Register directories for the root namespace.
     159            if ($prepend) {
     160                $this->fallbackDirsPsr4 = array_merge(
     161                    (array) $paths,
     162                    $this->fallbackDirsPsr4
     163                );
     164            } else {
     165                $this->fallbackDirsPsr4 = array_merge(
     166                    $this->fallbackDirsPsr4,
     167                    (array) $paths
     168                );
     169            }
     170        } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
     171            // Register directories for a new namespace.
     172            $length = strlen($prefix);
     173            if ('\\' !== $prefix[$length - 1]) {
     174                throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
     175            }
     176            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
     177            $this->prefixDirsPsr4[$prefix] = (array) $paths;
     178        } elseif ($prepend) {
     179            // Prepend directories for an already registered namespace.
     180            $this->prefixDirsPsr4[$prefix] = array_merge(
     181                (array) $paths,
     182                $this->prefixDirsPsr4[$prefix]
     183            );
     184        } else {
     185            // Append directories for an already registered namespace.
     186            $this->prefixDirsPsr4[$prefix] = array_merge(
     187                $this->prefixDirsPsr4[$prefix],
     188                (array) $paths
     189            );
     190        }
     191    }
     192
     193    /**
     194     * Registers a set of PSR-0 directories for a given prefix,
     195     * replacing any others previously set for this prefix.
     196     *
     197     * @param string       $prefix The prefix
     198     * @param array|string $paths  The PSR-0 base directories
    126199     */
    127200    public function set($prefix, $paths)
    128201    {
    129202        if (!$prefix) {
    130             $this->fallbackDirs = (array) $paths;
    131 
    132             return;
    133         }
    134         $this->prefixes[substr($prefix, 0, 1)][$prefix] = (array) $paths;
     203            $this->fallbackDirsPsr0 = (array) $paths;
     204        } else {
     205            $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
     206        }
     207    }
     208
     209    /**
     210     * Registers a set of PSR-4 directories for a given namespace,
     211     * replacing any others previously set for this namespace.
     212     *
     213     * @param string       $prefix The prefix/namespace, with trailing '\\'
     214     * @param array|string $paths  The PSR-4 base directories
     215     *
     216     * @throws \InvalidArgumentException
     217     */
     218    public function setPsr4($prefix, $paths)
     219    {
     220        if (!$prefix) {
     221            $this->fallbackDirsPsr4 = (array) $paths;
     222        } else {
     223            $length = strlen($prefix);
     224            if ('\\' !== $prefix[$length - 1]) {
     225                throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
     226            }
     227            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
     228            $this->prefixDirsPsr4[$prefix] = (array) $paths;
     229        }
    135230    }
    136231
     
    157252
    158253    /**
     254     * Turns off searching the prefix and fallback directories for classes
     255     * that have not been registered with the class map.
     256     *
     257     * @param bool $classMapAuthoritative
     258     */
     259    public function setClassMapAuthoritative($classMapAuthoritative)
     260    {
     261        $this->classMapAuthoritative = $classMapAuthoritative;
     262    }
     263
     264    /**
     265     * Should class lookup fail if not found in the current class map?
     266     *
     267     * @return bool
     268     */
     269    public function isClassMapAuthoritative()
     270    {
     271        return $this->classMapAuthoritative;
     272    }
     273
     274    /**
    159275     * Registers this instance as an autoloader.
    160276     *
     
    183299    {
    184300        if ($file = $this->findFile($class)) {
    185             include $file;
     301            includeFile($file);
    186302
    187303            return true;
     
    198314    public function findFile($class)
    199315    {
    200         // work around for PHP 5.3.0 - 5.3.2 https://bugs.php.net/50731
    201         if ('\\' == $class[0]) {
    202             $class = substr($class, 1);
    203         }
    204 
     316        // class map lookup
    205317        if (isset($this->classMap[$class])) {
    206318            return $this->classMap[$class];
    207319        }
    208 
    209         if (false !== $pos = strrpos($class, '\\')) {
    210             // namespaced class name
    211             $classPath = strtr(substr($class, 0, $pos), '\\', DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR;
    212             $className = substr($class, $pos + 1);
    213         } else {
    214             // PEAR-like class name
    215             $classPath = null;
    216             $className = $class;
    217         }
    218 
    219         $classPath .= strtr($className, '_', DIRECTORY_SEPARATOR) . '.php';
     320        if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
     321            return false;
     322        }
     323
     324        $file = $this->findFileWithExtension($class, '.php');
     325
     326        // Search for Hack files if we are running on HHVM
     327        if (false === $file && defined('HHVM_VERSION')) {
     328            $file = $this->findFileWithExtension($class, '.hh');
     329        }
     330
     331        if (false === $file) {
     332            // Remember that this class does not exist.
     333            $this->missingClasses[$class] = true;
     334        }
     335
     336        return $file;
     337    }
     338
     339    private function findFileWithExtension($class, $ext)
     340    {
     341        // PSR-4 lookup
     342        $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
    220343
    221344        $first = $class[0];
    222         if (isset($this->prefixes[$first])) {
    223             foreach ($this->prefixes[$first] as $prefix => $dirs) {
     345        if (isset($this->prefixLengthsPsr4[$first])) {
     346            foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) {
    224347                if (0 === strpos($class, $prefix)) {
    225                     foreach ($dirs as $dir) {
    226                         if (file_exists($dir . DIRECTORY_SEPARATOR . $classPath)) {
    227                             return $dir . DIRECTORY_SEPARATOR . $classPath;
     348                    foreach ($this->prefixDirsPsr4[$prefix] as $dir) {
     349                        if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
     350                            return $file;
    228351                        }
    229352                    }
     
    232355        }
    233356
    234         foreach ($this->fallbackDirs as $dir) {
    235             if (file_exists($dir . DIRECTORY_SEPARATOR . $classPath)) {
    236                 return $dir . DIRECTORY_SEPARATOR . $classPath;
    237             }
    238         }
    239 
    240         if ($this->useIncludePath && $file = stream_resolve_include_path($classPath)) {
     357        // PSR-4 fallback dirs
     358        foreach ($this->fallbackDirsPsr4 as $dir) {
     359            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
     360                return $file;
     361            }
     362        }
     363
     364        // PSR-0 lookup
     365        if (false !== $pos = strrpos($class, '\\')) {
     366            // namespaced class name
     367            $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
     368                . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
     369        } else {
     370            // PEAR-like class name
     371            $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
     372        }
     373
     374        if (isset($this->prefixesPsr0[$first])) {
     375            foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
     376                if (0 === strpos($class, $prefix)) {
     377                    foreach ($dirs as $dir) {
     378                        if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
     379                            return $file;
     380                        }
     381                    }
     382                }
     383            }
     384        }
     385
     386        // PSR-0 fallback dirs
     387        foreach ($this->fallbackDirsPsr0 as $dir) {
     388            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
     389                return $file;
     390            }
     391        }
     392
     393        // PSR-0 include paths.
     394        if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
    241395            return $file;
    242396        }
    243397
    244         return $this->classMap[$class] = false;
     398        return false;
    245399    }
    246400}
     401
     402/**
     403 * Scope isolated include.
     404 *
     405 * Prevents access to $this/self from included files.
     406 */
     407function includeFile($file)
     408{
     409    include $file;
     410}
  • _plugins_/http/trunk/vendor/composer/autoload_classmap.php

    r78576 r99944  
    88return array(
    99    'SessionHandlerInterface' => $vendorDir . '/symfony/http-foundation/Symfony/Component/HttpFoundation/Resources/stubs/SessionHandlerInterface.php',
     10    'Symfony\\Component\\HttpFoundation\\Resources\\stubs\\FakeFile' => $vendorDir . '/symfony/http-foundation/Symfony/Component/HttpFoundation/Resources/stubs/FakeFile.php',
    1011);
  • _plugins_/http/trunk/vendor/composer/autoload_real.php

    r78576 r99944  
    2424        spl_autoload_unregister(array('ComposerAutoloaderInit9e10c0dae8b46295655c405e355426a0', 'loadClassLoader'));
    2525
    26         $vendorDir = dirname(__DIR__);
    27         $baseDir = dirname($vendorDir);
     26        $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION');
     27        if ($useStaticLoader) {
     28            require_once __DIR__ . '/autoload_static.php';
    2829
    29         $map = require __DIR__ . '/autoload_namespaces.php';
    30         foreach ($map as $namespace => $path) {
    31             $loader->set($namespace, $path);
    32         }
     30            call_user_func(\Composer\Autoload\ComposerStaticInit9e10c0dae8b46295655c405e355426a0::getInitializer($loader));
     31        } else {
     32            $map = require __DIR__ . '/autoload_namespaces.php';
     33            foreach ($map as $namespace => $path) {
     34                $loader->set($namespace, $path);
     35            }
    3336
    34         $classMap = require __DIR__ . '/autoload_classmap.php';
    35         if ($classMap) {
    36             $loader->addClassMap($classMap);
     37            $map = require __DIR__ . '/autoload_psr4.php';
     38            foreach ($map as $namespace => $path) {
     39                $loader->setPsr4($namespace, $path);
     40            }
     41
     42            $classMap = require __DIR__ . '/autoload_classmap.php';
     43            if ($classMap) {
     44                $loader->addClassMap($classMap);
     45            }
    3746        }
    3847
    3948        $loader->register(true);
    4049
     50        if ($useStaticLoader) {
     51            $includeFiles = Composer\Autoload\ComposerStaticInit9e10c0dae8b46295655c405e355426a0::$files;
     52        } else {
     53            $includeFiles = require __DIR__ . '/autoload_files.php';
     54        }
     55        foreach ($includeFiles as $fileIdentifier => $file) {
     56            composerRequire9e10c0dae8b46295655c405e355426a0($fileIdentifier, $file);
     57        }
     58
    4159        return $loader;
    4260    }
    4361}
     62
     63function composerRequire9e10c0dae8b46295655c405e355426a0($fileIdentifier, $file)
     64{
     65    if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
     66        require $file;
     67
     68        $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
     69    }
     70}
  • _plugins_/http/trunk/vendor/composer/installed.json

    r78576 r99944  
    11[
     2    {
     3        "name": "symfony/polyfill-mbstring",
     4        "version": "dev-master",
     5        "version_normalized": "9999999-dev",
     6        "source": {
     7            "type": "git",
     8            "url": "https://github.com/symfony/polyfill-mbstring.git",
     9            "reference": "53ad9faffe141fbe8f98cd6a7fd9a5e84513f56c"
     10        },
     11        "dist": {
     12            "type": "zip",
     13            "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/53ad9faffe141fbe8f98cd6a7fd9a5e84513f56c",
     14            "reference": "53ad9faffe141fbe8f98cd6a7fd9a5e84513f56c",
     15            "shasum": ""
     16        },
     17        "require": {
     18            "php": ">=5.3.3"
     19        },
     20        "suggest": {
     21            "ext-mbstring": "For best performance"
     22        },
     23        "time": "2016-08-30T17:06:17+00:00",
     24        "type": "library",
     25        "extra": {
     26            "branch-alias": {
     27                "dev-master": "1.2-dev"
     28            }
     29        },
     30        "installation-source": "source",
     31        "autoload": {
     32            "psr-4": {
     33                "Symfony\\Polyfill\\Mbstring\\": ""
     34            },
     35            "files": [
     36                "bootstrap.php"
     37            ]
     38        },
     39        "notification-url": "https://packagist.org/downloads/",
     40        "license": [
     41            "MIT"
     42        ],
     43        "authors": [
     44            {
     45                "name": "Nicolas Grekas",
     46                "email": "p@tchwork.com"
     47            },
     48            {
     49                "name": "Symfony Community",
     50                "homepage": "https://symfony.com/contributors"
     51            }
     52        ],
     53        "description": "Symfony polyfill for the Mbstring extension",
     54        "homepage": "https://symfony.com",
     55        "keywords": [
     56            "compatibility",
     57            "mbstring",
     58            "polyfill",
     59            "portable",
     60            "shim"
     61        ]
     62    },
    263    {
    364        "name": "symfony/http-foundation",
     
    768        "source": {
    869            "type": "git",
    9             "url": "https://github.com/symfony/HttpFoundation.git",
    10             "reference": "796619f49371629db8f5ef5ce82f2f52e4fdfd9d"
     70            "url": "https://github.com/symfony/http-foundation.git",
     71            "reference": "9f4dbb1f3e3cad22d9462e0306c9c71212458f61"
    1172        },
    1273        "dist": {
    1374            "type": "zip",
    14             "url": "https://api.github.com/repos/symfony/HttpFoundation/zipball/796619f49371629db8f5ef5ce82f2f52e4fdfd9d",
    15             "reference": "796619f49371629db8f5ef5ce82f2f52e4fdfd9d",
     75            "url": "https://api.github.com/repos/symfony/http-foundation/zipball/9f4dbb1f3e3cad22d9462e0306c9c71212458f61",
     76            "reference": "9f4dbb1f3e3cad22d9462e0306c9c71212458f61",
    1677            "shasum": ""
    1778        },
    1879        "require": {
    19             "php": ">=5.3.3"
     80            "php": ">=5.3.3",
     81            "symfony/polyfill-mbstring": "~1.1"
    2082        },
    21         "time": "2013-11-04 06:09:51",
     83        "time": "2016-05-13T15:22:39+00:00",
    2284        "type": "library",
    2385        "extra": {
     
    3395            "classmap": [
    3496                "Symfony/Component/HttpFoundation/Resources/stubs"
     97            ],
     98            "exclude-from-classmap": [
     99                "/Tests/"
    35100            ]
    36101        },
     
    46111            {
    47112                "name": "Symfony Community",
    48                 "homepage": "http://symfony.com/contributors"
     113                "homepage": "https://symfony.com/contributors"
    49114            }
    50115        ],
    51116        "description": "Symfony HttpFoundation Component",
    52         "homepage": "http://symfony.com"
     117        "homepage": "https://symfony.com"
    53118    }
    54119]
  • _plugins_/http/trunk/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/AcceptHeader.php

    r78576 r99944  
    7878     * @param string $value
    7979     *
    80      * @return Boolean
     80     * @return bool
    8181     */
    8282    public function has($value)
     
    151151
    152152    /**
    153      * Sorts items by descending quality
     153     * Sorts items by descending quality.
    154154     */
    155155    private function sort()
  • _plugins_/http/trunk/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/AcceptHeaderItem.php

    r78576 r99944  
    9191        $string = $this->value.($this->quality < 1 ? ';q='.$this->quality : '');
    9292        if (count($this->attributes) > 0) {
    93             $string .= ';'.implode(';', array_map(function($name, $value) {
     93            $string .= ';'.implode(';', array_map(function ($name, $value) {
    9494                return sprintf(preg_match('/[,;=]/', $value) ? '%s="%s"' : '%s=%s', $name, $value);
    9595            }, array_keys($this->attributes), $this->attributes));
     
    176176     * @param string $name
    177177     *
    178      * @return Boolean
     178     * @return bool
    179179     */
    180180    public function hasAttribute($name)
  • _plugins_/http/trunk/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/BinaryFileResponse.php

    r78576 r99944  
    11<?php
    22
    3 /**
     3/*
    44 * This file is part of the Symfony package.
    55 *
     
    2828    protected static $trustXSendfileTypeHeader = false;
    2929
     30    /**
     31     * @var File
     32     */
    3033    protected $file;
    3134    protected $offset;
     
    3639     *
    3740     * @param \SplFileInfo|string $file               The file to stream
    38      * @param integer             $status             The response status code
     41     * @param int                 $status             The response status code
    3942     * @param array               $headers            An array of response headers
    40      * @param boolean             $public             Files are public by default
     43     * @param bool                $public             Files are public by default
    4144     * @param null|string         $contentDisposition The type of Content-Disposition to set automatically with the filename
    42      * @param boolean             $autoEtag           Whether the ETag header should be automatically set
    43      * @param boolean             $autoLastModified   Whether the Last-Modified header should be automatically set
     45     * @param bool                $autoEtag           Whether the ETag header should be automatically set
     46     * @param bool                $autoLastModified   Whether the Last-Modified header should be automatically set
    4447     */
    4548    public function __construct($file, $status = 200, $headers = array(), $public = true, $contentDisposition = null, $autoEtag = false, $autoLastModified = true)
     
    5659    /**
    5760     * @param \SplFileInfo|string $file               The file to stream
    58      * @param integer             $status             The response status code
     61     * @param int                 $status             The response status code
    5962     * @param array               $headers            An array of response headers
    60      * @param boolean             $public             Files are public by default
     63     * @param bool                $public             Files are public by default
    6164     * @param null|string         $contentDisposition The type of Content-Disposition to set automatically with the filename
    62      * @param boolean             $autoEtag           Whether the ETag header should be automatically set
    63      * @param boolean             $autoLastModified   Whether the Last-Modified header should be automatically set
     65     * @param bool                $autoEtag           Whether the ETag header should be automatically set
     66     * @param bool                $autoLastModified   Whether the Last-Modified header should be automatically set
     67     *
     68     * @return BinaryFileResponse The created response
    6469     */
    6570    public static function create($file = null, $status = 200, $headers = array(), $public = true, $contentDisposition = null, $autoEtag = false, $autoLastModified = true)
     
    7176     * Sets the file to stream.
    7277     *
    73      * @param \SplFileInfo|string $file The file to stream
     78     * @param \SplFileInfo|string $file               The file to stream
    7479     * @param string              $contentDisposition
    75      * @param Boolean             $autoEtag
    76      * @param Boolean             $autoLastModified
     80     * @param bool                $autoEtag
     81     * @param bool                $autoLastModified
    7782     *
    7883     * @return BinaryFileResponse
     
    8287    public function setFile($file, $contentDisposition = null, $autoEtag = false, $autoLastModified = true)
    8388    {
    84         $file = new File((string) $file);
     89        if (!$file instanceof File) {
     90            if ($file instanceof \SplFileInfo) {
     91                $file = new File($file->getPathname());
     92            } else {
     93                $file = new File((string) $file);
     94            }
     95        }
    8596
    8697        if (!$file->isReadable()) {
     
    150161        }
    151162
     163        if ('' === $filenameFallback && (!preg_match('/^[\x20-\x7e]*$/', $filename) || false !== strpos($filename, '%'))) {
     164            $encoding = mb_detect_encoding($filename, null, true);
     165
     166            for ($i = 0; $i < mb_strlen($filename, $encoding); ++$i) {
     167                $char = mb_substr($filename, $i, 1, $encoding);
     168
     169                if ('%' === $char || ord($char) < 32 || ord($char) > 126) {
     170                    $filenameFallback .= '_';
     171                } else {
     172                    $filenameFallback .= $char;
     173                }
     174            }
     175        }
     176
    152177        $dispositionHeader = $this->headers->makeDisposition($disposition, $filename, $filenameFallback);
    153178        $this->headers->set('Content-Disposition', $dispositionHeader);
     
    162187    {
    163188        $this->headers->set('Content-Length', $this->file->getSize());
    164         $this->headers->set('Accept-Ranges', 'bytes');
    165         $this->headers->set('Content-Transfer-Encoding', 'binary');
     189
     190        if (!$this->headers->has('Accept-Ranges')) {
     191            // Only accept ranges on safe HTTP methods
     192            $this->headers->set('Accept-Ranges', $request->isMethodSafe() ? 'bytes' : 'none');
     193        }
    166194
    167195        if (!$this->headers->has('Content-Type')) {
     
    169197        }
    170198
    171         if ('HTTP/1.0' != $request->server->get('SERVER_PROTOCOL')) {
     199        if ('HTTP/1.0' !== $request->server->get('SERVER_PROTOCOL')) {
    172200            $this->setProtocolVersion('1.1');
    173201        }
     
    182210            $type = $request->headers->get('X-Sendfile-Type');
    183211            $path = $this->file->getRealPath();
    184             if (strtolower($type) == 'x-accel-redirect') {
     212            // Fall back to scheme://path for stream wrapped locations.
     213            if (false === $path) {
     214                $path = $this->file->getPathname();
     215            }
     216            if (strtolower($type) === 'x-accel-redirect') {
    185217                // Do X-Accel-Mapping substitutions.
    186                 foreach (explode(',', $request->headers->get('X-Accel-Mapping', ''))  as $mapping) {
     218                // @link http://wiki.nginx.org/X-accel#X-Accel-Redirect
     219                foreach (explode(',', $request->headers->get('X-Accel-Mapping', '')) as $mapping) {
    187220                    $mapping = explode('=', $mapping, 2);
    188221
    189                     if (2 == count($mapping)) {
    190                         $location = trim($mapping[0]);
    191                         $pathPrefix = trim($mapping[1]);
    192 
    193                         if (substr($path, 0, strlen($pathPrefix)) == $pathPrefix) {
     222                    if (2 === count($mapping)) {
     223                        $pathPrefix = trim($mapping[0]);
     224                        $location = trim($mapping[1]);
     225
     226                        if (substr($path, 0, strlen($pathPrefix)) === $pathPrefix) {
    194227                            $path = $location.substr($path, strlen($pathPrefix));
    195228                            break;
     
    202235        } elseif ($request->headers->has('Range')) {
    203236            // Process the range headers.
    204             if (!$request->headers->has('If-Range') || $this->getEtag() == $request->headers->get('If-Range')) {
     237            if (!$request->headers->has('If-Range') || $this->hasValidIfRangeHeader($request->headers->get('If-Range'))) {
    205238                $range = $request->headers->get('Range');
    206239                $fileSize = $this->file->getSize();
     
    217250                }
    218251
    219                 $start = max($start, 0);
    220                 $end = min($end, $fileSize - 1);
    221 
    222                 $this->maxlen = $end < $fileSize ? $end - $start + 1 : -1;
    223                 $this->offset = $start;
    224 
    225                 $this->setStatusCode(206);
    226                 $this->headers->set('Content-Range', sprintf('bytes %s-%s/%s', $start, $end, $fileSize));
    227                 $this->headers->set('Content-Length', $end - $start + 1);
    228             }
    229         }
    230 
    231         return $this;
     252                if ($start <= $end) {
     253                    if ($start < 0 || $end > $fileSize - 1) {
     254                        $this->setStatusCode(416);
     255                        $this->headers->set('Content-Range', sprintf('bytes */%s', $fileSize));
     256                    } elseif ($start !== 0 || $end !== $fileSize - 1) {
     257                        $this->maxlen = $end < $fileSize ? $end - $start + 1 : -1;
     258                        $this->offset = $start;
     259
     260                        $this->setStatusCode(206);
     261                        $this->headers->set('Content-Range', sprintf('bytes %s-%s/%s', $start, $end, $fileSize));
     262                        $this->headers->set('Content-Length', $end - $start + 1);
     263                    }
     264                }
     265            }
     266        }
     267
     268        return $this;
     269    }
     270
     271    private function hasValidIfRangeHeader($header)
     272    {
     273        if ($this->getEtag() === $header) {
     274            return true;
     275        }
     276
     277        if (null === $lastModified = $this->getLastModified()) {
     278            return false;
     279        }
     280
     281        return $lastModified->format('D, d M Y H:i:s').' GMT' === $header;
    232282    }
    233283
    234284    /**
    235285     * Sends the file.
     286     *
     287     * {@inheritdoc}
    236288     */
    237289    public function sendContent()
    238290    {
    239291        if (!$this->isSuccessful()) {
    240             parent::sendContent();
    241 
    242             return;
     292            return parent::sendContent();
    243293        }
    244294
    245295        if (0 === $this->maxlen) {
    246             return;
     296            return $this;
    247297        }
    248298
     
    254304        fclose($out);
    255305        fclose($file);
     306
     307        return $this;
    256308    }
    257309
  • _plugins_/http/trunk/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Cookie.php

    r78576 r99944  
    1313
    1414/**
    15  * Represents a cookie
     15 * Represents a cookie.
    1616 *
    1717 * @author Johannes M. Schmitt <schmittjoh@gmail.com>
    18  *
    19  * @api
    2018 */
    2119class Cookie
     
    3230     * Constructor.
    3331     *
    34      * @param string                   $name     The name of the cookie
    35      * @param string                   $value    The value of the cookie
    36      * @param integer|string|\DateTime $expire   The time the cookie expires
    37      * @param string                   $path     The path on the server in which the cookie will be available on
    38      * @param string                   $domain   The domain that the cookie is available to
    39      * @param Boolean                  $secure   Whether the cookie should only be transmitted over a secure HTTPS connection from the client
    40      * @param Boolean                  $httpOnly Whether the cookie will be made accessible only through the HTTP protocol
     32     * @param string                                  $name     The name of the cookie
     33     * @param string                                  $value    The value of the cookie
     34     * @param int|string|\DateTime|\DateTimeInterface $expire   The time the cookie expires
     35     * @param string                                  $path     The path on the server in which the cookie will be available on
     36     * @param string                                  $domain   The domain that the cookie is available to
     37     * @param bool                                    $secure   Whether the cookie should only be transmitted over a secure HTTPS connection from the client
     38     * @param bool                                    $httpOnly Whether the cookie will be made accessible only through the HTTP protocol
    4139     *
    4240     * @throws \InvalidArgumentException
    43      *
    44      * @api
    4541     */
    4642    public function __construct($name, $value = null, $expire = 0, $path = '/', $domain = null, $secure = false, $httpOnly = true)
     
    5652
    5753        // convert expiration time to a Unix timestamp
    58         if ($expire instanceof \DateTime) {
     54        if ($expire instanceof \DateTime || $expire instanceof \DateTimeInterface) {
    5955            $expire = $expire->format('U');
    6056        } elseif (!is_numeric($expire)) {
     
    7167        $this->expire = $expire;
    7268        $this->path = empty($path) ? '/' : $path;
    73         $this->secure = (Boolean) $secure;
    74         $this->httpOnly = (Boolean) $httpOnly;
     69        $this->secure = (bool) $secure;
     70        $this->httpOnly = (bool) $httpOnly;
    7571    }
    7672
     
    8581
    8682        if ('' === (string) $this->getValue()) {
    87             $str .= 'deleted; expires='.gmdate("D, d-M-Y H:i:s T", time() - 31536001);
     83            $str .= 'deleted; expires='.gmdate('D, d-M-Y H:i:s T', time() - 31536001);
    8884        } else {
    8985            $str .= urlencode($this->getValue());
    9086
    9187            if ($this->getExpiresTime() !== 0) {
    92                 $str .= '; expires='.gmdate("D, d-M-Y H:i:s T", $this->getExpiresTime());
     88                $str .= '; expires='.gmdate('D, d-M-Y H:i:s T', $this->getExpiresTime());
    9389            }
    9490        }
     
    117113     *
    118114     * @return string
    119      *
    120      * @api
    121115     */
    122116    public function getName()
     
    129123     *
    130124     * @return string
    131      *
    132      * @api
    133125     */
    134126    public function getValue()
     
    141133     *
    142134     * @return string
    143      *
    144      * @api
    145135     */
    146136    public function getDomain()
     
    152142     * Gets the time the cookie expires.
    153143     *
    154      * @return integer
    155      *
    156      * @api
     144     * @return int
    157145     */
    158146    public function getExpiresTime()
     
    165153     *
    166154     * @return string
    167      *
    168      * @api
    169155     */
    170156    public function getPath()
     
    176162     * Checks whether the cookie should only be transmitted over a secure HTTPS connection from the client.
    177163     *
    178      * @return Boolean
    179      *
    180      * @api
     164     * @return bool
    181165     */
    182166    public function isSecure()
     
    188172     * Checks whether the cookie will be made accessible only through the HTTP protocol.
    189173     *
    190      * @return Boolean
    191      *
    192      * @api
     174     * @return bool
    193175     */
    194176    public function isHttpOnly()
     
    198180
    199181    /**
    200      * Whether this cookie is about to be cleared
     182     * Whether this cookie is about to be cleared.
    201183     *
    202      * @return Boolean
    203      *
    204      * @api
     184     * @return bool
    205185     */
    206186    public function isCleared()
  • _plugins_/http/trunk/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/Exception/FileException.php

    r78576 r99944  
    1313
    1414/**
    15  * Thrown when an error occurred in the component File
     15 * Thrown when an error occurred in the component File.
    1616 *
    1717 * @author Bernhard Schussek <bschussek@gmail.com>
  • _plugins_/http/trunk/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/Exception/FileNotFoundException.php

    r78576 r99944  
    1313
    1414/**
    15  * Thrown when a file was not found
     15 * Thrown when a file was not found.
    1616 *
    1717 * @author Bernhard Schussek <bschussek@gmail.com>
  • _plugins_/http/trunk/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/Exception/UploadException.php

    r78576 r99944  
    1313
    1414/**
    15  * Thrown when an error occurred during file upload
     15 * Thrown when an error occurred during file upload.
    1616 *
    1717 * @author Bernhard Schussek <bschussek@gmail.com>
  • _plugins_/http/trunk/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/File.php

    r78576 r99944  
    2121 *
    2222 * @author Bernhard Schussek <bschussek@gmail.com>
    23  *
    24  * @api
    2523 */
    2624class File extends \SplFileInfo
     
    2927     * Constructs a new file from the given path.
    3028     *
    31      * @param string  $path      The path to the file
    32      * @param Boolean $checkPath Whether to check the path or not
     29     * @param string $path      The path to the file
     30     * @param bool  $checkPath Whether to check the path or not
    3331     *
    3432     * @throws FileNotFoundException If the given path is not a file
    35      *
    36      * @api
    3733     */
    3834    public function __construct($path, $checkPath = true)
     
    5450     *
    5551     * @return string|null The guessed extension or null if it cannot be guessed
    56      *
    57      * @api
    5852     *
    5953     * @see ExtensionGuesser
     
    7872     *
    7973     * @see MimeTypeGuesser
    80      *
    81      * @api
    8274     */
    8375    public function getMimeType()
     
    9486     *
    9587     * @return string The extension
    96      *
    97      * @api
    9888     */
    9989    public function getExtension()
     
    111101     *
    112102     * @throws FileException if the target file could not be created
    113      *
    114      * @api
    115103     */
    116104    public function move($directory, $name = null)
     
    131119    {
    132120        if (!is_dir($directory)) {
    133             if (false === @mkdir($directory, 0777, true)) {
     121            if (false === @mkdir($directory, 0777, true) && !is_dir($directory)) {
    134122                throw new FileException(sprintf('Unable to create the "%s" directory', $directory));
    135123            }
     
    140128        $target = rtrim($directory, '/\\').DIRECTORY_SEPARATOR.(null === $name ? $this->getBasename() : $this->getName($name));
    141129
    142         return new File($target, false);
     130        return new self($target, false);
    143131    }
    144132
  • _plugins_/http/trunk/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/MimeType/ExtensionGuesser.php

    r78576 r99944  
    2727{
    2828    /**
    29      * The singleton instance
     29     * The singleton instance.
    3030     *
    3131     * @var ExtensionGuesser
     
    3434
    3535    /**
    36      * All registered ExtensionGuesserInterface instances
     36     * All registered ExtensionGuesserInterface instances.
    3737     *
    3838     * @var array
     
    4141
    4242    /**
    43      * Returns the singleton instance
     43     * Returns the singleton instance.
    4444     *
    4545     * @return ExtensionGuesser
     
    5555
    5656    /**
    57      * Registers all natively provided extension guessers
     57     * Registers all natively provided extension guessers.
    5858     */
    5959    private function __construct()
     
    6363
    6464    /**
    65      * Registers a new extension guesser
     65     * Registers a new extension guesser.
    6666     *
    6767     * When guessing, this guesser is preferred over previously registered ones.
     
    7575
    7676    /**
    77      * Tries to guess the extension
     77     * Tries to guess the extension.
    7878     *
    7979     * The mime type is passed to each registered mime type guesser in reverse order
     
    8383     *
    8484     * @param string $mimeType The mime type
    85      * @return string          The guessed extension or NULL, if none could be guessed
     85     *
     86     * @return string The guessed extension or NULL, if none could be guessed
    8687     */
    8788    public function guess($mimeType)
    8889    {
    8990        foreach ($this->guessers as $guesser) {
    90             $extension = $guesser->guess($mimeType);
    91 
    92             if (null !== $extension) {
    93                 break;
     91            if (null !== $extension = $guesser->guess($mimeType)) {
     92                return $extension;
    9493            }
    9594        }
    96 
    97         return $extension;
    9895    }
    9996}
  • _plugins_/http/trunk/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/MimeType/ExtensionGuesserInterface.php

    r78576 r99944  
    1313
    1414/**
    15  * Guesses the file extension corresponding to a given mime type
     15 * Guesses the file extension corresponding to a given mime type.
    1616 */
    1717interface ExtensionGuesserInterface
    1818{
    1919    /**
    20      * Makes a best guess for a file extension, given a mime type
     20     * Makes a best guess for a file extension, given a mime type.
    2121     *
    2222     * @param string $mimeType The mime type
    23      * @return string          The guessed extension or NULL, if none could be guessed
     23     *
     24     * @return string The guessed extension or NULL, if none could be guessed
    2425     */
    2526    public function guess($mimeType);
  • _plugins_/http/trunk/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/MimeType/FileBinaryMimeTypeGuesser.php

    r78576 r99944  
    1616
    1717/**
    18  * Guesses the mime type with the binary "file" (only available on *nix)
     18 * Guesses the mime type with the binary "file" (only available on *nix).
    1919 *
    2020 * @author Bernhard Schussek <bschussek@gmail.com>
     
    4040
    4141    /**
    42      * Returns whether this guesser is supported on the current OS
     42     * Returns whether this guesser is supported on the current OS.
    4343     *
    44      * @return Boolean
     44     * @return bool
    4545     */
    4646    public static function isSupported()
    4747    {
    48         return !defined('PHP_WINDOWS_VERSION_BUILD') && function_exists('passthru') && function_exists('escapeshellarg');
     48        return '\\' !== DIRECTORY_SEPARATOR && function_exists('passthru') && function_exists('escapeshellarg');
    4949    }
    5050
     
    6363
    6464        if (!self::isSupported()) {
    65             return null;
     65            return;
    6666        }
    6767
     
    7373            ob_end_clean();
    7474
    75             return null;
     75            return;
    7676        }
    7777
     
    8080        if (!preg_match('#^([a-z0-9\-]+/[a-z0-9\-\.]+)#i', $type, $match)) {
    8181            // it's not a type, but an error message
    82             return null;
     82            return;
    8383        }
    8484
  • _plugins_/http/trunk/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/MimeType/FileinfoMimeTypeGuesser.php

    r78576 r99944  
    3737
    3838    /**
    39      * Returns whether this guesser is supported on the current OS/PHP setup
     39     * Returns whether this guesser is supported on the current OS/PHP setup.
    4040     *
    41      * @return Boolean
     41     * @return bool
    4242     */
    4343    public static function isSupported()
     
    6060
    6161        if (!self::isSupported()) {
    62             return null;
     62            return;
    6363        }
    6464
    6565        if (!$finfo = new \finfo(FILEINFO_MIME_TYPE, $this->magicFile)) {
    66             return null;
     66            return;
    6767        }
    6868
  • _plugins_/http/trunk/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/MimeType/MimeTypeExtensionGuesser.php

    r78576 r99944  
    656656        'chemical/x-xyz' => 'xyz',
    657657        'image/bmp' => 'bmp',
     658        'image/x-ms-bmp' => 'bmp',
    658659        'image/cgm' => 'cgm',
    659660        'image/g3fax' => 'g3',
     
    723724        'text/prs.lines.tag' => 'dsc',
    724725        'text/richtext' => 'rtx',
     726        'text/rtf' => 'rtf',
    725727        'text/sgml' => 'sgml',
    726728        'text/tab-separated-values' => 'tsv',
  • _plugins_/http/trunk/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/MimeType/MimeTypeGuesser.php

    r78576 r99944  
    4141{
    4242    /**
    43      * The singleton instance
     43     * The singleton instance.
    4444     *
    4545     * @var MimeTypeGuesser
     
    4848
    4949    /**
    50      * All registered MimeTypeGuesserInterface instances
     50     * All registered MimeTypeGuesserInterface instances.
    5151     *
    5252     * @var array
     
    5555
    5656    /**
    57      * Returns the singleton instance
     57     * Returns the singleton instance.
    5858     *
    5959     * @return MimeTypeGuesser
     
    6969
    7070    /**
    71      * Registers all natively provided mime type guessers
     71     * Resets the singleton instance.
     72     */
     73    public static function reset()
     74    {
     75        self::$instance = null;
     76    }
     77
     78    /**
     79     * Registers all natively provided mime type guessers.
    7280     */
    7381    private function __construct()
     
    8391
    8492    /**
    85      * Registers a new mime type guesser
     93     * Registers a new mime type guesser.
    8694     *
    8795     * When guessing, this guesser is preferred over previously registered ones.
     
    95103
    96104    /**
    97      * Tries to guess the mime type of the given file
     105     * Tries to guess the mime type of the given file.
    98106     *
    99107     * The file is passed to each registered mime type guesser in reverse order
     
    104112     * @param string $path The path to the file
    105113     *
    106      * @return string         The mime type or NULL, if none could be guessed
     114     * @return string The mime type or NULL, if none could be guessed
    107115     *
    108116     * @throws \LogicException
     
    121129
    122130        if (!$this->guessers) {
    123             throw new \LogicException('Unable to guess the mime type as no guessers are available (Did you enable the php_fileinfo extension?)');
     131            $msg = 'Unable to guess the mime type as no guessers are available';
     132            if (!FileinfoMimeTypeGuesser::isSupported()) {
     133                $msg .= ' (Did you enable the php_fileinfo extension?)';
     134            }
     135            throw new \LogicException($msg);
    124136        }
    125137
  • _plugins_/http/trunk/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/MimeType/MimeTypeGuesserInterface.php

    r78576 r99944  
    1616
    1717/**
    18  * Guesses the mime type of a file
     18 * Guesses the mime type of a file.
    1919 *
    2020 * @author Bernhard Schussek <bschussek@gmail.com>
     
    2727     * @param string $path The path to the file
    2828     *
    29      * @return string         The mime type or NULL, if none could be guessed
     29     * @return string The mime type or NULL, if none could be guessed
    3030     *
    31      * @throws FileNotFoundException  If the file does not exist
    32      * @throws AccessDeniedException  If the file could not be read
     31     * @throws FileNotFoundException If the file does not exist
     32     * @throws AccessDeniedException If the file could not be read
    3333     */
    3434    public function guess($path);
  • _plugins_/http/trunk/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/UploadedFile.php

    r78576 r99944  
    2222 * @author Florian Eckerstorfer <florian@eckerstorfer.org>
    2323 * @author Fabien Potencier <fabien@symfony.com>
    24  *
    25  * @api
    2624 */
    2725class UploadedFile extends File
     
    3230     * Local files are used in test mode hence the code should not enforce HTTP uploads.
    3331     *
    34      * @var Boolean
     32     * @var bool
    3533     */
    3634    private $test = false;
     
    5351     * The file size provided by the uploader.
    5452     *
    55      * @var string
     53     * @var int|null
    5654     */
    5755    private $size;
     
    6058     * The UPLOAD_ERR_XXX constant provided by the uploader.
    6159     *
    62      * @var integer
     60     * @var int
    6361     */
    6462    private $error;
     
    7876     * Calling any other method on an non-valid instance will cause an unpredictable result.
    7977     *
    80      * @param string  $path         The full temporary path to the file
    81      * @param string  $originalName The original file name
    82      * @param string  $mimeType     The type of the file as provided by PHP
    83      * @param integer $size         The file size
    84      * @param integer $error        The error constant of the upload (one of PHP's UPLOAD_ERR_XXX constants)
    85      * @param Boolean $test         Whether the test mode is active
     78     * @param string      $path         The full temporary path to the file
     79     * @param string      $originalName The original file name
     80     * @param string|null $mimeType     The type of the file as provided by PHP; null defaults to application/octet-stream
     81     * @param int|null    $size         The file size
     82     * @param int|null    $error        The error constant of the upload (one of PHP's UPLOAD_ERR_XXX constants); null defaults to UPLOAD_ERR_OK
     83     * @param bool        $test         Whether the test mode is active
    8684     *
    8785     * @throws FileException         If file_uploads is disabled
    8886     * @throws FileNotFoundException If the file does not exist
    89      *
    90      * @api
    9187     */
    9288    public function __construct($path, $originalName, $mimeType = null, $size = null, $error = null, $test = false)
    9389    {
    94         if (!ini_get('file_uploads')) {
    95             throw new FileException(sprintf('Unable to create UploadedFile because "file_uploads" is disabled in your php.ini file (%s)', get_cfg_var('cfg_file_path')));
    96         }
    97 
    9890        $this->originalName = $this->getName($originalName);
    9991        $this->mimeType = $mimeType ?: 'application/octet-stream';
    10092        $this->size = $size;
    10193        $this->error = $error ?: UPLOAD_ERR_OK;
    102         $this->test = (Boolean) $test;
     94        $this->test = (bool) $test;
    10395
    10496        parent::__construct($path, UPLOAD_ERR_OK === $this->error);
     
    109101     *
    110102     * It is extracted from the request from which the file has been uploaded.
    111      * Then is should not be considered as a safe value.
     103     * Then it should not be considered as a safe value.
    112104     *
    113105     * @return string|null The original name
    114      *
    115      * @api
    116106     */
    117107    public function getClientOriginalName()
     
    121111
    122112    /**
    123      * Returns the original file extension
     113     * Returns the original file extension.
    124114     *
    125115     * It is extracted from the original file name that was uploaded.
    126      * Then is should not be considered as a safe value.
     116     * Then it should not be considered as a safe value.
    127117     *
    128118     * @return string The extension
     
    144134     * @return string|null The mime type
    145135     *
    146      * @see getMimeType
    147      *
    148      * @api
     136     * @see getMimeType()
    149137     */
    150138    public function getClientMimeType()
     
    182170     *
    183171     * It is extracted from the request from which the file has been uploaded.
    184      * Then is should not be considered as a safe value.
    185      *
    186      * @return integer|null The file size
    187      *
    188      * @api
     172     * Then it should not be considered as a safe value.
     173     *
     174     * @return int|null The file size
    189175     */
    190176    public function getClientSize()
     
    199185     * Otherwise one of the other UPLOAD_ERR_XXX constants is returned.
    200186     *
    201      * @return integer The upload error
    202      *
    203      * @api
     187     * @return int The upload error
    204188     */
    205189    public function getError()
     
    211195     * Returns whether the file was uploaded successfully.
    212196     *
    213      * @return Boolean True if the file has been uploaded with HTTP and no error occurred.
    214      *
    215      * @api
     197     * @return bool True if the file has been uploaded with HTTP and no error occurred.
    216198     */
    217199    public function isValid()
     
    231213     *
    232214     * @throws FileException if, for any reason, the file could not have been moved
    233      *
    234      * @api
    235215     */
    236216    public function move($directory, $name = null)
     
    257237
    258238    /**
    259      * Returns the maximum size of an uploaded file as configured in php.ini
     239     * Returns the maximum size of an uploaded file as configured in php.ini.
    260240     *
    261241     * @return int The maximum size of an uploaded file in bytes
     
    275255            $max = intval($max, 8);
    276256        } else {
    277             $max = intval($max);
     257            $max = (int) $max;
    278258        }
    279259
     
    291271     * Returns an informative upload error message.
    292272     *
    293      * @param int $code The error code returned by an upload attempt
     273     * @param int $errorCode The error code returned by an upload attempt
    294274     *
    295275     * @return string The error message regarding the specified error code
     
    298278    {
    299279        static $errors = array(
    300             UPLOAD_ERR_INI_SIZE   => 'The file "%s" exceeds your upload_max_filesize ini directive (limit is %d kb).',
    301             UPLOAD_ERR_FORM_SIZE  => 'The file "%s" exceeds the upload limit defined in your form.',
    302             UPLOAD_ERR_PARTIAL    => 'The file "%s" was only partially uploaded.',
    303             UPLOAD_ERR_NO_FILE    => 'No file was uploaded.',
     280            UPLOAD_ERR_INI_SIZE => 'The file "%s" exceeds your upload_max_filesize ini directive (limit is %d kb).',
     281            UPLOAD_ERR_FORM_SIZE => 'The file "%s" exceeds the upload limit defined in your form.',
     282            UPLOAD_ERR_PARTIAL => 'The file "%s" was only partially uploaded.',
     283            UPLOAD_ERR_NO_FILE => 'No file was uploaded.',
    304284            UPLOAD_ERR_CANT_WRITE => 'The file "%s" could not be written on disk.',
    305285            UPLOAD_ERR_NO_TMP_DIR => 'File could not be uploaded: missing temporary directory.',
    306             UPLOAD_ERR_EXTENSION  => 'File upload was stopped by a php extension.',
     286            UPLOAD_ERR_EXTENSION => 'File upload was stopped by a PHP extension.',
    307287        );
    308288
     
    310290        $message = isset($errors[$errorCode]) ? $errors[$errorCode] : 'The file "%s" was not uploaded due to an unknown error.';
    311291
    312        return sprintf($message, $this->getClientOriginalName(), $maxFilesize);
     292        return sprintf($message, $this->getClientOriginalName(), $maxFilesize);
    313293    }
    314294}
  • _plugins_/http/trunk/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/FileBag.php

    r78576 r99944  
    1515
    1616/**
    17  * FileBag is a container for HTTP headers.
     17 * FileBag is a container for uploaded files.
    1818 *
    1919 * @author Fabien Potencier <fabien@symfony.com>
    2020 * @author Bulat Shakirzyanov <mallluhuct@gmail.com>
    21  *
    22  * @api
    2321 */
    2422class FileBag extends ParameterBag
     
    3028     *
    3129     * @param array $parameters An array of HTTP files
    32      *
    33      * @api
    3430     */
    3531    public function __construct(array $parameters = array())
     
    4036    /**
    4137     * {@inheritdoc}
    42      *
    43      * @api
    4438     */
    4539    public function replace(array $files = array())
     
    5145    /**
    5246     * {@inheritdoc}
    53      *
    54      * @api
    5547     */
    5648    public function set($key, $value)
     
    6557    /**
    6658     * {@inheritdoc}
    67      *
    68      * @api
    6959     */
    7060    public function add(array $files = array())
     
    141131        }
    142132
    143         foreach (array_keys($data['name']) as $key) {
     133        foreach ($data['name'] as $key => $name) {
    144134            $files[$key] = $this->fixPhpFilesArray(array(
    145                 'error'    => $data['error'][$key],
    146                 'name'     => $data['name'][$key],
    147                 'type'     => $data['type'][$key],
     135                'error' => $data['error'][$key],
     136                'name' => $name,
     137                'type' => $data['type'][$key],
    148138                'tmp_name' => $data['tmp_name'][$key],
    149                 'size'     => $data['size'][$key]
     139                'size' => $data['size'][$key],
    150140            ));
    151141        }
  • _plugins_/http/trunk/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/HeaderBag.php

    r78576 r99944  
    1616 *
    1717 * @author Fabien Potencier <fabien@symfony.com>
    18  *
    19  * @api
    2018 */
    2119class HeaderBag implements \IteratorAggregate, \Countable
     
    2826     *
    2927     * @param array $headers An array of HTTP headers
    30      *
    31      * @api
    3228     */
    3329    public function __construct(array $headers = array())
     
    6864     *
    6965     * @return array An array of headers
    70      *
    71      * @api
    7266     */
    7367    public function all()
     
    8074     *
    8175     * @return array An array of parameter keys
    82      *
    83      * @api
    8476     */
    8577    public function keys()
     
    9284     *
    9385     * @param array $headers An array of HTTP headers
    94      *
    95      * @api
    9686     */
    9787    public function replace(array $headers = array())
     
    10595     *
    10696     * @param array $headers An array of HTTP headers
    107      *
    108      * @api
    10997     */
    11098    public function add(array $headers)
     
    118106     * Returns a header value by name.
    119107     *
    120      * @param string  $key     The header name
    121      * @param mixed   $default The default value
    122      * @param Boolean $first   Whether to return the first value or all header values
     108     * @param string $key     The header name
     109     * @param mixed  $default The default value
     110     * @param bool  $first   Whether to return the first value or all header values
    123111     *
    124112     * @return string|array The first header value if $first is true, an array of values otherwise
    125      *
    126      * @api
    127113     */
    128114    public function get($key, $default = null, $first = true)
    129115    {
    130         $key = strtr(strtolower($key), '_', '-');
     116        $key = str_replace('_', '-', strtolower($key));
    131117
    132118        if (!array_key_exists($key, $this->headers)) {
     
    150136     * @param string       $key     The key
    151137     * @param string|array $values  The value or an array of values
    152      * @param Boolean      $replace Whether to replace the actual value or not (true by default)
    153      *
    154      * @api
     138     * @param bool         $replace Whether to replace the actual value or not (true by default)
    155139     */
    156140    public function set($key, $values, $replace = true)
    157141    {
    158         $key = strtr(strtolower($key), '_', '-');
     142        $key = str_replace('_', '-', strtolower($key));
    159143
    160144        $values = array_values((array) $values);
     
    176160     * @param string $key The HTTP header
    177161     *
    178      * @return Boolean true if the parameter exists, false otherwise
    179      *
    180      * @api
     162     * @return bool true if the parameter exists, false otherwise
    181163     */
    182164    public function has($key)
    183165    {
    184         return array_key_exists(strtr(strtolower($key), '_', '-'), $this->headers);
     166        return array_key_exists(str_replace('_', '-', strtolower($key)), $this->headers);
    185167    }
    186168
     
    191173     * @param string $value The HTTP value
    192174     *
    193      * @return Boolean true if the value is contained in the header, false otherwise
    194      *
    195      * @api
     175     * @return bool true if the value is contained in the header, false otherwise
    196176     */
    197177    public function contains($key, $value)
     
    204184     *
    205185     * @param string $key The HTTP header name
    206      *
    207      * @api
    208186     */
    209187    public function remove($key)
    210188    {
    211         $key = strtr(strtolower($key), '_', '-');
     189        $key = str_replace('_', '-', strtolower($key));
    212190
    213191        unset($this->headers[$key]);
     
    227205     *
    228206     * @throws \RuntimeException When the HTTP header is not parseable
    229      *
    230      * @api
    231207     */
    232208    public function getDate($key, \DateTime $default = null)
     
    243219    }
    244220
     221    /**
     222     * Adds a custom Cache-Control directive.
     223     *
     224     * @param string $key   The Cache-Control directive name
     225     * @param mixed  $value The Cache-Control directive value
     226     */
    245227    public function addCacheControlDirective($key, $value = true)
    246228    {
     
    250232    }
    251233
     234    /**
     235     * Returns true if the Cache-Control directive is defined.
     236     *
     237     * @param string $key The Cache-Control directive
     238     *
     239     * @return bool true if the directive exists, false otherwise
     240     */
    252241    public function hasCacheControlDirective($key)
    253242    {
     
    255244    }
    256245
     246    /**
     247     * Returns a Cache-Control directive value by name.
     248     *
     249     * @param string $key The directive name
     250     *
     251     * @return mixed|null The directive value if defined, null otherwise
     252     */
    257253    public function getCacheControlDirective($key)
    258254    {
     
    260256    }
    261257
     258    /**
     259     * Removes a Cache-Control directive.
     260     *
     261     * @param string $key The Cache-Control directive
     262     */
    262263    public function removeCacheControlDirective($key)
    263264    {
  • _plugins_/http/trunk/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/IpUtils.php

    r78576 r99944  
    2020{
    2121    /**
    22      * This class should not be instantiated
     22     * This class should not be instantiated.
    2323     */
    24     private function __construct() {}
     24    private function __construct()
     25    {
     26    }
    2527
    2628    /**
    27      * Checks if an IPv4 or IPv6 address is contained in the list of given IPs or subnets
     29     * Checks if an IPv4 or IPv6 address is contained in the list of given IPs or subnets.
    2830     *
    29      * @param string       $requestIp   IP to check
    30      * @param string|array $ips         List of IPs or subnets (can be a string if only a single one)
     31     * @param string       $requestIp IP to check
     32     * @param string|array $ips       List of IPs or subnets (can be a string if only a single one)
    3133     *
    32      * @return boolean Whether the IP is valid
     34     * @return bool Whether the IP is valid
    3335     */
    3436    public static function checkIp($requestIp, $ips)
     
    3840        }
    3941
    40         $method = false !== strpos($requestIp, ':') ? 'checkIp6': 'checkIp4';
     42        $method = substr_count($requestIp, ':') > 1 ? 'checkIp6' : 'checkIp4';
    4143
    4244        foreach ($ips as $ip) {
     
    5658     * @param string $ip        IPv4 address or subnet in CIDR notation
    5759     *
    58      * @return boolean Whether the IP is valid
     60     * @return bool Whether the request IP matches the IP, or whether the request IP is within the CIDR subnet.
    5961     */
    6062    public static function checkIp4($requestIp, $ip)
     
    6365            list($address, $netmask) = explode('/', $ip, 2);
    6466
    65             if ($netmask < 1 || $netmask > 32) {
     67            if ($netmask === '0') {
     68                // Ensure IP is valid - using ip2long below implicitly validates, but we need to do it manually here
     69                return filter_var($address, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4);
     70            }
     71
     72            if ($netmask < 0 || $netmask > 32) {
    6673                return false;
    6774            }
     
    7986     *
    8087     * @author David Soria Parra <dsp at php dot net>
     88     *
    8189     * @see https://github.com/dsp/v6tools
    8290     *
     
    8492     * @param string $ip        IPv6 address or subnet in CIDR notation
    8593     *
    86      * @return boolean Whether the IP is valid
     94     * @return bool Whether the IP is valid
    8795     *
    8896     * @throws \RuntimeException When IPV6 support is not enabled
     
    105113        }
    106114
    107         $bytesAddr = unpack("n*", inet_pton($address));
    108         $bytesTest = unpack("n*", inet_pton($requestIp));
     115        $bytesAddr = unpack('n*', @inet_pton($address));
     116        $bytesTest = unpack('n*', @inet_pton($requestIp));
    109117
    110         for ($i = 1, $ceil = ceil($netmask / 16); $i <= $ceil; $i++) {
    111             $left = $netmask - 16 * ($i-1);
     118        if (!$bytesAddr || !$bytesTest) {
     119            return false;
     120        }
     121
     122        for ($i = 1, $ceil = ceil($netmask / 16); $i <= $ceil; ++$i) {
     123            $left = $netmask - 16 * ($i - 1);
    112124            $left = ($left <= 16) ? $left : 16;
    113125            $mask = ~(0xffff >> $left) & 0xffff;
  • _plugins_/http/trunk/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/JsonResponse.php

    r78576 r99944  
    2828    protected $callback;
    2929
     30    // Encode <, >, ', &, and " for RFC4627-compliant JSON, which may also be embedded into HTML.
     31    // 15 === JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_AMP | JSON_HEX_QUOT
     32    private $encodingOptions = 15;
     33
    3034    /**
    3135     * Constructor.
    3236     *
    33      * @param mixed   $data    The response data
    34      * @param integer $status  The response status code
    35      * @param array   $headers An array of response headers
     37     * @param mixed $data    The response data
     38     * @param int  $status  The response status code
     39     * @param array $headers An array of response headers
    3640     */
    3741    public function __construct($data = null, $status = 200, $headers = array())
     
    4246            $data = new \ArrayObject();
    4347        }
     48
    4449        $this->setData($data);
    4550    }
    4651
    4752    /**
    48      * {@inheritDoc}
     53     * {@inheritdoc}
    4954     */
    5055    public static function create($data = null, $status = 200, $headers = array())
     
    5661     * Sets the JSONP callback.
    5762     *
    58      * @param string $callback
     63     * @param string|null $callback The JSONP callback or null to use none
    5964     *
    6065     * @return JsonResponse
    6166     *
    62      * @throws \InvalidArgumentException
     67     * @throws \InvalidArgumentException When the callback name is not valid
    6368     */
    6469    public function setCallback($callback = null)
     
    8186
    8287    /**
    83      * Sets the data to be sent as json.
     88     * Sets the data to be sent as JSON.
    8489     *
    8590     * @param mixed $data
    8691     *
    8792     * @return JsonResponse
     93     *
     94     * @throws \InvalidArgumentException
    8895     */
    8996    public function setData($data = array())
    9097    {
    91         // Encode <, >, ', &, and " for RFC4627-compliant JSON, which may also be embedded into HTML.
    92         $this->data = json_encode($data, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_AMP | JSON_HEX_QUOT);
     98        if (defined('HHVM_VERSION')) {
     99            // HHVM does not trigger any warnings and let exceptions
     100            // thrown from a JsonSerializable object pass through.
     101            // If only PHP did the same...
     102            $data = json_encode($data, $this->encodingOptions);
     103        } else {
     104            try {
     105                if (PHP_VERSION_ID < 50400) {
     106                    // PHP 5.3 triggers annoying warnings for some
     107                    // types that can't be serialized as JSON (INF, resources, etc.)
     108                    // but doesn't provide the JsonSerializable interface.
     109                    set_error_handler(function () { return false; });
     110                    $data = @json_encode($data, $this->encodingOptions);
     111                } else {
     112                    // PHP 5.4 and up wrap exceptions thrown by JsonSerializable
     113                    // objects in a new exception that needs to be removed.
     114                    // Fortunately, PHP 5.5 and up do not trigger any warning anymore.
     115                    if (PHP_VERSION_ID < 50500) {
     116                        // Clear json_last_error()
     117                        json_encode(null);
     118                        $errorHandler = set_error_handler('var_dump');
     119                        restore_error_handler();
     120                        set_error_handler(function () use ($errorHandler) {
     121                            if (JSON_ERROR_NONE === json_last_error()) {
     122                                return $errorHandler && false !== call_user_func_array($errorHandler, func_get_args());
     123                            }
     124                        });
     125                    }
     126
     127                    $data = json_encode($data, $this->encodingOptions);
     128                }
     129
     130                if (PHP_VERSION_ID < 50500) {
     131                    restore_error_handler();
     132                }
     133            } catch (\Exception $e) {
     134                if (PHP_VERSION_ID < 50500) {
     135                    restore_error_handler();
     136                }
     137                if (PHP_VERSION_ID >= 50400 && 'Exception' === get_class($e) && 0 === strpos($e->getMessage(), 'Failed calling ')) {
     138                    throw $e->getPrevious() ?: $e;
     139                }
     140                throw $e;
     141            }
     142        }
     143
     144        if (JSON_ERROR_NONE !== json_last_error()) {
     145            throw new \InvalidArgumentException($this->transformJsonError());
     146        }
     147
     148        $this->data = $data;
    93149
    94150        return $this->update();
     
    96152
    97153    /**
    98      * Updates the content and headers according to the json data and callback.
     154     * Updates the content and headers according to the JSON data and callback.
    99155     *
    100156     * @return JsonResponse
     
    106162            $this->headers->set('Content-Type', 'text/javascript');
    107163
    108             return $this->setContent(sprintf('%s(%s);', $this->callback, $this->data));
     164            return $this->setContent(sprintf('/**/%s(%s);', $this->callback, $this->data));
    109165        }
    110166
     
    117173        return $this->setContent($this->data);
    118174    }
     175
     176    private function transformJsonError()
     177    {
     178        if (function_exists('json_last_error_msg')) {
     179            return json_last_error_msg();
     180        }
     181
     182        switch (json_last_error()) {
     183            case JSON_ERROR_DEPTH:
     184                return 'Maximum stack depth exceeded.';
     185
     186            case JSON_ERROR_STATE_MISMATCH:
     187                return 'Underflow or the modes mismatch.';
     188
     189            case JSON_ERROR_CTRL_CHAR:
     190                return 'Unexpected control character found.';
     191
     192            case JSON_ERROR_SYNTAX:
     193                return 'Syntax error, malformed JSON.';
     194
     195            case JSON_ERROR_UTF8:
     196                return 'Malformed UTF-8 characters, possibly incorrectly encoded.';
     197
     198            default:
     199                return 'Unknown error.';
     200        }
     201    }
    119202}
  • _plugins_/http/trunk/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/LICENSE

    r78576 r99944  
    1 Copyright (c) 2004-2013 Fabien Potencier
     1Copyright (c) 2004-2016 Fabien Potencier
    22
    33Permission is hereby granted, free of charge, to any person obtaining a copy
  • _plugins_/http/trunk/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/ParameterBag.php

    r78576 r99944  
    1616 *
    1717 * @author Fabien Potencier <fabien@symfony.com>
    18  *
    19  * @api
    2018 */
    2119class ParameterBag implements \IteratorAggregate, \Countable
     
    3230     *
    3331     * @param array $parameters An array of parameters
    34      *
    35      * @api
    3632     */
    3733    public function __construct(array $parameters = array())
     
    4440     *
    4541     * @return array An array of parameters
    46      *
    47      * @api
    4842     */
    4943    public function all()
     
    5650     *
    5751     * @return array An array of parameter keys
    58      *
    59      * @api
    6052     */
    6153    public function keys()
     
    6860     *
    6961     * @param array $parameters An array of parameters
    70      *
    71      * @api
    7262     */
    7363    public function replace(array $parameters = array())
     
    8070     *
    8171     * @param array $parameters An array of parameters
    82      *
    83      * @api
    8472     */
    8573    public function add(array $parameters = array())
     
    9179     * Returns a parameter by name.
    9280     *
    93      * @param string  $path    The key
    94      * @param mixed   $default The default value if the parameter key does not exist
    95      * @param boolean $deep    If true, a path like foo[bar] will find deeper items
     81     * @param string $path    The key
     82     * @param mixed  $default The default value if the parameter key does not exist
     83     * @param bool  $deep    If true, a path like foo[bar] will find deeper items
    9684     *
    9785     * @return mixed
    9886     *
    9987     * @throws \InvalidArgumentException
    100      *
    101      * @api
    10288     */
    10389    public function get($path, $default = null, $deep = false)
     
    114100        $value = $this->parameters[$root];
    115101        $currentKey = null;
    116         for ($i = $pos, $c = strlen($path); $i < $c; $i++) {
     102        for ($i = $pos, $c = strlen($path); $i < $c; ++$i) {
    117103            $char = $path[$i];
    118104
     
    155141     * @param string $key   The key
    156142     * @param mixed  $value The value
    157      *
    158      * @api
    159143     */
    160144    public function set($key, $value)
     
    168152     * @param string $key The key
    169153     *
    170      * @return Boolean true if the parameter exists, false otherwise
    171      *
    172      * @api
     154     * @return bool true if the parameter exists, false otherwise
    173155     */
    174156    public function has($key)
     
    181163     *
    182164     * @param string $key The key
    183      *
    184      * @api
    185165     */
    186166    public function remove($key)
     
    192172     * Returns the alphabetic characters of the parameter value.
    193173     *
    194      * @param string  $key     The parameter key
    195      * @param mixed  $default The default value if the parameter key does not exist
    196      * @param boolean $deep    If true, a path like foo[bar] will find deeper items
     174     * @param string $key     The parameter key
     175     * @param string $default The default value if the parameter key does not exist
     176     * @param bool  $deep    If true, a path like foo[bar] will find deeper items
    197177     *
    198178     * @return string The filtered value
    199      *
    200      * @api
    201179     */
    202180    public function getAlpha($key, $default = '', $deep = false)
     
    208186     * Returns the alphabetic characters and digits of the parameter value.
    209187     *
    210      * @param string  $key     The parameter key
    211      * @param mixed  $default The default value if the parameter key does not exist
    212      * @param boolean $deep    If true, a path like foo[bar] will find deeper items
     188     * @param string $key     The parameter key
     189     * @param string $default The default value if the parameter key does not exist
     190     * @param bool  $deep    If true, a path like foo[bar] will find deeper items
    213191     *
    214192     * @return string The filtered value
    215      *
    216      * @api
    217193     */
    218194    public function getAlnum($key, $default = '', $deep = false)
     
    224200     * Returns the digits of the parameter value.
    225201     *
    226      * @param string  $key     The parameter key
    227      * @param mixed  $default The default value if the parameter key does not exist
    228      * @param boolean $deep    If true, a path like foo[bar] will find deeper items
     202     * @param string $key     The parameter key
     203     * @param string $default The default value if the parameter key does not exist
     204     * @param bool  $deep    If true, a path like foo[bar] will find deeper items
    229205     *
    230206     * @return string The filtered value
    231      *
    232      * @api
    233207     */
    234208    public function getDigits($key, $default = '', $deep = false)
     
    241215     * Returns the parameter value converted to integer.
    242216     *
    243      * @param string  $key     The parameter key
    244      * @param mixed   $default The default value if the parameter key does not exist
    245      * @param boolean $deep    If true, a path like foo[bar] will find deeper items
    246      *
    247      * @return integer The filtered value
    248      *
    249      * @api
     217     * @param string $key     The parameter key
     218     * @param int    $default The default value if the parameter key does not exist
     219     * @param bool   $deep    If true, a path like foo[bar] will find deeper items
     220     *
     221     * @return int The filtered value
    250222     */
    251223    public function getInt($key, $default = 0, $deep = false)
     
    257229     * Filter key.
    258230     *
    259      * @param string  $key     Key.
    260      * @param mixed   $default Default = null.
    261      * @param boolean $deep    Default = false.
    262      * @param integer $filter  FILTER_* constant.
    263      * @param mixed   $options Filter options.
     231     * @param string $key     Key.
     232     * @param mixed  $default Default = null.
     233     * @param bool  $deep    Default = false.
     234     * @param int    $filter  FILTER_* constant.
     235     * @param mixed  $options Filter options.
    264236     *
    265237     * @see http://php.net/manual/en/function.filter-var.php
     
    267239     * @return mixed
    268240     */
    269     public function filter($key, $default = null, $deep = false, $filter=FILTER_DEFAULT, $options=array())
     241    public function filter($key, $default = null, $deep = false, $filter = FILTER_DEFAULT, $options = array())
    270242    {
    271243        $value = $this->get($key, $default, $deep);
  • _plugins_/http/trunk/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/README.md

    r78576 r99944  
    22========================
    33
    4 HttpFoundation defines an object-oriented layer for the HTTP specification.
    5 
    6 It provides an abstraction for requests, responses, uploaded files, cookies,
    7 sessions, ...
    8 
    9 In this example, we get a Request object from the current PHP global
    10 variables:
    11 
    12     use Symfony\Component\HttpFoundation\Request;
    13     use Symfony\Component\HttpFoundation\Response;
    14 
    15     $request = Request::createFromGlobals();
    16     echo $request->getPathInfo();
    17 
    18 You can also create a Request directly -- that's interesting for unit testing:
    19 
    20     $request = Request::create('/?foo=bar', 'GET');
    21     echo $request->getPathInfo();
    22 
    23 And here is how to create and send a Response:
    24 
    25     $response = new Response('Not Found', 404, array('Content-Type' => 'text/plain'));
    26     $response->send();
    27 
    28 The Request and the Response classes have many other methods that implement
    29 the HTTP specification.
    30 
    31 Loading
    32 -------
    33 
    34 If you are not using Composer but are using PHP 5.3.x, you must add the following to your autoloader:
    35 
    36     // SessionHandlerInterface
    37     if (!interface_exists('SessionHandlerInterface')) {
    38         $loader->registerPrefixFallback(__DIR__.'/../vendor/symfony/src/Symfony/Component/HttpFoundation/Resources/stubs');
    39     }
     4The HttpFoundation component defines an object-oriented layer for the HTTP
     5specification.
    406
    417Resources
    428---------
    439
    44 You can run the unit tests with the following command:
    45 
    46     $ cd path/to/Symfony/Component/HttpFoundation/
    47     $ composer.phar install
    48     $ phpunit
     10  * [Documentation](https://symfony.com/doc/current/components/http_foundation/index.html)
     11  * [Contributing](https://symfony.com/doc/current/contributing/index.html)
     12  * [Report issues](https://github.com/symfony/symfony/issues) and
     13    [send Pull Requests](https://github.com/symfony/symfony/pulls)
     14    in the [main Symfony repository](https://github.com/symfony/symfony)
  • _plugins_/http/trunk/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/RedirectResponse.php

    r78576 r99944  
    1616 *
    1717 * @author Fabien Potencier <fabien@symfony.com>
    18  *
    19  * @api
    2018 */
    2119class RedirectResponse extends Response
     
    2624     * Creates a redirect response so that it conforms to the rules defined for a redirect status code.
    2725     *
    28      * @param string  $url     The URL to redirect to
    29      * @param integer $status  The status code (302 by default)
    30      * @param array   $headers The headers (Location is always set to the given url)
     26     * @param string $url     The URL to redirect to. The URL should be a full URL, with schema etc.,
     27     *                        but practically every browser redirects on paths only as well
     28     * @param int    $status  The status code (302 by default)
     29     * @param array  $headers The headers (Location is always set to the given URL)
    3130     *
    3231     * @throws \InvalidArgumentException
    3332     *
    3433     * @see http://tools.ietf.org/html/rfc2616#section-10.3
    35      *
    36      * @api
    3734     */
    3835    public function __construct($url, $status = 302, $headers = array())
    3936    {
    40         if (empty($url)) {
    41             throw new \InvalidArgumentException('Cannot redirect to an empty URL.');
    42         }
    43 
    4437        parent::__construct('', $status, $headers);
    4538
     
    5245
    5346    /**
    54      * {@inheritDoc}
     47     * {@inheritdoc}
    5548     */
    5649    public static function create($url = '', $status = 302, $headers = array())
     
    7265     * Sets the redirect target of this response.
    7366     *
    74      * @param string  $url    The URL to redirect to
     67     * @param string $url The URL to redirect to
    7568     *
    7669     * @return RedirectResponse The current response.
     
    9083<html>
    9184    <head>
    92         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     85        <meta charset="UTF-8" />
    9386        <meta http-equiv="refresh" content="1;url=%1$s" />
    9487
  • _plugins_/http/trunk/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Request.php

    r78576 r99944  
    2626 *
    2727 * @author Fabien Potencier <fabien@symfony.com>
    28  *
    29  * @api
    3028 */
    3129class Request
    3230{
    33     const HEADER_CLIENT_IP    = 'client_ip';
    34     const HEADER_CLIENT_HOST  = 'client_host';
     31    const HEADER_CLIENT_IP = 'client_ip';
     32    const HEADER_CLIENT_HOST = 'client_host';
    3533    const HEADER_CLIENT_PROTO = 'client_proto';
    36     const HEADER_CLIENT_PORT  = 'client_port';
     34    const HEADER_CLIENT_PORT = 'client_port';
    3735
    3836    protected static $trustedProxies = array();
     
    5654     */
    5755    protected static $trustedHeaders = array(
    58         self::HEADER_CLIENT_IP    => 'X_FORWARDED_FOR',
    59         self::HEADER_CLIENT_HOST  => 'X_FORWARDED_HOST',
     56        self::HEADER_CLIENT_IP => 'X_FORWARDED_FOR',
     57        self::HEADER_CLIENT_HOST => 'X_FORWARDED_HOST',
    6058        self::HEADER_CLIENT_PROTO => 'X_FORWARDED_PROTO',
    61         self::HEADER_CLIENT_PORT  => 'X_FORWARDED_PORT',
     59        self::HEADER_CLIENT_PORT => 'X_FORWARDED_PORT',
    6260    );
    6361
     
    6563
    6664    /**
     65     * Custom parameters.
     66     *
    6767     * @var \Symfony\Component\HttpFoundation\ParameterBag
    68      *
    69      * @api
    7068     */
    7169    public $attributes;
    7270
    7371    /**
     72     * Request body parameters ($_POST).
     73     *
    7474     * @var \Symfony\Component\HttpFoundation\ParameterBag
    75      *
    76      * @api
    7775     */
    7876    public $request;
    7977
    8078    /**
     79     * Query string parameters ($_GET).
     80     *
    8181     * @var \Symfony\Component\HttpFoundation\ParameterBag
    82      *
    83      * @api
    8482     */
    8583    public $query;
    8684
    8785    /**
     86     * Server and execution environment parameters ($_SERVER).
     87     *
    8888     * @var \Symfony\Component\HttpFoundation\ServerBag
    89      *
    90      * @api
    9189     */
    9290    public $server;
    9391
    9492    /**
     93     * Uploaded files ($_FILES).
     94     *
    9595     * @var \Symfony\Component\HttpFoundation\FileBag
    96      *
    97      * @api
    9896     */
    9997    public $files;
    10098
    10199    /**
     100     * Cookies ($_COOKIE).
     101     *
    102102     * @var \Symfony\Component\HttpFoundation\ParameterBag
    103      *
    104      * @api
    105103     */
    106104    public $cookies;
    107105
    108106    /**
     107     * Headers (taken from the $_SERVER).
     108     *
    109109     * @var \Symfony\Component\HttpFoundation\HeaderBag
    110      *
    111      * @api
    112110     */
    113111    public $headers;
     
    186184     * Constructor.
    187185     *
    188      * @param array  $query      The GET parameters
    189      * @param array  $request    The POST parameters
    190      * @param array  $attributes The request attributes (parameters parsed from the PATH_INFO, ...)
    191      * @param array  $cookies    The COOKIE parameters
    192      * @param array  $files      The FILES parameters
    193      * @param array  $server     The SERVER parameters
    194      * @param string $content    The raw body data
    195      *
    196      * @api
     186     * @param array           $query      The GET parameters
     187     * @param array           $request    The POST parameters
     188     * @param array           $attributes The request attributes (parameters parsed from the PATH_INFO, ...)
     189     * @param array           $cookies    The COOKIE parameters
     190     * @param array           $files      The FILES parameters
     191     * @param array           $server     The SERVER parameters
     192     * @param string|resource $content    The raw body data
    197193     */
    198194    public function __construct(array $query = array(), array $request = array(), array $attributes = array(), array $cookies = array(), array $files = array(), array $server = array(), $content = null)
     
    206202     * This method also re-initializes all properties.
    207203     *
    208      * @param array  $query      The GET parameters
    209      * @param array  $request    The POST parameters
    210      * @param array  $attributes The request attributes (parameters parsed from the PATH_INFO, ...)
    211      * @param array  $cookies    The COOKIE parameters
    212      * @param array  $files      The FILES parameters
    213      * @param array  $server     The SERVER parameters
    214      * @param string $content    The raw body data
    215      *
    216      * @api
     204     * @param array           $query      The GET parameters
     205     * @param array           $request    The POST parameters
     206     * @param array           $attributes The request attributes (parameters parsed from the PATH_INFO, ...)
     207     * @param array           $cookies    The COOKIE parameters
     208     * @param array           $files      The FILES parameters
     209     * @param array           $server     The SERVER parameters
     210     * @param string|resource $content    The raw body data
    217211     */
    218212    public function initialize(array $query = array(), array $request = array(), array $attributes = array(), array $cookies = array(), array $files = array(), array $server = array(), $content = null)
     
    242236     *
    243237     * @return Request A new request
    244      *
    245      * @api
    246238     */
    247239    public static function createFromGlobals()
    248240    {
    249         $request = new static($_GET, $_POST, array(), $_COOKIE, $_FILES, $_SERVER);
     241        // With the php's bug #66606, the php's built-in web server
     242        // stores the Content-Type and Content-Length header values in
     243        // HTTP_CONTENT_TYPE and HTTP_CONTENT_LENGTH fields.
     244        $server = $_SERVER;
     245        if ('cli-server' === PHP_SAPI) {
     246            if (array_key_exists('HTTP_CONTENT_LENGTH', $_SERVER)) {
     247                $server['CONTENT_LENGTH'] = $_SERVER['HTTP_CONTENT_LENGTH'];
     248            }
     249            if (array_key_exists('HTTP_CONTENT_TYPE', $_SERVER)) {
     250                $server['CONTENT_TYPE'] = $_SERVER['HTTP_CONTENT_TYPE'];
     251            }
     252        }
     253
     254        $request = new static($_GET, $_POST, array(), $_COOKIE, $_FILES, $server);
    250255
    251256        if (0 === strpos($request->headers->get('CONTENT_TYPE'), 'application/x-www-form-urlencoded')
     
    274279     *
    275280     * @return Request A Request instance
    276      *
    277      * @api
    278281     */
    279282    public static function create($uri, $method = 'GET', $parameters = array(), $cookies = array(), $files = array(), $server = array(), $content = null)
    280283    {
    281284        $server = array_replace(array(
    282             'SERVER_NAME'          => 'localhost',
    283             'SERVER_PORT'          => 80,
    284             'HTTP_HOST'            => 'localhost',
    285             'HTTP_USER_AGENT'      => 'Symfony/2.X',
    286             'HTTP_ACCEPT'          => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
     285            'SERVER_NAME' => 'localhost',
     286            'SERVER_PORT' => 80,
     287            'HTTP_HOST' => 'localhost',
     288            'HTTP_USER_AGENT' => 'Symfony/2.X',
     289            'HTTP_ACCEPT' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    287290            'HTTP_ACCEPT_LANGUAGE' => 'en-us,en;q=0.5',
    288             'HTTP_ACCEPT_CHARSET'  => 'ISO-8859-1,utf-8;q=0.7,*;q=0.7',
    289             'REMOTE_ADDR'          => '127.0.0.1',
    290             'SCRIPT_NAME'          => '',
    291             'SCRIPT_FILENAME'      => '',
    292             'SERVER_PROTOCOL'      => 'HTTP/1.1',
    293             'REQUEST_TIME'         => time(),
     291            'HTTP_ACCEPT_CHARSET' => 'ISO-8859-1,utf-8;q=0.7,*;q=0.7',
     292            'REMOTE_ADDR' => '127.0.0.1',
     293            'SCRIPT_NAME' => '',
     294            'SCRIPT_FILENAME' => '',
     295            'SERVER_PROTOCOL' => 'HTTP/1.1',
     296            'REQUEST_TIME' => time(),
    294297        ), $server);
    295298
     
    337340                    $server['CONTENT_TYPE'] = 'application/x-www-form-urlencoded';
    338341                }
     342                // no break
    339343            case 'PATCH':
    340344                $request = $parameters;
     
    379383     *
    380384     * @return Request The duplicated request
    381      *
    382      * @api
    383385     */
    384386    public function duplicate(array $query = null, array $request = null, array $attributes = null, array $cookies = null, array $files = null, array $server = null)
     
    419421
    420422        if (!$dup->getRequestFormat(null)) {
    421             $dup->setRequestFormat($format = $this->getRequestFormat(null));
     423            $dup->setRequestFormat($this->getRequestFormat(null));
    422424        }
    423425
     
    433435    public function __clone()
    434436    {
    435         $this->query      = clone $this->query;
    436         $this->request    = clone $this->request;
     437        $this->query = clone $this->query;
     438        $this->request = clone $this->request;
    437439        $this->attributes = clone $this->attributes;
    438         $this->cookies    = clone $this->cookies;
    439         $this->files      = clone $this->files;
    440         $this->server     = clone $this->server;
    441         $this->headers    = clone $this->headers;
     440        $this->cookies = clone $this->cookies;
     441        $this->files = clone $this->files;
     442        $this->server = clone $this->server;
     443        $this->headers = clone $this->headers;
    442444    }
    443445
     
    449451    public function __toString()
    450452    {
     453        try {
     454            $content = $this->getContent();
     455        } catch (\LogicException $e) {
     456            return trigger_error($e, E_USER_ERROR);
     457        }
     458
    451459        return
    452460            sprintf('%s %s %s', $this->getMethod(), $this->getRequestUri(), $this->server->get('SERVER_PROTOCOL'))."\r\n".
    453461            $this->headers."\r\n".
    454             $this->getContent();
     462            $content;
    455463    }
    456464
     
    459467     *
    460468     * It overrides $_GET, $_POST, $_REQUEST, $_SERVER, $_COOKIE.
    461      * $_FILES is never override, see rfc1867
    462      *
    463      * @api
     469     * $_FILES is never overridden, see rfc1867
    464470     */
    465471    public function overrideGlobals()
    466472    {
     473        $this->server->set('QUERY_STRING', static::normalizeQueryString(http_build_query($this->query->all(), null, '&')));
     474
    467475        $_GET = $this->query->all();
    468476        $_POST = $this->request->all();
     
    481489        $request = array('g' => $_GET, 'p' => $_POST, 'c' => $_COOKIE);
    482490
    483         $requestOrder = ini_get('request_order') ?: ini_get('variable_order');
     491        $requestOrder = ini_get('request_order') ?: ini_get('variables_order');
    484492        $requestOrder = preg_replace('#[^cgp]#', '', strtolower($requestOrder)) ?: 'gp';
    485493
     
    496504     *
    497505     * @param array $proxies A list of trusted proxies
    498      *
    499      * @api
    500506     */
    501507    public static function setTrustedProxies(array $proxies)
     
    524530    {
    525531        self::$trustedHostPatterns = array_map(function ($hostPattern) {
    526             return sprintf('{%s}i', str_replace('}', '\\}', $hostPattern));
     532            return sprintf('#%s#i', $hostPattern);
    527533        }, $hostPatterns);
    528534        // we need to reset trusted hosts on trusted host patterns change
     
    546552     *
    547553     *  * Request::HEADER_CLIENT_IP:    defaults to X-Forwarded-For   (see getClientIp())
    548      *  * Request::HEADER_CLIENT_HOST:  defaults to X-Forwarded-Host  (see getClientHost())
    549      *  * Request::HEADER_CLIENT_PORT:  defaults to X-Forwarded-Port  (see getClientPort())
     554     *  * Request::HEADER_CLIENT_HOST:  defaults to X-Forwarded-Host  (see getHost())
     555     *  * Request::HEADER_CLIENT_PORT:  defaults to X-Forwarded-Port  (see getPort())
    550556     *  * Request::HEADER_CLIENT_PROTO: defaults to X-Forwarded-Proto (see getScheme() and isSecure())
    551557     *
     
    632638     * Be warned that enabling this feature might lead to CSRF issues in your code.
    633639     * Check that you are using CSRF tokens when required.
     640     * If the HTTP method parameter override is enabled, an html-form with method "POST" can be altered
     641     * and used to send a "PUT" or "DELETE" request via the _method request parameter.
     642     * If these methods are not protected against CSRF, this presents a possible vulnerability.
    634643     *
    635644     * The HTTP method can only be overridden when the real HTTP method is POST.
     
    643652     * Checks whether support for the _method request parameter is enabled.
    644653     *
    645      * @return Boolean True when the _method request parameter is enabled, false otherwise
     654     * @return bool True when the _method request parameter is enabled, false otherwise
    646655     */
    647656    public static function getHttpMethodParameterOverride()
     
    665674     * public property instead (query, attributes, request).
    666675     *
    667      * @param string  $key     the key
    668      * @param mixed   $default the default value
    669      * @param Boolean $deep    is parameter deep in multidimensional array
     676     * @param string $key     the key
     677     * @param mixed  $default the default value if the parameter key does not exist
     678     * @param bool  $deep    is parameter deep in multidimensional array
    670679     *
    671680     * @return mixed
     
    673682    public function get($key, $default = null, $deep = false)
    674683    {
    675         return $this->query->get($key, $this->attributes->get($key, $this->request->get($key, $default, $deep), $deep), $deep);
     684        if ($this !== $result = $this->query->get($key, $this, $deep)) {
     685            return $result;
     686        }
     687
     688        if ($this !== $result = $this->attributes->get($key, $this, $deep)) {
     689            return $result;
     690        }
     691
     692        if ($this !== $result = $this->request->get($key, $this, $deep)) {
     693            return $result;
     694        }
     695
     696        return $default;
    676697    }
    677698
     
    680701     *
    681702     * @return SessionInterface|null The session
    682      *
    683      * @api
    684703     */
    685704    public function getSession()
     
    692711     * previous requests.
    693712     *
    694      * @return Boolean
    695      *
    696      * @api
     713     * @return bool
    697714     */
    698715    public function hasPreviousSession()
     
    709726     * is associated with a Session instance.
    710727     *
    711      * @return Boolean true when the Request contains a Session object, false otherwise
    712      *
    713      * @api
     728     * @return bool true when the Request contains a Session object, false otherwise
    714729     */
    715730    public function hasSession()
     
    722737     *
    723738     * @param SessionInterface $session The Session
    724      *
    725      * @api
    726739     */
    727740    public function setSession(SessionInterface $session)
     
    747760        $ip = $this->server->get('REMOTE_ADDR');
    748761
    749         if (!self::$trustedProxies) {
     762        if (!$this->isFromTrustedProxy()) {
    750763            return array($ip);
    751764        }
     
    757770        $clientIps = array_map('trim', explode(',', $this->headers->get(self::$trustedHeaders[self::HEADER_CLIENT_IP])));
    758771        $clientIps[] = $ip; // Complete the IP chain with the IP the request actually came from
    759 
    760         $trustedProxies = !self::$trustedProxies ? array($ip) : self::$trustedProxies;
    761         $ip = $clientIps[0]; // Fallback to this when the client IP falls into the range of trusted proxies
     772        $firstTrustedIp = null;
    762773
    763774        // Eliminate all IPs from the forwarded IP chain which are trusted proxies
    764775        foreach ($clientIps as $key => $clientIp) {
    765             if (IpUtils::checkIp($clientIp, $trustedProxies)) {
     776            // Remove port on IPv4 address (unfortunately, it does happen)
     777            if (preg_match('{((?:\d+\.){3}\d+)\:\d+}', $clientIp, $match)) {
     778                $clientIps[$key] = $clientIp = $match[1];
     779            }
     780
     781            if (!filter_var($clientIp, FILTER_VALIDATE_IP)) {
    766782                unset($clientIps[$key]);
     783
     784                continue;
     785            }
     786
     787            if (IpUtils::checkIp($clientIp, self::$trustedProxies)) {
     788                unset($clientIps[$key]);
     789
     790                // Fallback to this when the client IP falls into the range of trusted proxies
     791                if (null ===  $firstTrustedIp) {
     792                    $firstTrustedIp = $clientIp;
     793                }
    767794            }
    768795        }
    769796
    770797        // Now the IP chain contains only untrusted proxies and the client IP
    771         return $clientIps ? array_reverse($clientIps) : array($ip);
     798        return $clientIps ? array_reverse($clientIps) : array($firstTrustedIp);
    772799    }
    773800
     
    789816     * @see getClientIps()
    790817     * @see http://en.wikipedia.org/wiki/X-Forwarded-For
    791      *
    792      * @api
    793818     */
    794819    public function getClientIp()
     
    803828     *
    804829     * @return string
    805      *
    806      * @api
    807830     */
    808831    public function getScriptName()
     
    824847     *
    825848     * @return string The raw path (i.e. not urldecoded)
    826      *
    827      * @api
    828849     */
    829850    public function getPathInfo()
     
    847868     *
    848869     * @return string The raw path (i.e. not urldecoded)
    849      *
    850      * @api
    851870     */
    852871    public function getBasePath()
     
    860879
    861880    /**
    862      * Returns the root url from which this request is executed.
     881     * Returns the root URL from which this request is executed.
    863882     *
    864883     * The base URL never ends with a /.
     
    867886     * script filename (e.g. index.php) if one exists.
    868887     *
    869      * @return string The raw url (i.e. not urldecoded)
    870      *
    871      * @api
     888     * @return string The raw URL (i.e. not urldecoded)
    872889     */
    873890    public function getBaseUrl()
     
    884901     *
    885902     * @return string
    886      *
    887      * @api
    888903     */
    889904    public function getScheme()
     
    904919     *
    905920     * @return string
    906      *
    907      * @api
    908921     */
    909922    public function getPort()
    910923    {
    911         if (self::$trustedProxies) {
     924        if ($this->isFromTrustedProxy()) {
    912925            if (self::$trustedHeaders[self::HEADER_CLIENT_PORT] && $port = $this->headers->get(self::$trustedHeaders[self::HEADER_CLIENT_PORT])) {
    913926                return $port;
     
    920933
    921934        if ($host = $this->headers->get('HOST')) {
    922             if (false !== $pos = strrpos($host, ':')) {
    923                 return intval(substr($host, $pos + 1));
     935            if ($host[0] === '[') {
     936                $pos = strpos($host, ':', strrpos($host, ']'));
     937            } else {
     938                $pos = strrpos($host, ':');
     939            }
     940
     941            if (false !== $pos) {
     942                return (int) substr($host, $pos + 1);
    924943            }
    925944
     
    937956    public function getUser()
    938957    {
    939         return $this->server->get('PHP_AUTH_USER');
     958        return $this->headers->get('PHP_AUTH_USER');
    940959    }
    941960
     
    947966    public function getPassword()
    948967    {
    949         return $this->server->get('PHP_AUTH_PW');
     968        return $this->headers->get('PHP_AUTH_PW');
    950969    }
    951970
     
    961980        $pass = $this->getPassword();
    962981        if ('' != $pass) {
    963            $userinfo .= ":$pass";
     982            $userinfo .= ":$pass";
    964983        }
    965984
     
    973992     *
    974993     * @return string
    975      *
    976      * @api
    977994     */
    978995    public function getHttpHost()
    979996    {
    980997        $scheme = $this->getScheme();
    981         $port   = $this->getPort();
     998        $port = $this->getPort();
    982999
    9831000        if (('http' == $scheme && $port == 80) || ('https' == $scheme && $port == 443)) {
     
    9891006
    9901007    /**
    991      * Returns the requested URI.
    992      *
    993      * @return string The raw URI (i.e. not urldecoded)
    994      *
    995      * @api
     1008     * Returns the requested URI (path and query string).
     1009     *
     1010     * @return string The raw URI (i.e. not URI decoded)
    9961011     */
    9971012    public function getRequestUri()
     
    10181033
    10191034    /**
    1020      * Generates a normalized URI for the Request.
    1021      *
    1022      * @return string A normalized URI for the Request
     1035     * Generates a normalized URI (URL) for the Request.
     1036     *
     1037     * @return string A normalized URI (URL) for the Request
    10231038     *
    10241039     * @see getQueryString()
    1025      *
    1026      * @api
    10271040     */
    10281041    public function getUri()
     
    10411054     *
    10421055     * @return string The normalized URI for the path
    1043      *
    1044      * @api
    10451056     */
    10461057    public function getUriForPath($path)
     
    10561067     *
    10571068     * @return string|null A normalized query string for the Request
    1058      *
    1059      * @api
    10601069     */
    10611070    public function getQueryString()
     
    10691078     * Checks whether the request is secure or not.
    10701079     *
    1071      * This method can read the client port from the "X-Forwarded-Proto" header
     1080     * This method can read the client protocol from the "X-Forwarded-Proto" header
    10721081     * when trusted proxies were set via "setTrustedProxies()".
    10731082     *
     
    10781087     * the "client-proto" key.
    10791088     *
    1080      * @return Boolean
    1081      *
    1082      * @api
     1089     * @return bool
    10831090     */
    10841091    public function isSecure()
    10851092    {
    1086         if (self::$trustedProxies && self::$trustedHeaders[self::HEADER_CLIENT_PROTO] && $proto = $this->headers->get(self::$trustedHeaders[self::HEADER_CLIENT_PROTO])) {
     1093        if ($this->isFromTrustedProxy() && self::$trustedHeaders[self::HEADER_CLIENT_PROTO] && $proto = $this->headers->get(self::$trustedHeaders[self::HEADER_CLIENT_PROTO])) {
    10871094            return in_array(strtolower(current(explode(',', $proto))), array('https', 'on', 'ssl', '1'));
    10881095        }
    10891096
    1090         return 'on' == strtolower($this->server->get('HTTPS')) || 1 == $this->server->get('HTTPS');
     1097        $https = $this->server->get('HTTPS');
     1098
     1099        return !empty($https) && 'off' !== strtolower($https);
    10911100    }
    10921101
     
    10941103     * Returns the host name.
    10951104     *
    1096      * This method can read the client port from the "X-Forwarded-Host" header
     1105     * This method can read the client host name from the "X-Forwarded-Host" header
    10971106     * when trusted proxies were set via "setTrustedProxies()".
    10981107     *
     
    11051114     *
    11061115     * @throws \UnexpectedValueException when the host name is invalid
    1107      *
    1108      * @api
    11091116     */
    11101117    public function getHost()
    11111118    {
    1112         if (self::$trustedProxies && self::$trustedHeaders[self::HEADER_CLIENT_HOST] && $host = $this->headers->get(self::$trustedHeaders[self::HEADER_CLIENT_HOST])) {
     1119        if ($this->isFromTrustedProxy() && self::$trustedHeaders[self::HEADER_CLIENT_HOST] && $host = $this->headers->get(self::$trustedHeaders[self::HEADER_CLIENT_HOST])) {
    11131120            $elements = explode(',', $host);
    11141121
     
    11261133        // as the host can come from the user (HTTP_HOST and depending on the configuration, SERVER_NAME too can come from the user)
    11271134        // check that it does not contain forbidden characters (see RFC 952 and RFC 2181)
    1128         if ($host && !preg_match('/^\[?(?:[a-zA-Z0-9-:\]_]+\.?)+$/', $host)) {
     1135        // use preg_replace() instead of preg_match() to prevent DoS attacks with long host names
     1136        if ($host && '' !== preg_replace('/(?:^\[)?[a-zA-Z0-9-:\]_]+\.?/', '', $host)) {
    11291137            throw new \UnexpectedValueException('Invalid Host "'.$host.'"');
    11301138        }
     
    11551163     *
    11561164     * @param string $method
    1157      *
    1158      * @api
    11591165     */
    11601166    public function setMethod($method)
     
    11771183     * @return string The request method
    11781184     *
    1179      * @api
    1180      *
    1181      * @see getRealMethod
     1185     * @see getRealMethod()
    11821186     */
    11831187    public function getMethod()
     
    12031207     * @return string The request method
    12041208     *
    1205      * @see getMethod
     1209     * @see getMethod()
    12061210     */
    12071211    public function getRealMethod()
     
    12161220     *
    12171221     * @return string The associated mime type (null if not found)
    1218      *
    1219      * @api
    12201222     */
    12211223    public function getMimeType($format)
     
    12341236     *
    12351237     * @return string|null The format (null if not found)
    1236      *
    1237      * @api
    12381238     */
    12391239    public function getFormat($mimeType)
    12401240    {
     1241        $canonicalMimeType = null;
    12411242        if (false !== $pos = strpos($mimeType, ';')) {
    1242             $mimeType = substr($mimeType, 0, $pos);
     1243            $canonicalMimeType = substr($mimeType, 0, $pos);
    12431244        }
    12441245
     
    12511252                return $format;
    12521253            }
    1253         }
    1254 
    1255         return null;
     1254            if (null !== $canonicalMimeType && in_array($canonicalMimeType, (array) $mimeTypes)) {
     1255                return $format;
     1256            }
     1257        }
    12561258    }
    12571259
     
    12611263     * @param string       $format    The format
    12621264     * @param string|array $mimeTypes The associated mime types (the preferred one must be the first as it will be used as the content type)
    1263      *
    1264      * @api
    12651265     */
    12661266    public function setFormat($format, $mimeTypes)
     
    12851285     *
    12861286     * @return string The request format
    1287      *
    1288      * @api
    12891287     */
    12901288    public function getRequestFormat($default = 'html')
     
    13011299     *
    13021300     * @param string $format The request format.
    1303      *
    1304      * @api
    13051301     */
    13061302    public function setRequestFormat($format)
     
    13131309     *
    13141310     * @return string|null The format (null if no content type is present)
    1315      *
    1316      * @api
    13171311     */
    13181312    public function getContentType()
     
    13251319     *
    13261320     * @param string $locale
    1327      *
    1328      * @api
    13291321     */
    13301322    public function setDefaultLocale($locale)
     
    13381330
    13391331    /**
     1332     * Get the default locale.
     1333     *
     1334     * @return string
     1335     */
     1336    public function getDefaultLocale()
     1337    {
     1338        return $this->defaultLocale;
     1339    }
     1340
     1341    /**
    13401342     * Sets the locale.
    13411343     *
    13421344     * @param string $locale
    1343      *
    1344      * @api
    13451345     */
    13461346    public function setLocale($locale)
     
    13641364     * @param string $method Uppercase request method (GET, POST etc).
    13651365     *
    1366      * @return Boolean
     1366     * @return bool
    13671367     */
    13681368    public function isMethod($method)
     
    13741374     * Checks whether the method is safe or not.
    13751375     *
    1376      * @return Boolean
    1377      *
    1378      * @api
     1376     * @return bool
    13791377     */
    13801378    public function isMethodSafe()
     
    13861384     * Returns the request body content.
    13871385     *
    1388      * @param Boolean $asResource If true, a resource will be returned
     1386     * @param bool $asResource If true, a resource will be returned
    13891387     *
    13901388     * @return string|resource The request body content or a resource to read the body stream.
     
    13941392    public function getContent($asResource = false)
    13951393    {
    1396         if (false === $this->content || (true === $asResource && null !== $this->content)) {
    1397             throw new \LogicException('getContent() can only be called once when using the resource return type.');
     1394        $currentContentIsResource = is_resource($this->content);
     1395        if (PHP_VERSION_ID < 50600 && false === $this->content) {
     1396            throw new \LogicException('getContent() can only be called once when using the resource return type and PHP below 5.6.');
    13981397        }
    13991398
    14001399        if (true === $asResource) {
     1400            if ($currentContentIsResource) {
     1401                rewind($this->content);
     1402
     1403                return $this->content;
     1404            }
     1405
     1406            // Content passed in parameter (test)
     1407            if (is_string($this->content)) {
     1408                $resource = fopen('php://temp', 'r+');
     1409                fwrite($resource, $this->content);
     1410                rewind($resource);
     1411
     1412                return $resource;
     1413            }
     1414
    14011415            $this->content = false;
    14021416
    14031417            return fopen('php://input', 'rb');
     1418        }
     1419
     1420        if ($currentContentIsResource) {
     1421            rewind($this->content);
     1422
     1423            return stream_get_contents($this->content);
    14041424        }
    14051425
     
    14221442
    14231443    /**
    1424      * @return Boolean
     1444     * @return bool
    14251445     */
    14261446    public function isNoCache()
     
    14351455     *
    14361456     * @return string|null The preferred locale
    1437      *
    1438      * @api
    14391457     */
    14401458    public function getPreferredLanguage(array $locales = null)
     
    14701488     *
    14711489     * @return array Languages ordered in the user browser preferences
    1472      *
    1473      * @api
    14741490     */
    14751491    public function getLanguages()
     
    14811497        $languages = AcceptHeader::fromString($this->headers->get('Accept-Language'))->all();
    14821498        $this->languages = array();
    1483         foreach (array_keys($languages) as $lang) {
    1484             if (strstr($lang, '-')) {
     1499        foreach ($languages as $lang => $acceptHeaderItem) {
     1500            if (false !== strpos($lang, '-')) {
    14851501                $codes = explode('-', $lang);
    1486                 if ($codes[0] == 'i') {
     1502                if ('i' === $codes[0]) {
    14871503                    // Language not listed in ISO 639 that are not variants
    14881504                    // of any listed language, which can be registered with the
     
    14921508                    }
    14931509                } else {
    1494                     for ($i = 0, $max = count($codes); $i < $max; $i++) {
    1495                         if ($i == 0) {
     1510                    for ($i = 0, $max = count($codes); $i < $max; ++$i) {
     1511                        if ($i === 0) {
    14961512                            $lang = strtolower($codes[0]);
    14971513                        } else {
     
    15121528     *
    15131529     * @return array List of charsets in preferable order
    1514      *
    1515      * @api
    15161530     */
    15171531    public function getCharsets()
     
    15251539
    15261540    /**
    1527      * Gets a list of content types acceptable by the client browser
     1541     * Gets a list of content types acceptable by the client browser.
    15281542     *
    15291543     * @return array List of content types in preferable order
    1530      *
    1531      * @api
    15321544     */
    15331545    public function getAcceptableContentTypes()
     
    15431555     * Returns true if the request is a XMLHttpRequest.
    15441556     *
    1545      * It works if your JavaScript library set an X-Requested-With HTTP header.
     1557     * It works if your JavaScript library sets an X-Requested-With HTTP header.
    15461558     * It is known to work with common JavaScript frameworks:
     1559     *
    15471560     * @link http://en.wikipedia.org/wiki/List_of_Ajax_frameworks#JavaScript
    15481561     *
    1549      * @return Boolean true if the request is an XMLHttpRequest, false otherwise
    1550      *
    1551      * @api
     1562     * @return bool true if the request is an XMLHttpRequest, false otherwise
    15521563     */
    15531564    public function isXmlHttpRequest()
     
    15801591            $this->headers->remove('X_REWRITE_URL');
    15811592        } elseif ($this->server->get('IIS_WasUrlRewritten') == '1' && $this->server->get('UNENCODED_URL') != '') {
    1582             // IIS7 with URL Rewrite: make sure we get the unencoded url (double slash problem)
     1593            // IIS7 with URL Rewrite: make sure we get the unencoded URL (double slash problem)
    15831594            $requestUri = $this->server->get('UNENCODED_URL');
    15841595            $this->server->remove('UNENCODED_URL');
     
    15861597        } elseif ($this->server->has('REQUEST_URI')) {
    15871598            $requestUri = $this->server->get('REQUEST_URI');
    1588             // HTTP proxy reqs setup request uri with scheme and host [and port] + the url path, only use url path
     1599            // HTTP proxy reqs setup request URI with scheme and host [and port] + the URL path, only use URL path
    15891600            $schemeAndHttpHost = $this->getSchemeAndHttpHost();
    15901601            if (strpos($requestUri, $schemeAndHttpHost) === 0) {
     
    16241635            // Backtrack up the script_filename to find the portion matching
    16251636            // php_self
    1626             $path    = $this->server->get('PHP_SELF', '');
    1627             $file    = $this->server->get('SCRIPT_FILENAME', '');
    1628             $segs    = explode('/', trim($file, '/'));
    1629             $segs    = array_reverse($segs);
    1630             $index   = 0;
    1631             $last    = count($segs);
     1637            $path = $this->server->get('PHP_SELF', '');
     1638            $file = $this->server->get('SCRIPT_FILENAME', '');
     1639            $segs = explode('/', trim($file, '/'));
     1640            $segs = array_reverse($segs);
     1641            $index = 0;
     1642            $last = count($segs);
    16321643            $baseUrl = '';
    16331644            do {
    1634                 $seg     = $segs[$index];
     1645                $seg = $segs[$index];
    16351646                $baseUrl = '/'.$seg.$baseUrl;
    16361647                ++$index;
     
    16461657        }
    16471658
    1648         if ($baseUrl && false !== $prefix = $this->getUrlencodedPrefix($requestUri, dirname($baseUrl))) {
     1659        if ($baseUrl && false !== $prefix = $this->getUrlencodedPrefix($requestUri, rtrim(dirname($baseUrl), '/'.DIRECTORY_SEPARATOR).'/')) {
    16491660            // directory portion of $baseUrl matches
    1650             return rtrim($prefix, '/');
     1661            return rtrim($prefix, '/'.DIRECTORY_SEPARATOR);
    16511662        }
    16521663
     
    16691680        }
    16701681
    1671         return rtrim($baseUrl, '/');
     1682        return rtrim($baseUrl, '/'.DIRECTORY_SEPARATOR);
    16721683    }
    16731684
     
    17111722        }
    17121723
    1713         $pathInfo = '/';
    1714 
    17151724        // Remove the query string from REQUEST_URI
    17161725        if ($pos = strpos($requestUri, '?')) {
     
    17181727        }
    17191728
    1720         if (null !== $baseUrl && false === $pathInfo = substr($requestUri, strlen($baseUrl))) {
     1729        $pathInfo = substr($requestUri, strlen($baseUrl));
     1730        if (null !== $baseUrl && (false === $pathInfo || '' === $pathInfo)) {
    17211731            // If substr() returns false then PATH_INFO is set to an empty string
    17221732            return '/';
     
    17351745        static::$formats = array(
    17361746            'html' => array('text/html', 'application/xhtml+xml'),
    1737             'txt'  => array('text/plain'),
    1738             'js'   => array('application/javascript', 'application/x-javascript', 'text/javascript'),
    1739             'css'  => array('text/css'),
     1747            'txt' => array('text/plain'),
     1748            'js' => array('application/javascript', 'application/x-javascript', 'text/javascript'),
     1749            'css' => array('text/css'),
    17401750            'json' => array('application/json', 'application/x-json'),
    1741             'xml'  => array('text/xml', 'application/xml', 'application/x-xml'),
    1742             'rdf'  => array('application/rdf+xml'),
     1751            'xml' => array('text/xml', 'application/xml', 'application/x-xml'),
     1752            'rdf' => array('application/rdf+xml'),
    17431753            'atom' => array('application/atom+xml'),
    1744             'rss'  => array('application/rss+xml'),
     1754            'rss' => array('application/rss+xml'),
    17451755        );
    17461756    }
     
    17811791        $len = strlen($prefix);
    17821792
    1783         if (preg_match("#^(%[[:xdigit:]]{2}|.){{$len}}#", $string, $match)) {
     1793        if (preg_match(sprintf('#^(%%[[:xdigit:]]{2}|.){%d}#', $len), $string, $match)) {
    17841794            return $match[0];
    17851795        }
     
    17871797        return false;
    17881798    }
     1799
     1800    private function isFromTrustedProxy()
     1801    {
     1802        return self::$trustedProxies && IpUtils::checkIp($this->server->get('REMOTE_ADDR'), self::$trustedProxies);
     1803    }
    17891804}
  • _plugins_/http/trunk/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/RequestMatcher.php

    r78576 r99944  
    1616 *
    1717 * @author Fabien Potencier <fabien@symfony.com>
    18  *
    19  * @api
    2018 */
    2119class RequestMatcher implements RequestMatcherInterface
     
    127125    /**
    128126     * {@inheritdoc}
    129      *
    130      * @api
    131127     */
    132128    public function matches(Request $request)
  • _plugins_/http/trunk/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/RequestMatcherInterface.php

    r78576 r99944  
    1616 *
    1717 * @author Fabien Potencier <fabien@symfony.com>
    18  *
    19  * @api
    2018 */
    2119interface RequestMatcherInterface
     
    2624     * @param Request $request The request to check for a match
    2725     *
    28      * @return Boolean true if the request matches, false otherwise
    29      *
    30      * @api
     26     * @return bool true if the request matches, false otherwise
    3127     */
    3228    public function matches(Request $request);
  • _plugins_/http/trunk/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Resources/stubs/SessionHandlerInterface.php

    r78576 r99944  
    1111
    1212/**
    13  * SessionHandlerInterface
    14  *
    15  * Provides forward compatibility with PHP 5.4
     13 * SessionHandlerInterface for PHP < 5.4.
    1614 *
    1715 * Extensive documentation can be found at php.net, see links:
     
    2624{
    2725    /**
    28      * Open session.
     26     * Re-initializes existing session, or creates a new one.
    2927     *
    3028     * @see http://php.net/sessionhandlerinterface.open
    3129     *
    32      * @param string $savePath    Save path.
    33      * @param string $sessionName Session Name.
     30     * @param string $savePath    Save path
     31     * @param string $sessionName Session name, see http://php.net/function.session-name.php
    3432     *
    35      * @throws \RuntimeException If something goes wrong starting the session.
    36      *
    37      * @return boolean
     33     * @return bool true on success, false on failure
    3834     */
    3935    public function open($savePath, $sessionName);
    4036
    4137    /**
    42      * Close session.
     38     * Closes the current session.
    4339     *
    4440     * @see http://php.net/sessionhandlerinterface.close
    4541     *
    46      * @return boolean
     42     * @return bool true on success, false on failure
    4743     */
    4844    public function close();
    4945
    5046    /**
    51      * Read session.
    52      *
    53      * @param string $sessionId
     47     * Reads the session data.
    5448     *
    5549     * @see http://php.net/sessionhandlerinterface.read
    5650     *
    57      * @throws \RuntimeException On fatal error but not "record not found".
     51     * @param string $sessionId Session ID, see http://php.net/function.session-id
    5852     *
    59      * @return string String as stored in persistent storage or empty string in all other cases.
     53     * @return string Same session data as passed in write() or empty string when non-existent or on failure
    6054     */
    6155    public function read($sessionId);
    6256
    6357    /**
    64      * Commit session to storage.
     58     * Writes the session data to the storage.
    6559     *
    6660     * @see http://php.net/sessionhandlerinterface.write
    6761     *
    68      * @param string $sessionId Session ID.
    69      * @param string $data      Session serialized data to save.
     62     * @param string $sessionId Session ID , see http://php.net/function.session-id
     63     * @param string $data      Serialized session data to save
    7064     *
    71      * @return boolean
     65     * @return bool true on success, false on failure
    7266     */
    7367    public function write($sessionId, $data);
    7468
    7569    /**
    76      * Destroys this session.
     70     * Destroys a session.
    7771     *
    7872     * @see http://php.net/sessionhandlerinterface.destroy
    7973     *
    80      * @param string $sessionId Session ID.
     74     * @param string $sessionId Session ID, see http://php.net/function.session-id
    8175     *
    82      * @throws \RuntimeException On fatal error.
    83      *
    84      * @return boolean
     76     * @return bool true on success, false on failure
    8577     */
    8678    public function destroy($sessionId);
    8779
    8880    /**
    89      * Garbage collection for storage.
     81     * Cleans up expired sessions (garbage collection).
    9082     *
    9183     * @see http://php.net/sessionhandlerinterface.gc
    9284     *
    93      * @param integer $lifetime Max lifetime in seconds to keep sessions stored.
     85     * @param string|int $maxlifetime Sessions that have not updated for the last maxlifetime seconds will be removed
    9486     *
    95      * @throws \RuntimeException On fatal error.
    96      *
    97      * @return boolean
     87     * @return bool true on success, false on failure
    9888     */
    99     public function gc($lifetime);
     89    public function gc($maxlifetime);
    10090}
  • _plugins_/http/trunk/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Response.php

    r78576 r99944  
    1616 *
    1717 * @author Fabien Potencier <fabien@symfony.com>
    18  *
    19  * @api
    2018 */
    2119class Response
     
    3735
    3836    /**
    39      * @var integer
     37     * @var int
    4038     */
    4139    protected $statusCode;
     
    5654     * The list of codes is complete according to the
    5755     * {@link http://www.iana.org/assignments/http-status-codes/ Hypertext Transfer Protocol (HTTP) Status Code Registry}
    58      * (last updated 2012-02-13).
     56     * (last updated 2016-03-01).
    5957     *
    6058     * Unless otherwise noted, the status code is defined in RFC2616.
     
    8482        306 => 'Reserved',
    8583        307 => 'Temporary Redirect',
    86         308 => 'Permanent Redirect',    // RFC-reschke-http-status-308-07
     84        308 => 'Permanent Redirect',    // RFC7238
    8785        400 => 'Bad Request',
    8886        401 => 'Unauthorized',
     
    104102        417 => 'Expectation Failed',
    105103        418 => 'I\'m a teapot',                                               // RFC2324
     104        421 => 'Misdirected Request',                                         // RFC7540
    106105        422 => 'Unprocessable Entity',                                        // RFC4918
    107106        423 => 'Locked',                                                      // RFC4918
     
    112111        429 => 'Too Many Requests',                                           // RFC6585
    113112        431 => 'Request Header Fields Too Large',                             // RFC6585
     113        451 => 'Unavailable For Legal Reasons',                               // RFC7725
    114114        500 => 'Internal Server Error',
    115115        501 => 'Not Implemented',
     
    128128     * Constructor.
    129129     *
    130      * @param string  $content The response content
    131      * @param integer $status  The response status code
    132      * @param array   $headers An array of response headers
     130     * @param string $content The response content
     131     * @param int    $status  The response status code
     132     * @param array  $headers An array of response headers
    133133     *
    134134     * @throws \InvalidArgumentException When the HTTP status code is not valid
    135      *
    136      * @api
    137135     */
    138136    public function __construct($content = '', $status = 200, $headers = array())
     
    143141        $this->setProtocolVersion('1.0');
    144142        if (!$this->headers->has('Date')) {
    145             $this->setDate(new \DateTime(null, new \DateTimeZone('UTC')));
    146         }
    147     }
    148 
    149     /**
    150      * Factory method for chainability
     143            $this->setDate(\DateTime::createFromFormat('U', time(), new \DateTimeZone('UTC')));
     144        }
     145    }
     146
     147    /**
     148     * Factory method for chainability.
    151149     *
    152150     * Example:
     
    155153     *         ->setSharedMaxAge(300);
    156154     *
    157      * @param string  $content The response content
    158      * @param integer $status  The response status code
    159      * @param array   $headers An array of response headers
     155     * @param string $content The response content
     156     * @param int    $status  The response status code
     157     * @param array  $headers An array of response headers
    160158     *
    161159     * @return Response
     
    208206        $headers = $this->headers;
    209207
    210         if ($this->isInformational() || in_array($this->statusCode, array(204, 304))) {
     208        if ($this->isInformational() || $this->isEmpty()) {
    211209            $this->setContent(null);
    212         }
    213 
    214         // Content-type based on the Request
    215         if (!$headers->has('Content-Type')) {
    216             $format = $request->getRequestFormat();
    217             if (null !== $format && $mimeType = $request->getMimeType($format)) {
    218                 $headers->set('Content-Type', $mimeType);
     210            $headers->remove('Content-Type');
     211            $headers->remove('Content-Length');
     212        } else {
     213            // Content-type based on the Request
     214            if (!$headers->has('Content-Type')) {
     215                $format = $request->getRequestFormat();
     216                if (null !== $format && $mimeType = $request->getMimeType($format)) {
     217                    $headers->set('Content-Type', $mimeType);
     218                }
    219219            }
    220         }
    221 
    222         // Fix Content-Type
    223         $charset = $this->charset ?: 'UTF-8';
    224         if (!$headers->has('Content-Type')) {
    225             $headers->set('Content-Type', 'text/html; charset='.$charset);
    226         } elseif (0 === stripos($headers->get('Content-Type'), 'text/') && false === stripos($headers->get('Content-Type'), 'charset')) {
    227             // add the charset
    228             $headers->set('Content-Type', $headers->get('Content-Type').'; charset='.$charset);
    229         }
    230 
    231         // Fix Content-Length
    232         if ($headers->has('Transfer-Encoding')) {
    233             $headers->remove('Content-Length');
    234         }
    235 
    236         if ($request->isMethod('HEAD')) {
    237             // cf. RFC2616 14.13
    238             $length = $headers->get('Content-Length');
    239             $this->setContent(null);
    240             if ($length) {
    241                 $headers->set('Content-Length', $length);
     220
     221            // Fix Content-Type
     222            $charset = $this->charset ?: 'UTF-8';
     223            if (!$headers->has('Content-Type')) {
     224                $headers->set('Content-Type', 'text/html; charset='.$charset);
     225            } elseif (0 === stripos($headers->get('Content-Type'), 'text/') && false === stripos($headers->get('Content-Type'), 'charset')) {
     226                // add the charset
     227                $headers->set('Content-Type', $headers->get('Content-Type').'; charset='.$charset);
     228            }
     229
     230            // Fix Content-Length
     231            if ($headers->has('Transfer-Encoding')) {
     232                $headers->remove('Content-Length');
     233            }
     234
     235            if ($request->isMethod('HEAD')) {
     236                // cf. RFC2616 14.13
     237                $length = $headers->get('Content-Length');
     238                $this->setContent(null);
     239                if ($length) {
     240                    $headers->set('Content-Length', $length);
     241                }
    242242            }
    243243        }
     
    270270            return $this;
    271271        }
    272 
    273         // status
    274         header(sprintf('HTTP/%s %s %s', $this->version, $this->statusCode, $this->statusText));
    275272
    276273        // headers
     
    281278        }
    282279
     280        // status
     281        header(sprintf('HTTP/%s %s %s', $this->version, $this->statusCode, $this->statusText), true, $this->statusCode);
     282
    283283        // cookies
    284284        foreach ($this->headers->getCookies() as $cookie) {
     
    305305     *
    306306     * @return Response
    307      *
    308      * @api
    309307     */
    310308    public function send()
     
    323321                $previous = $level;
    324322                if ($obStatus[$level - 1]) {
    325                     if (version_compare(PHP_VERSION, '5.4', '>=')) {
     323                    if (PHP_VERSION_ID >= 50400) {
    326324                        if (isset($obStatus[$level - 1]['flags']) && ($obStatus[$level - 1]['flags'] & PHP_OUTPUT_HANDLER_REMOVABLE)) {
    327325                            ob_end_flush();
     
    350348     *
    351349     * @throws \UnexpectedValueException
    352      *
    353      * @api
    354350     */
    355351    public function setContent($content)
     
    368364     *
    369365     * @return string Content
    370      *
    371      * @api
    372366     */
    373367    public function getContent()
     
    382376     *
    383377     * @return Response
    384      *
    385      * @api
    386378     */
    387379    public function setProtocolVersion($version)
     
    396388     *
    397389     * @return string The HTTP protocol version
    398      *
    399      * @api
    400390     */
    401391    public function getProtocolVersion()
     
    407397     * Sets the response status code.
    408398     *
    409      * @param integer $code HTTP status code
    410      * @param mixed   $text HTTP status text
     399     * @param int  $code HTTP status code
     400     * @param mixed $text HTTP status text
    411401     *
    412402     * If the status text is null it will be automatically populated for the known
     
    416406     *
    417407     * @throws \InvalidArgumentException When the HTTP status code is not valid
    418      *
    419      * @api
    420408     */
    421409    public function setStatusCode($code, $text = null)
     
    427415
    428416        if (null === $text) {
    429             $this->statusText = isset(self::$statusTexts[$code]) ? self::$statusTexts[$code] : '';
     417            $this->statusText = isset(self::$statusTexts[$code]) ? self::$statusTexts[$code] : 'unknown status';
    430418
    431419            return $this;
     
    446434     * Retrieves the status code for the current web response.
    447435     *
    448      * @return integer Status code
    449      *
    450      * @api
     436     * @return int Status code
    451437     */
    452438    public function getStatusCode()
     
    461447     *
    462448     * @return Response
    463      *
    464      * @api
    465449     */
    466450    public function setCharset($charset)
     
    475459     *
    476460     * @return string Character set
    477      *
    478      * @api
    479461     */
    480462    public function getCharset()
     
    492474     * validator (Last-Modified, ETag) are considered uncacheable.
    493475     *
    494      * @return Boolean true if the response is worth caching, false otherwise
    495      *
    496      * @api
     476     * @return bool true if the response is worth caching, false otherwise
    497477     */
    498478    public function isCacheable()
     
    516496     * indicator or Expires header and the calculated age is less than the freshness lifetime.
    517497     *
    518      * @return Boolean true if the response is fresh, false otherwise
    519      *
    520      * @api
     498     * @return bool true if the response is fresh, false otherwise
    521499     */
    522500    public function isFresh()
     
    529507     * the response with the origin server using a conditional GET request.
    530508     *
    531      * @return Boolean true if the response is validateable, false otherwise
    532      *
    533      * @api
     509     * @return bool true if the response is validateable, false otherwise
    534510     */
    535511    public function isValidateable()
     
    544520     *
    545521     * @return Response
    546      *
    547      * @api
    548522     */
    549523    public function setPrivate()
     
    561535     *
    562536     * @return Response
    563      *
    564      * @api
    565537     */
    566538    public function setPublic()
     
    580552     * greater than the value provided by the origin.
    581553     *
    582      * @return Boolean true if the response must be revalidated by a cache, false otherwise
    583      *
    584      * @api
     554     * @return bool true if the response must be revalidated by a cache, false otherwise
    585555     */
    586556    public function mustRevalidate()
    587557    {
    588         return $this->headers->hasCacheControlDirective('must-revalidate') || $this->headers->has('proxy-revalidate');
     558        return $this->headers->hasCacheControlDirective('must-revalidate') || $this->headers->hasCacheControlDirective('proxy-revalidate');
    589559    }
    590560
     
    595565     *
    596566     * @throws \RuntimeException When the header is not parseable
    597      *
    598      * @api
    599567     */
    600568    public function getDate()
     
    609577     *
    610578     * @return Response
    611      *
    612      * @api
    613579     */
    614580    public function setDate(\DateTime $date)
     
    623589     * Returns the age of the response.
    624590     *
    625      * @return integer The age of the response in seconds
     591     * @return int The age of the response in seconds
    626592     */
    627593    public function getAge()
     
    638604     *
    639605     * @return Response
    640      *
    641      * @api
    642606     */
    643607    public function expire()
     
    654618     *
    655619     * @return \DateTime|null A DateTime instance or null if the header does not exist
    656      *
    657      * @api
    658620     */
    659621    public function getExpires()
     
    675637     *
    676638     * @return Response
    677      *
    678      * @api
    679639     */
    680640    public function setExpires(\DateTime $date = null)
     
    698658     * back on an expires header. It returns null when no maximum age can be established.
    699659     *
    700      * @return integer|null Number of seconds
    701      *
    702      * @api
     660     * @return int|null Number of seconds
    703661     */
    704662    public function getMaxAge()
     
    715673            return $this->getExpires()->format('U') - $this->getDate()->format('U');
    716674        }
    717 
    718         return null;
    719675    }
    720676
     
    724680     * This methods sets the Cache-Control max-age directive.
    725681     *
    726      * @param integer $value Number of seconds
    727      *
    728      * @return Response
    729      *
    730      * @api
     682     * @param int $value Number of seconds
     683     *
     684     * @return Response
    731685     */
    732686    public function setMaxAge($value)
     
    742696     * This methods sets the Cache-Control s-maxage directive.
    743697     *
    744      * @param integer $value Number of seconds
    745      *
    746      * @return Response
    747      *
    748      * @api
     698     * @param int $value Number of seconds
     699     *
     700     * @return Response
    749701     */
    750702    public function setSharedMaxAge($value)
     
    764716     * revalidating with the origin.
    765717     *
    766      * @return integer|null The TTL in seconds
    767      *
    768      * @api
     718     * @return int|null The TTL in seconds
    769719     */
    770720    public function getTtl()
     
    773723            return $maxAge - $this->getAge();
    774724        }
    775 
    776         return null;
    777725    }
    778726
     
    782730     * This method adjusts the Cache-Control/s-maxage directive.
    783731     *
    784      * @param integer $seconds Number of seconds
    785      *
    786      * @return Response
    787      *
    788      * @api
     732     * @param int $seconds Number of seconds
     733     *
     734     * @return Response
    789735     */
    790736    public function setTtl($seconds)
     
    800746     * This method adjusts the Cache-Control/max-age directive.
    801747     *
    802      * @param integer $seconds Number of seconds
    803      *
    804      * @return Response
    805      *
    806      * @api
     748     * @param int $seconds Number of seconds
     749     *
     750     * @return Response
    807751     */
    808752    public function setClientTtl($seconds)
     
    819763     *
    820764     * @throws \RuntimeException When the HTTP header is not parseable
    821      *
    822      * @api
    823765     */
    824766    public function getLastModified()
     
    835777     *
    836778     * @return Response
    837      *
    838      * @api
    839779     */
    840780    public function setLastModified(\DateTime $date = null)
     
    855795     *
    856796     * @return string|null The ETag HTTP header or null if it does not exist
    857      *
    858      * @api
    859797     */
    860798    public function getEtag()
     
    867805     *
    868806     * @param string|null $etag The ETag unique identifier or null to remove the header
    869      * @param Boolean     $weak Whether you want a weak ETag or not
    870      *
    871      * @return Response
    872      *
    873      * @api
     807     * @param bool        $weak Whether you want a weak ETag or not
     808     *
     809     * @return Response
    874810     */
    875811    public function setEtag($etag = null, $weak = false)
     
    898834     *
    899835     * @throws \InvalidArgumentException
    900      *
    901      * @api
    902836     */
    903837    public function setCache(array $options)
     
    951885     *
    952886     * @see http://tools.ietf.org/html/rfc2616#section-10.3.5
    953      *
    954      * @api
    955887     */
    956888    public function setNotModified()
     
    970902     * Returns true if the response includes a Vary header.
    971903     *
    972      * @return Boolean true if the response includes a Vary header, false otherwise
    973      *
    974      * @api
     904     * @return bool true if the response includes a Vary header, false otherwise
    975905     */
    976906    public function hasVary()
     
    983913     *
    984914     * @return array An array of Vary names
    985      *
    986      * @api
    987915     */
    988916    public function getVary()
    989917    {
    990         if (!$vary = $this->headers->get('Vary')) {
     918        if (!$vary = $this->headers->get('Vary', null, false)) {
    991919            return array();
    992920        }
    993921
    994         return is_array($vary) ? $vary : preg_split('/[\s,]+/', $vary);
     922        $ret = array();
     923        foreach ($vary as $item) {
     924            $ret = array_merge($ret, preg_split('/[\s,]+/', $item));
     925        }
     926
     927        return $ret;
    995928    }
    996929
     
    999932     *
    1000933     * @param string|array $headers
    1001      * @param Boolean      $replace Whether to replace the actual value of not (true by default)
    1002      *
    1003      * @return Response
    1004      *
    1005      * @api
     934     * @param bool         $replace Whether to replace the actual value or not (true by default)
     935     *
     936     * @return Response
    1006937     */
    1007938    public function setVary($headers, $replace = true)
     
    1021952     * @param Request $request A Request instance
    1022953     *
    1023      * @return Boolean true if the Response validators match the Request, false otherwise
    1024      *
    1025      * @api
     954     * @return bool true if the Response validators match the Request, false otherwise
    1026955     */
    1027956    public function isNotModified(Request $request)
     
    1031960        }
    1032961
    1033         $lastModified = $request->headers->get('If-Modified-Since');
    1034962        $notModified = false;
    1035         if ($etags = $request->getEtags()) {
    1036             $notModified = (in_array($this->getEtag(), $etags) || in_array('*', $etags)) && (!$lastModified || $this->headers->get('Last-Modified') == $lastModified);
    1037         } elseif ($lastModified) {
    1038             $notModified = $lastModified == $this->headers->get('Last-Modified');
     963        $lastModified = $this->headers->get('Last-Modified');
     964        $modifiedSince = $request->headers->get('If-Modified-Since');
     965
     966        if ($etags = $request->getETags()) {
     967            $notModified = in_array($this->getEtag(), $etags) || in_array('*', $etags);
     968        }
     969
     970        if ($modifiedSince && $lastModified) {
     971            $notModified = strtotime($modifiedSince) >= strtotime($lastModified) && (!$etags || $notModified);
    1039972        }
    1040973
     
    1046979    }
    1047980
    1048     // http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
    1049981    /**
    1050982     * Is response invalid?
    1051983     *
    1052      * @return Boolean
    1053      *
    1054      * @api
     984     * @return bool
     985     *
     986     * @see http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
    1055987     */
    1056988    public function isInvalid()
     
    1062994     * Is response informative?
    1063995     *
    1064      * @return Boolean
    1065      *
    1066      * @api
     996     * @return bool
    1067997     */
    1068998    public function isInformational()
     
    10741004     * Is response successful?
    10751005     *
    1076      * @return Boolean
    1077      *
    1078      * @api
     1006     * @return bool
    10791007     */
    10801008    public function isSuccessful()
     
    10861014     * Is the response a redirect?
    10871015     *
    1088      * @return Boolean
    1089      *
    1090      * @api
     1016     * @return bool
    10911017     */
    10921018    public function isRedirection()
     
    10981024     * Is there a client error?
    10991025     *
    1100      * @return Boolean
    1101      *
    1102      * @api
     1026     * @return bool
    11031027     */
    11041028    public function isClientError()
     
    11101034     * Was there a server side error?
    11111035     *
    1112      * @return Boolean
    1113      *
    1114      * @api
     1036     * @return bool
    11151037     */
    11161038    public function isServerError()
     
    11221044     * Is the response OK?
    11231045     *
    1124      * @return Boolean
    1125      *
    1126      * @api
     1046     * @return bool
    11271047     */
    11281048    public function isOk()
     
    11341054     * Is the response forbidden?
    11351055     *
    1136      * @return Boolean
    1137      *
    1138      * @api
     1056     * @return bool
    11391057     */
    11401058    public function isForbidden()
     
    11461064     * Is the response a not found error?
    11471065     *
    1148      * @return Boolean
    1149      *
    1150      * @api
     1066     * @return bool
    11511067     */
    11521068    public function isNotFound()
     
    11601076     * @param string $location
    11611077     *
    1162      * @return Boolean
    1163      *
    1164      * @api
     1078     * @return bool
    11651079     */
    11661080    public function isRedirect($location = null)
     
    11721086     * Is the response empty?
    11731087     *
    1174      * @return Boolean
    1175      *
    1176      * @api
     1088     * @return bool
    11771089     */
    11781090    public function isEmpty()
    11791091    {
    1180         return in_array($this->statusCode, array(201, 204, 304));
    1181     }
    1182 
    1183     /**
    1184      * Check if we need to remove Cache-Control for ssl encrypted downloads when using IE < 9
     1092        return in_array($this->statusCode, array(204, 304));
     1093    }
     1094
     1095    /**
     1096     * Check if we need to remove Cache-Control for SSL encrypted downloads when using IE < 9.
    11851097     *
    11861098     * @link http://support.microsoft.com/kb/323308
     
    11891101    {
    11901102        if (false !== stripos($this->headers->get('Content-Disposition'), 'attachment') && preg_match('/MSIE (.*?);/i', $request->server->get('HTTP_USER_AGENT'), $match) == 1 && true === $request->isSecure()) {
    1191             if (intval(preg_replace("/(MSIE )(.*?);/", "$2", $match[0])) < 9) {
     1103            if ((int) preg_replace('/(MSIE )(.*?);/', '$2', $match[0]) < 9) {
    11921104                $this->headers->remove('Cache-Control');
    11931105            }
  • _plugins_/http/trunk/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/ResponseHeaderBag.php

    r78576 r99944  
    1616 *
    1717 * @author Fabien Potencier <fabien@symfony.com>
    18  *
    19  * @api
    2018 */
    2119class ResponseHeaderBag extends HeaderBag
    2220{
    23     const COOKIES_FLAT           = 'flat';
    24     const COOKIES_ARRAY          = 'array';
     21    const COOKIES_FLAT = 'flat';
     22    const COOKIES_ARRAY = 'array';
    2523
    2624    const DISPOSITION_ATTACHMENT = 'attachment';
    27     const DISPOSITION_INLINE     = 'inline';
     25    const DISPOSITION_INLINE = 'inline';
    2826
    2927    /**
     
    3533     * @var array
    3634     */
    37     protected $cookies              = array();
     35    protected $cookies = array();
    3836
    3937    /**
    4038     * @var array
    4139     */
    42     protected $headerNames          = array();
     40    protected $headerNames = array();
    4341
    4442    /**
     
    4644     *
    4745     * @param array $headers An array of HTTP headers
    48      *
    49      * @api
    5046     */
    5147    public function __construct(array $headers = array())
     
    8581    /**
    8682     * {@inheritdoc}
    87      *
    88      * @api
    8983     */
    9084    public function replace(array $headers = array())
     
    10195    /**
    10296     * {@inheritdoc}
    103      *
    104      * @api
    10597     */
    10698    public function set($key, $values, $replace = true)
     
    108100        parent::set($key, $values, $replace);
    109101
    110         $uniqueKey = strtr(strtolower($key), '_', '-');
     102        $uniqueKey = str_replace('_', '-', strtolower($key));
    111103        $this->headerNames[$uniqueKey] = $key;
    112104
     
    122114    /**
    123115     * {@inheritdoc}
    124      *
    125      * @api
    126116     */
    127117    public function remove($key)
     
    129119        parent::remove($key);
    130120
    131         $uniqueKey = strtr(strtolower($key), '_', '-');
     121        $uniqueKey = str_replace('_', '-', strtolower($key));
    132122        unset($this->headerNames[$uniqueKey]);
    133123
     
    157147     *
    158148     * @param Cookie $cookie
    159      *
    160      * @api
    161149     */
    162150    public function setCookie(Cookie $cookie)
     
    166154
    167155    /**
    168      * Removes a cookie from the array, but does not unset it in the browser
     156     * Removes a cookie from the array, but does not unset it in the browser.
    169157     *
    170158     * @param string $name
    171159     * @param string $path
    172160     * @param string $domain
    173      *
    174      * @api
    175161     */
    176162    public function removeCookie($name, $path = '/', $domain = null)
     
    192178
    193179    /**
    194      * Returns an array with all cookies
     180     * Returns an array with all cookies.
    195181     *
    196182     * @param string $format
     
    199185     *
    200186     * @return array
    201      *
    202      * @api
    203187     */
    204188    public function getCookies($format = self::COOKIES_FLAT)
     
    225209
    226210    /**
    227      * Clears a cookie in the browser
     211     * Clears a cookie in the browser.
    228212     *
    229213     * @param string $name
    230214     * @param string $path
    231215     * @param string $domain
    232      *
    233      * @api
    234216     */
    235217    public function clearCookie($name, $path = '/', $domain = null)
     
    250232     *
    251233     * @throws \InvalidArgumentException
     234     *
    252235     * @see RFC 6266
    253236     */
  • _plugins_/http/trunk/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/ServerBag.php

    r78576 r99944  
    6666
    6767            if (null !== $authorizationHeader) {
    68                 if (0 === stripos($authorizationHeader, 'basic')) {
     68                if (0 === stripos($authorizationHeader, 'basic ')) {
    6969                    // Decode AUTHORIZATION header into PHP_AUTH_USER and PHP_AUTH_PW when authorization header is basic
    70                     $exploded = explode(':', base64_decode(substr($authorizationHeader, 6)));
     70                    $exploded = explode(':', base64_decode(substr($authorizationHeader, 6)), 2);
    7171                    if (count($exploded) == 2) {
    7272                        list($headers['PHP_AUTH_USER'], $headers['PHP_AUTH_PW']) = $exploded;
    7373                    }
    74                 } elseif (empty($this->parameters['PHP_AUTH_DIGEST']) && (0 === stripos($authorizationHeader, 'digest'))) {
     74                } elseif (empty($this->parameters['PHP_AUTH_DIGEST']) && (0 === stripos($authorizationHeader, 'digest '))) {
    7575                    // In some circumstances PHP_AUTH_DIGEST needs to be set
    7676                    $headers['PHP_AUTH_DIGEST'] = $authorizationHeader;
    7777                    $this->parameters['PHP_AUTH_DIGEST'] = $authorizationHeader;
     78                } elseif (0 === stripos($authorizationHeader, 'bearer ')) {
     79                    /*
     80                     * XXX: Since there is no PHP_AUTH_BEARER in PHP predefined variables,
     81                     *      I'll just set $headers['AUTHORIZATION'] here.
     82                     *      http://php.net/manual/en/reserved.variables.server.php
     83                     */
     84                    $headers['AUTHORIZATION'] = $authorizationHeader;
    7885                }
    7986            }
     87        }
     88
     89        if (isset($headers['AUTHORIZATION'])) {
     90            return $headers;
    8091        }
    8192
  • _plugins_/http/trunk/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Attribute/AttributeBag.php

    r78576 r99944  
    1313
    1414/**
    15  * This class relates to session attribute storage
     15 * This class relates to session attribute storage.
    1616 */
    1717class AttributeBag implements AttributeBagInterface, \IteratorAggregate, \Countable
  • _plugins_/http/trunk/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Attribute/AttributeBagInterface.php

    r78576 r99944  
    2626     * @param string $name The attribute name
    2727     *
    28      * @return Boolean true if the attribute is defined, false otherwise
     28     * @return bool true if the attribute is defined, false otherwise
    2929     */
    3030    public function has($name);
  • _plugins_/http/trunk/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Attribute/NamespacedAttributeBag.php

    r78576 r99944  
    4444    public function has($name)
    4545    {
     46        // reference mismatch: if fixed, re-introduced in array_key_exists; keep as it is
    4647        $attributes = $this->resolveAttributePath($name);
    4748        $name = $this->resolveKey($name);
     
    5960    public function get($name, $default = null)
    6061    {
     62        // reference mismatch: if fixed, re-introduced in array_key_exists; keep as it is
    6163        $attributes = $this->resolveAttributePath($name);
    6264        $name = $this->resolveKey($name);
     
    7476    public function set($name, $value)
    7577    {
    76         $attributes = & $this->resolveAttributePath($name, true);
     78        $attributes = &$this->resolveAttributePath($name, true);
    7779        $name = $this->resolveKey($name);
    7880        $attributes[$name] = $value;
     
    8587    {
    8688        $retval = null;
    87         $attributes = & $this->resolveAttributePath($name);
     89        $attributes = &$this->resolveAttributePath($name);
    8890        $name = $this->resolveKey($name);
    8991        if (null !== $attributes && array_key_exists($name, $attributes)) {
     
    100102     * This method allows structured namespacing of session attributes.
    101103     *
    102      * @param string  $name         Key name
    103      * @param boolean $writeContext Write context, default false
     104     * @param string $name         Key name
     105     * @param bool  $writeContext Write context, default false
    104106     *