diff --git a/typo3/contrib/pear/HTTP/Request2.php b/typo3/contrib/pear/HTTP/Request2.php index 4e3b5884585ef850d2150562a171579bd3e5ff2b..36c413faaf577655263636d0f9ab70036784f419 100644 --- a/typo3/contrib/pear/HTTP/Request2.php +++ b/typo3/contrib/pear/HTTP/Request2.php @@ -4,41 +4,18 @@ * * PHP version 5 * - * LICENSE: + * LICENSE * - * Copyright (c) 2008-2012, Alexey Borzov <avb@php.net> - * All rights reserved. + * This source file is subject to BSD 3-Clause License that is bundled + * with this package in the file LICENSE and available at the URL + * https://raw.github.com/pear/HTTP_Request2/trunk/docs/LICENSE * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * The names of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * @category HTTP - * @package HTTP_Request2 - * @author Alexey Borzov <avb@php.net> - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version SVN: $Id: Request2.php 324936 2012-04-07 07:49:03Z avb $ - * @link http://pear.php.net/package/HTTP_Request2 + * @category HTTP + * @package HTTP_Request2 + * @author Alexey Borzov <avb@php.net> + * @copyright 2008-2014 Alexey Borzov <avb@php.net> + * @license http://opensource.org/licenses/BSD-3-Clause BSD 3-Clause License + * @link http://pear.php.net/package/HTTP_Request2 */ /** @@ -57,8 +34,8 @@ require_once 'HTTP/Request2/Exception.php'; * @category HTTP * @package HTTP_Request2 * @author Alexey Borzov <avb@php.net> - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 2.1.1 + * @license http://opensource.org/licenses/BSD-3-Clause BSD 3-Clause License + * @version Release: 2.2.1 * @link http://pear.php.net/package/HTTP_Request2 * @link http://tools.ietf.org/html/rfc2616#section-5 */ @@ -152,6 +129,7 @@ class HTTP_Request2 implements SplSubject 'protocol_version' => '1.1', 'buffer_size' => 16384, 'store_body' => true, + 'local_ip' => null, 'proxy_host' => '', 'proxy_port' => '', @@ -235,7 +213,7 @@ class HTTP_Request2 implements SplSubject $this->setMethod($method); } $this->setHeader( - 'user-agent', 'HTTP_Request2/2.1.1 ' . + 'user-agent', 'HTTP_Request2/2.2.1 ' . '(http://pear.php.net/package/http_request2) PHP/' . phpversion() ); } @@ -338,6 +316,8 @@ class HTTP_Request2 implements SplSubject * <li> 'store_body' - Whether to store response body in response object. * Set to false if receiving a huge response and * using an Observer to save it (boolean)</li> + * <li> 'local_ip' - Specifies the IP address that will be used for accessing + * the network (string)</li> * <li> 'proxy_type' - Proxy type, 'http' or 'socks5' (string)</li> * <li> 'proxy_host' - Proxy server host (string)</li> * <li> 'proxy_port' - Proxy server port (integer)</li> diff --git a/typo3/contrib/pear/HTTP/Request2/Adapter.php b/typo3/contrib/pear/HTTP/Request2/Adapter.php index 76eb7ecbdadcab18157c9519baeb53c21f5b564d..2b29fcefe775cee8cc129616a4271caefc3a5700 100644 --- a/typo3/contrib/pear/HTTP/Request2/Adapter.php +++ b/typo3/contrib/pear/HTTP/Request2/Adapter.php @@ -4,41 +4,18 @@ * * PHP version 5 * - * LICENSE: + * LICENSE * - * Copyright (c) 2008-2012, Alexey Borzov <avb@php.net> - * All rights reserved. + * This source file is subject to BSD 3-Clause License that is bundled + * with this package in the file LICENSE and available at the URL + * https://raw.github.com/pear/HTTP_Request2/trunk/docs/LICENSE * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * The names of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * @category HTTP - * @package HTTP_Request2 - * @author Alexey Borzov <avb@php.net> - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version SVN: $Id: Adapter.php 324415 2012-03-21 10:50:50Z avb $ - * @link http://pear.php.net/package/HTTP_Request2 + * @category HTTP + * @package HTTP_Request2 + * @author Alexey Borzov <avb@php.net> + * @copyright 2008-2014 Alexey Borzov <avb@php.net> + * @license http://opensource.org/licenses/BSD-3-Clause BSD 3-Clause License + * @link http://pear.php.net/package/HTTP_Request2 */ /** @@ -56,8 +33,8 @@ require_once 'HTTP/Request2/Response.php'; * @category HTTP * @package HTTP_Request2 * @author Alexey Borzov <avb@php.net> - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 2.1.1 + * @license http://opensource.org/licenses/BSD-3-Clause BSD 3-Clause License + * @version Release: 2.2.1 * @link http://pear.php.net/package/HTTP_Request2 */ abstract class HTTP_Request2_Adapter @@ -150,7 +127,10 @@ abstract class HTTP_Request2_Adapter if (empty($headers['content-type'])) { $headers['content-type'] = 'application/x-www-form-urlencoded'; } - $headers['content-length'] = $this->contentLength; + // Content-Length should not be sent for chunked Transfer-Encoding (bug #20125) + if (!isset($headers['transfer-encoding'])) { + $headers['content-length'] = $this->contentLength; + } } } } diff --git a/typo3/contrib/pear/HTTP/Request2/Adapter/Curl.php b/typo3/contrib/pear/HTTP/Request2/Adapter/Curl.php index 5aed0016dfff60b873baa689ada148a2347000bd..4fb8eb54a9aa9adc3e696a81f4ff4b696ade8e6f 100644 --- a/typo3/contrib/pear/HTTP/Request2/Adapter/Curl.php +++ b/typo3/contrib/pear/HTTP/Request2/Adapter/Curl.php @@ -4,41 +4,18 @@ * * PHP version 5 * - * LICENSE: + * LICENSE * - * Copyright (c) 2008-2012, Alexey Borzov <avb@php.net> - * All rights reserved. + * This source file is subject to BSD 3-Clause License that is bundled + * with this package in the file LICENSE and available at the URL + * https://raw.github.com/pear/HTTP_Request2/trunk/docs/LICENSE * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * The names of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * @category HTTP - * @package HTTP_Request2 - * @author Alexey Borzov <avb@php.net> - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version SVN: $Id: Curl.php 324746 2012-04-03 15:09:16Z avb $ - * @link http://pear.php.net/package/HTTP_Request2 + * @category HTTP + * @package HTTP_Request2 + * @author Alexey Borzov <avb@php.net> + * @copyright 2008-2014 Alexey Borzov <avb@php.net> + * @license http://opensource.org/licenses/BSD-3-Clause BSD 3-Clause License + * @link http://pear.php.net/package/HTTP_Request2 */ /** @@ -52,8 +29,8 @@ require_once 'HTTP/Request2/Adapter.php'; * @category HTTP * @package HTTP_Request2 * @author Alexey Borzov <avb@php.net> - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 2.1.1 + * @license http://opensource.org/licenses/BSD-3-Clause BSD 3-Clause License + * @version Release: 2.2.1 * @link http://pear.php.net/package/HTTP_Request2 */ class HTTP_Request2_Adapter_Curl extends HTTP_Request2_Adapter @@ -238,6 +215,7 @@ class HTTP_Request2_Adapter_Curl extends HTTP_Request2_Adapter * * @return resource a cURL handle, as created by curl_init() * @throws HTTP_Request2_LogicException + * @throws HTTP_Request2_NotImplementedException */ protected function createCurlHandle() { @@ -278,6 +256,11 @@ class HTTP_Request2_Adapter_Curl extends HTTP_Request2_Adapter } } + // set local IP via CURLOPT_INTERFACE (request #19515) + if ($ip = $this->request->getConfig('local_ip')) { + curl_setopt($ch, CURLOPT_INTERFACE, $ip); + } + // request timeout if ($timeout = $this->request->getConfig('timeout')) { curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); @@ -389,7 +372,7 @@ class HTTP_Request2_Adapter_Curl extends HTTP_Request2_Adapter } $this->calculateRequestLength($headers); - if (isset($headers['content-length'])) { + if (isset($headers['content-length']) || isset($headers['transfer-encoding'])) { $this->workaroundPhpBug47204($ch, $headers); } diff --git a/typo3/contrib/pear/HTTP/Request2/Adapter/Mock.php b/typo3/contrib/pear/HTTP/Request2/Adapter/Mock.php index 0d89e068ddff5bc0b91d26a11d9dc7d3b06500da..9659e621e76b4c265351bcbd5e7c2e3a1c6168f1 100644 --- a/typo3/contrib/pear/HTTP/Request2/Adapter/Mock.php +++ b/typo3/contrib/pear/HTTP/Request2/Adapter/Mock.php @@ -4,41 +4,18 @@ * * PHP version 5 * - * LICENSE: + * LICENSE * - * Copyright (c) 2008-2012, Alexey Borzov <avb@php.net> - * All rights reserved. + * This source file is subject to BSD 3-Clause License that is bundled + * with this package in the file LICENSE and available at the URL + * https://raw.github.com/pear/HTTP_Request2/trunk/docs/LICENSE * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * The names of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * @category HTTP - * @package HTTP_Request2 - * @author Alexey Borzov <avb@php.net> - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version SVN: $Id: Mock.php 324937 2012-04-07 10:05:57Z avb $ - * @link http://pear.php.net/package/HTTP_Request2 + * @category HTTP + * @package HTTP_Request2 + * @author Alexey Borzov <avb@php.net> + * @copyright 2008-2014 Alexey Borzov <avb@php.net> + * @license http://opensource.org/licenses/BSD-3-Clause BSD 3-Clause License + * @link http://pear.php.net/package/HTTP_Request2 */ /** @@ -66,8 +43,8 @@ require_once 'HTTP/Request2/Adapter.php'; * @category HTTP * @package HTTP_Request2 * @author Alexey Borzov <avb@php.net> - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 2.1.1 + * @license http://opensource.org/licenses/BSD-3-Clause BSD 3-Clause License + * @version Release: 2.2.1 * @link http://pear.php.net/package/HTTP_Request2 */ class HTTP_Request2_Adapter_Mock extends HTTP_Request2_Adapter @@ -89,7 +66,7 @@ class HTTP_Request2_Adapter_Mock extends HTTP_Request2_Adapter * @param HTTP_Request2 $request HTTP request message * * @return HTTP_Request2_Response - * @throws \Exception + * @throws Exception */ public function sendRequest(HTTP_Request2 $request) { diff --git a/typo3/contrib/pear/HTTP/Request2/Adapter/Socket.php b/typo3/contrib/pear/HTTP/Request2/Adapter/Socket.php index 4faef3501a87e0d8d0fd887f6c5092576f31d9ed..62507fd7df0de73d409d0ec0e5652ea57194a8c3 100644 --- a/typo3/contrib/pear/HTTP/Request2/Adapter/Socket.php +++ b/typo3/contrib/pear/HTTP/Request2/Adapter/Socket.php @@ -4,41 +4,18 @@ * * PHP version 5 * - * LICENSE: + * LICENSE * - * Copyright (c) 2008-2012, Alexey Borzov <avb@php.net> - * All rights reserved. + * This source file is subject to BSD 3-Clause License that is bundled + * with this package in the file LICENSE and available at the URL + * https://raw.github.com/pear/HTTP_Request2/trunk/docs/LICENSE * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * The names of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * @category HTTP - * @package HTTP_Request2 - * @author Alexey Borzov <avb@php.net> - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version SVN: $Id: Socket.php 324953 2012-04-08 07:24:12Z avb $ - * @link http://pear.php.net/package/HTTP_Request2 + * @category HTTP + * @package HTTP_Request2 + * @author Alexey Borzov <avb@php.net> + * @copyright 2008-2014 Alexey Borzov <avb@php.net> + * @license http://opensource.org/licenses/BSD-3-Clause BSD 3-Clause License + * @link http://pear.php.net/package/HTTP_Request2 */ /** Base class for HTTP_Request2 adapters */ @@ -56,8 +33,8 @@ require_once 'HTTP/Request2/SocketWrapper.php'; * @category HTTP * @package HTTP_Request2 * @author Alexey Borzov <avb@php.net> - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 2.1.1 + * @license http://opensource.org/licenses/BSD-3-Clause BSD 3-Clause License + * @version Release: 2.2.1 * @link http://pear.php.net/package/HTTP_Request2 */ class HTTP_Request2_Adapter_Socket extends HTTP_Request2_Adapter @@ -70,7 +47,7 @@ class HTTP_Request2_Adapter_Socket extends HTTP_Request2_Adapter /** * Regular expression for 'quoted-string' rule from RFC 2616 */ - const REGEXP_QUOTED_STRING = '"(?:\\\\.|[^\\\\"])*"'; + const REGEXP_QUOTED_STRING = '"(?>[^"\\\\]+|\\\\.)*"'; /** * Connected sockets, needed for Keep-Alive support @@ -129,6 +106,12 @@ class HTTP_Request2_Adapter_Socket extends HTTP_Request2_Adapter */ protected $redirectCountdown = null; + /** + * Whether to wait for "100 Continue" response before sending request body + * @var bool + */ + protected $expect100Continue = false; + /** * Sends request to the remote server and returns its response * @@ -147,9 +130,21 @@ class HTTP_Request2_Adapter_Socket extends HTTP_Request2_Adapter $this->socket->write($headers); // provide request headers to the observer, see request #7633 $this->request->setLastEvent('sentHeaders', $headers); - $this->writeBody(); - $response = $this->readResponse(); + if (!$this->expect100Continue) { + $this->writeBody(); + $response = $this->readResponse(); + + } else { + $response = $this->readResponse(); + if (!$response || 100 == $response->getStatus()) { + $this->expect100Continue = false; + // either got "100 Continue" or timed out -> send body + $this->writeBody(); + $response = $this->readResponse(); + } + } + if ($jar = $request->getCookieJar()) { $jar->addCookiesFromResponse($response, $request->getUrl()); @@ -256,19 +251,25 @@ class HTTP_Request2_Adapter_Socket extends HTTP_Request2_Adapter 'Keep-Alive' == $headers['connection']); $options = array(); + if ($ip = $this->request->getConfig('local_ip')) { + $options['socket'] = array( + 'bindto' => (false === strpos($ip, ':') ? $ip : '[' . $ip . ']') . ':0' + ); + } if ($secure || $tunnel) { + $options['ssl'] = array(); foreach ($this->request->getConfig() as $name => $value) { if ('ssl_' == substr($name, 0, 4) && null !== $value) { if ('ssl_verify_host' == $name) { if ($value) { - $options['CN_match'] = $reqHost; + $options['ssl']['CN_match'] = $reqHost; } } else { - $options[substr($name, 4)] = $value; + $options['ssl'][substr($name, 4)] = $value; } } } - ksort($options); + ksort($options['ssl']); } // Use global request timeout if given, see feature requests #5735, #8964 @@ -863,6 +864,11 @@ class HTTP_Request2_Adapter_Socket extends HTTP_Request2_Adapter $this->addAuthorizationHeader($headers, $host, $requestUrl); $this->addProxyAuthorizationHeader($headers, $requestUrl); $this->calculateRequestLength($headers); + if ('1.1' == $this->request->getConfig('protocol_version')) { + $this->updateExpectHeader($headers); + } else { + $this->expect100Continue = false; + } $headersStr = $this->request->getMethod() . ' ' . $requestUrl . ' HTTP/' . $this->request->getConfig('protocol_version') . "\r\n"; @@ -873,6 +879,78 @@ class HTTP_Request2_Adapter_Socket extends HTTP_Request2_Adapter return $headersStr . "\r\n"; } + /** + * Adds or removes 'Expect: 100-continue' header from request headers + * + * Also sets the $expect100Continue property. Parsing of existing header + * is somewhat needed due to its complex structure and due to the + * requirement in section 8.2.3 of RFC 2616: + * > A client MUST NOT send an Expect request-header field (section + * > 14.20) with the "100-continue" expectation if it does not intend + * > to send a request body. + * + * @param array &$headers Array of headers prepared for the request + * + * @throws HTTP_Request2_LogicException + * @link http://pear.php.net/bugs/bug.php?id=19233 + * @link http://tools.ietf.org/html/rfc2616#section-8.2.3 + */ + protected function updateExpectHeader(&$headers) + { + $this->expect100Continue = false; + $expectations = array(); + if (isset($headers['expect'])) { + if ('' === $headers['expect']) { + // empty 'Expect' header is technically invalid, so just get rid of it + unset($headers['expect']); + return; + } + // build regexp to parse the value of existing Expect header + $expectParam = ';\s*' . self::REGEXP_TOKEN . '(?:\s*=\s*(?:' + . self::REGEXP_TOKEN . '|' + . self::REGEXP_QUOTED_STRING . '))?\s*'; + $expectExtension = self::REGEXP_TOKEN . '(?:\s*=\s*(?:' + . self::REGEXP_TOKEN . '|' + . self::REGEXP_QUOTED_STRING . ')\s*(?:' + . $expectParam . ')*)?'; + $expectItem = '!(100-continue|' . $expectExtension . ')!A'; + + $pos = 0; + $length = strlen($headers['expect']); + + while ($pos < $length) { + $pos += strspn($headers['expect'], " \t", $pos); + if (',' === substr($headers['expect'], $pos, 1)) { + $pos++; + continue; + + } elseif (!preg_match($expectItem, $headers['expect'], $m, 0, $pos)) { + throw new HTTP_Request2_LogicException( + "Cannot parse value '{$headers['expect']}' of Expect header", + HTTP_Request2_Exception::INVALID_ARGUMENT + ); + + } else { + $pos += strlen($m[0]); + if (strcasecmp('100-continue', $m[0])) { + $expectations[] = $m[0]; + } + } + } + } + + if (1024 < $this->contentLength) { + $expectations[] = '100-continue'; + $this->expect100Continue = true; + } + + if (empty($expectations)) { + unset($headers['expect']); + } else { + $headers['expect'] = implode(',', $expectations); + } + } + /** * Sends the request body * @@ -888,6 +966,8 @@ class HTTP_Request2_Adapter_Socket extends HTTP_Request2_Adapter $position = 0; $bufferSize = $this->request->getConfig('buffer_size'); + $headers = $this->request->getHeaders(); + $chunked = isset($headers['transfer-encoding']); while ($position < $this->contentLength) { if (is_string($this->requestBody)) { $str = substr($this->requestBody, $position, $bufferSize); @@ -896,11 +976,20 @@ class HTTP_Request2_Adapter_Socket extends HTTP_Request2_Adapter } else { $str = $this->requestBody->read($bufferSize); } - $this->socket->write($str); + if (!$chunked) { + $this->socket->write($str); + } else { + $this->socket->write(dechex(strlen($str)) . "\r\n{$str}\r\n"); + } // Provide the length of written string to the observer, request #7630 $this->request->setLastEvent('sentBodyPart', strlen($str)); $position += strlen($str); } + + // write zero-length chunk + if ($chunked) { + $this->socket->write("0\r\n\r\n"); + } $this->request->setLastEvent('sentBody', $this->contentLength); } @@ -913,15 +1002,31 @@ class HTTP_Request2_Adapter_Socket extends HTTP_Request2_Adapter protected function readResponse() { $bufferSize = $this->request->getConfig('buffer_size'); + // http://tools.ietf.org/html/rfc2616#section-8.2.3 + // ...the client SHOULD NOT wait for an indefinite period before sending the request body + $timeout = $this->expect100Continue ? 1 : null; do { - $response = new HTTP_Request2_Response( - $this->socket->readLine($bufferSize), true, $this->request->getUrl() - ); - do { - $headerLine = $this->socket->readLine($bufferSize); - $response->parseHeaderLine($headerLine); - } while ('' != $headerLine); + try { + $response = new HTTP_Request2_Response( + $this->socket->readLine($bufferSize, $timeout), true, $this->request->getUrl() + ); + do { + $headerLine = $this->socket->readLine($bufferSize); + $response->parseHeaderLine($headerLine); + } while ('' != $headerLine); + + } catch (HTTP_Request2_MessageException $e) { + if (HTTP_Request2_Exception::TIMEOUT === $e->getCode() + && $this->expect100Continue + ) { + return null; + } + throw $e; + } + if ($this->expect100Continue && 100 == $response->getStatus()) { + return $response; + } } while (in_array($response->getStatus(), array(100, 101))); $this->request->setLastEvent('receivedHeaders', $response); diff --git a/typo3/contrib/pear/HTTP/Request2/CookieJar.php b/typo3/contrib/pear/HTTP/Request2/CookieJar.php index a17103457af3d8abfe050786a1f1643a7eb3d4fa..ed6352ebedfa3302fb18730c355918500c15ea69 100644 --- a/typo3/contrib/pear/HTTP/Request2/CookieJar.php +++ b/typo3/contrib/pear/HTTP/Request2/CookieJar.php @@ -4,41 +4,18 @@ * * PHP version 5 * - * LICENSE: + * LICENSE * - * Copyright (c) 2008-2012, Alexey Borzov <avb@php.net> - * All rights reserved. + * This source file is subject to BSD 3-Clause License that is bundled + * with this package in the file LICENSE and available at the URL + * https://raw.github.com/pear/HTTP_Request2/trunk/docs/LICENSE * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * The names of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * @category HTTP - * @package HTTP_Request2 - * @author Alexey Borzov <avb@php.net> - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version SVN: $Id: CookieJar.php 324415 2012-03-21 10:50:50Z avb $ - * @link http://pear.php.net/package/HTTP_Request2 + * @category HTTP + * @package HTTP_Request2 + * @author Alexey Borzov <avb@php.net> + * @copyright 2008-2014 Alexey Borzov <avb@php.net> + * @license http://opensource.org/licenses/BSD-3-Clause BSD 3-Clause License + * @link http://pear.php.net/package/HTTP_Request2 */ /** Class representing a HTTP request message */ @@ -50,8 +27,8 @@ require_once 'HTTP/Request2.php'; * @category HTTP * @package HTTP_Request2 * @author Alexey Borzov <avb@php.net> - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 2.1.1 + * @license http://opensource.org/licenses/BSD-3-Clause BSD 3-Clause License + * @version Release: @package_version@ * @link http://pear.php.net/package/HTTP_Request2 */ class HTTP_Request2_CookieJar implements Serializable @@ -514,4 +491,4 @@ class HTTP_Request2_CookieJar implements Serializable return (strlen($result) > 0) ? ($result . '.' . $sub) : null; } } -?> +?> \ No newline at end of file diff --git a/typo3/contrib/pear/HTTP/Request2/Exception.php b/typo3/contrib/pear/HTTP/Request2/Exception.php index d440fdfae16ffd277290d42db94f6582daffde6d..5fcd6917d5a78b4fa38aa405626df87a346cd130 100644 --- a/typo3/contrib/pear/HTTP/Request2/Exception.php +++ b/typo3/contrib/pear/HTTP/Request2/Exception.php @@ -4,41 +4,18 @@ * * PHP version 5 * - * LICENSE: - * - * Copyright (c) 2008-2012, Alexey Borzov <avb@php.net> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * The names of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * @category HTTP - * @package HTTP_Request2 - * @author Alexey Borzov <avb@php.net> - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version SVN: $Id: Exception.php 324415 2012-03-21 10:50:50Z avb $ - * @link http://pear.php.net/package/HTTP_Request2 + * LICENSE + * + * This source file is subject to BSD 3-Clause License that is bundled + * with this package in the file LICENSE and available at the URL + * https://raw.github.com/pear/HTTP_Request2/trunk/docs/LICENSE + * + * @category HTTP + * @package HTTP_Request2 + * @author Alexey Borzov <avb@php.net> + * @copyright 2008-2014 Alexey Borzov <avb@php.net> + * @license http://opensource.org/licenses/BSD-3-Clause BSD 3-Clause License + * @link http://pear.php.net/package/HTTP_Request2 */ /** @@ -52,8 +29,8 @@ require_once 'PEAR/Exception.php'; * @category HTTP * @package HTTP_Request2 * @author Alexey Borzov <avb@php.net> - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 2.1.1 + * @license http://opensource.org/licenses/BSD-3-Clause BSD 3-Clause License + * @version Release: 2.2.1 * @link http://pear.php.net/package/HTTP_Request2 * @link http://pear.php.net/pepr/pepr-proposal-show.php?id=132 */ @@ -119,8 +96,8 @@ class HTTP_Request2_Exception extends PEAR_Exception * @category HTTP * @package HTTP_Request2 * @author Alexey Borzov <avb@php.net> - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 2.1.1 + * @license http://opensource.org/licenses/BSD-3-Clause BSD 3-Clause License + * @version Release: 2.2.1 * @link http://pear.php.net/package/HTTP_Request2 */ class HTTP_Request2_NotImplementedException extends HTTP_Request2_Exception @@ -140,8 +117,8 @@ class HTTP_Request2_NotImplementedException extends HTTP_Request2_Exception * @category HTTP * @package HTTP_Request2 * @author Alexey Borzov <avb@php.net> - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 2.1.1 + * @license http://opensource.org/licenses/BSD-3-Clause BSD 3-Clause License + * @version Release: 2.2.1 * @link http://pear.php.net/package/HTTP_Request2 */ class HTTP_Request2_LogicException extends HTTP_Request2_Exception @@ -157,8 +134,8 @@ class HTTP_Request2_LogicException extends HTTP_Request2_Exception * @category HTTP * @package HTTP_Request2 * @author Alexey Borzov <avb@php.net> - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 2.1.1 + * @license http://opensource.org/licenses/BSD-3-Clause BSD 3-Clause License + * @version Release: 2.2.1 * @link http://pear.php.net/package/HTTP_Request2 */ class HTTP_Request2_ConnectionException extends HTTP_Request2_Exception @@ -173,8 +150,8 @@ class HTTP_Request2_ConnectionException extends HTTP_Request2_Exception * @category HTTP * @package HTTP_Request2 * @author Alexey Borzov <avb@php.net> - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 2.1.1 + * @license http://opensource.org/licenses/BSD-3-Clause BSD 3-Clause License + * @version Release: 2.2.1 * @link http://pear.php.net/package/HTTP_Request2 */ class HTTP_Request2_MessageException extends HTTP_Request2_Exception diff --git a/typo3/contrib/pear/HTTP/Request2/MultipartBody.php b/typo3/contrib/pear/HTTP/Request2/MultipartBody.php index 9e9a1780ba145729872956522ba8bf992d8631e1..198f563b67559bc726f9887774f4d2b10b6983fa 100644 --- a/typo3/contrib/pear/HTTP/Request2/MultipartBody.php +++ b/typo3/contrib/pear/HTTP/Request2/MultipartBody.php @@ -4,43 +4,23 @@ * * PHP version 5 * - * LICENSE: + * LICENSE * - * Copyright (c) 2008-2012, Alexey Borzov <avb@php.net> - * All rights reserved. + * This source file is subject to BSD 3-Clause License that is bundled + * with this package in the file LICENSE and available at the URL + * https://raw.github.com/pear/HTTP_Request2/trunk/docs/LICENSE * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * The names of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * @category HTTP - * @package HTTP_Request2 - * @author Alexey Borzov <avb@php.net> - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version SVN: $Id: MultipartBody.php 324415 2012-03-21 10:50:50Z avb $ - * @link http://pear.php.net/package/HTTP_Request2 + * @category HTTP + * @package HTTP_Request2 + * @author Alexey Borzov <avb@php.net> + * @copyright 2008-2014 Alexey Borzov <avb@php.net> + * @license http://opensource.org/licenses/BSD-3-Clause BSD 3-Clause License + * @link http://pear.php.net/package/HTTP_Request2 */ +/** Exception class for HTTP_Request2 package */ +require_once 'HTTP/Request2/Exception.php'; + /** * Class for building multipart/form-data request body * @@ -50,8 +30,8 @@ * @category HTTP * @package HTTP_Request2 * @author Alexey Borzov <avb@php.net> - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 2.1.1 + * @license http://opensource.org/licenses/BSD-3-Clause BSD 3-Clause License + * @version Release: 2.2.1 * @link http://pear.php.net/package/HTTP_Request2 * @link http://tools.ietf.org/html/rfc1867 */ @@ -167,6 +147,7 @@ class HTTP_Request2_MultipartBody * @param integer $length Number of bytes to read * * @return string Up to $length bytes of data, empty string if at end + * @throws HTTP_Request2_LogicException */ public function read($length) { @@ -194,9 +175,16 @@ class HTTP_Request2_MultipartBody $length -= min(strlen($header) - $this->_pos[1], $length); } $filePos = max(0, $this->_pos[1] - strlen($header)); - if ($length > 0 && $filePos < $this->_uploads[$pos]['size']) { - $ret .= fread($this->_uploads[$pos]['fp'], $length); - $length -= min($length, $this->_uploads[$pos]['size'] - $filePos); + if ($filePos < $this->_uploads[$pos]['size']) { + while ($length > 0 && !feof($this->_uploads[$pos]['fp'])) { + if (false === ($chunk = fread($this->_uploads[$pos]['fp'], $length))) { + throw new HTTP_Request2_LogicException( + 'Failed reading file upload', HTTP_Request2_Exception::READ_ERROR + ); + } + $ret .= $chunk; + $length -= strlen($chunk); + } } if ($length > 0) { $start = $this->_pos[1] + ($oldLength - $length) - diff --git a/typo3/contrib/pear/HTTP/Request2/Observer/Log.php b/typo3/contrib/pear/HTTP/Request2/Observer/Log.php index d83bcefb2372a30483620c638cbc9f1f13ba1372..96733de5ad3f408a8c0d64eb36d833ace7678851 100644 --- a/typo3/contrib/pear/HTTP/Request2/Observer/Log.php +++ b/typo3/contrib/pear/HTTP/Request2/Observer/Log.php @@ -4,42 +4,19 @@ * * PHP version 5 * - * LICENSE: + * LICENSE * - * Copyright (c) 2008-2012, Alexey Borzov <avb@php.net> - * All rights reserved. + * This source file is subject to BSD 3-Clause License that is bundled + * with this package in the file LICENSE and available at the URL + * https://raw.github.com/pear/HTTP_Request2/trunk/docs/LICENSE * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * The names of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * @category HTTP - * @package HTTP_Request2 - * @author David Jean Louis <izi@php.net> - * @author Alexey Borzov <avb@php.net> - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version SVN: $Id: Log.php 324415 2012-03-21 10:50:50Z avb $ - * @link http://pear.php.net/package/HTTP_Request2 + * @category HTTP + * @package HTTP_Request2 + * @author David Jean Louis <izi@php.net> + * @author Alexey Borzov <avb@php.net> + * @copyright 2008-2014 Alexey Borzov <avb@php.net> + * @license http://opensource.org/licenses/BSD-3-Clause BSD 3-Clause License + * @link http://pear.php.net/package/HTTP_Request2 */ /** @@ -86,8 +63,8 @@ require_once 'HTTP/Request2/Exception.php'; * @package HTTP_Request2 * @author David Jean Louis <izi@php.net> * @author Alexey Borzov <avb@php.net> - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 2.1.1 + * @license http://opensource.org/licenses/BSD-3-Clause BSD 3-Clause License + * @version Release: 2.2.1 * @link http://pear.php.net/package/HTTP_Request2 */ class HTTP_Request2_Observer_Log implements SplObserver diff --git a/typo3/contrib/pear/HTTP/Request2/Response.php b/typo3/contrib/pear/HTTP/Request2/Response.php index d26a61344e3828743cf47ca79b0a515111f7f4da..7acbeaa3d2e74d3cfac668a91144a761129c837b 100644 --- a/typo3/contrib/pear/HTTP/Request2/Response.php +++ b/typo3/contrib/pear/HTTP/Request2/Response.php @@ -4,41 +4,18 @@ * * PHP version 5 * - * LICENSE: + * LICENSE * - * Copyright (c) 2008-2012, Alexey Borzov <avb@php.net> - * All rights reserved. + * This source file is subject to BSD 3-Clause License that is bundled + * with this package in the file LICENSE and available at the URL + * https://raw.github.com/pear/HTTP_Request2/trunk/docs/LICENSE * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * The names of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * @category HTTP - * @package HTTP_Request2 - * @author Alexey Borzov <avb@php.net> - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version SVN: $Id: Response.php 324936 2012-04-07 07:49:03Z avb $ - * @link http://pear.php.net/package/HTTP_Request2 + * @category HTTP + * @package HTTP_Request2 + * @author Alexey Borzov <avb@php.net> + * @copyright 2008-2014 Alexey Borzov <avb@php.net> + * @license http://opensource.org/licenses/BSD-3-Clause BSD 3-Clause License + * @link http://pear.php.net/package/HTTP_Request2 */ /** @@ -69,8 +46,8 @@ require_once 'HTTP/Request2/Exception.php'; * @category HTTP * @package HTTP_Request2 * @author Alexey Borzov <avb@php.net> - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 2.1.1 + * @license http://opensource.org/licenses/BSD-3-Clause BSD 3-Clause License + * @version Release: 2.2.1 * @link http://pear.php.net/package/HTTP_Request2 * @link http://tools.ietf.org/html/rfc2616#section-6 */ diff --git a/typo3/contrib/pear/HTTP/Request2/SOCKS5.php b/typo3/contrib/pear/HTTP/Request2/SOCKS5.php index 50d8e94488c9fd1032de1e1d330226b9412174ed..0b86445c9bef521610c1e34a06e64348b3bb775c 100644 --- a/typo3/contrib/pear/HTTP/Request2/SOCKS5.php +++ b/typo3/contrib/pear/HTTP/Request2/SOCKS5.php @@ -4,41 +4,18 @@ * * PHP version 5 * - * LICENSE: + * LICENSE * - * Copyright (c) 2008-2012, Alexey Borzov <avb@php.net> - * All rights reserved. + * This source file is subject to BSD 3-Clause License that is bundled + * with this package in the file LICENSE and available at the URL + * https://raw.github.com/pear/HTTP_Request2/trunk/docs/LICENSE * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * The names of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * @category HTTP - * @package HTTP_Request2 - * @author Alexey Borzov <avb@php.net> - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version SVN: $Id: SOCKS5.php 324953 2012-04-08 07:24:12Z avb $ - * @link http://pear.php.net/package/HTTP_Request2 + * @category HTTP + * @package HTTP_Request2 + * @author Alexey Borzov <avb@php.net> + * @copyright 2008-2014 Alexey Borzov <avb@php.net> + * @license http://opensource.org/licenses/BSD-3-Clause BSD 3-Clause License + * @link http://pear.php.net/package/HTTP_Request2 */ /** Socket wrapper class used by Socket Adapter */ @@ -50,8 +27,8 @@ require_once 'HTTP/Request2/SocketWrapper.php'; * @category HTTP * @package HTTP_Request2 * @author Alexey Borzov <avb@php.net> - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 2.1.1 + * @license http://opensource.org/licenses/BSD-3-Clause BSD 3-Clause License + * @version Release: 2.2.1 * @link http://pear.php.net/package/HTTP_Request2 * @link http://pear.php.net/bugs/bug.php?id=19332 * @link http://tools.ietf.org/html/rfc1928 @@ -61,21 +38,21 @@ class HTTP_Request2_SOCKS5 extends HTTP_Request2_SocketWrapper /** * Constructor, tries to connect and authenticate to a SOCKS5 proxy * - * @param string $address Proxy address, e.g. 'tcp://localhost:1080' - * @param int $timeout Connection timeout (seconds) - * @param array $sslOptions SSL context options - * @param string $username Proxy user name - * @param string $password Proxy password + * @param string $address Proxy address, e.g. 'tcp://localhost:1080' + * @param int $timeout Connection timeout (seconds) + * @param array $contextOptions Stream context options + * @param string $username Proxy user name + * @param string $password Proxy password * * @throws HTTP_Request2_LogicException * @throws HTTP_Request2_ConnectionException * @throws HTTP_Request2_MessageException */ public function __construct( - $address, $timeout = 10, array $sslOptions = array(), + $address, $timeout = 10, array $contextOptions = array(), $username = null, $password = null ) { - parent::__construct($address, $timeout, $sslOptions); + parent::__construct($address, $timeout, $contextOptions); if (strlen($username)) { $request = pack('C4', 5, 2, 0, 2); diff --git a/typo3/contrib/pear/HTTP/Request2/SocketWrapper.php b/typo3/contrib/pear/HTTP/Request2/SocketWrapper.php index af129574701251f1895726726255772c4b03cb40..388c1b659faf3e482d68fe2a51a054be3e83e114 100644 --- a/typo3/contrib/pear/HTTP/Request2/SocketWrapper.php +++ b/typo3/contrib/pear/HTTP/Request2/SocketWrapper.php @@ -4,41 +4,18 @@ * * PHP version 5 * - * LICENSE: + * LICENSE * - * Copyright (c) 2008-2012, Alexey Borzov <avb@php.net> - * All rights reserved. + * This source file is subject to BSD 3-Clause License that is bundled + * with this package in the file LICENSE and available at the URL + * https://raw.github.com/pear/HTTP_Request2/trunk/docs/LICENSE * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * The names of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * @category HTTP - * @package HTTP_Request2 - * @author Alexey Borzov <avb@php.net> - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version SVN: $Id: SocketWrapper.php 324935 2012-04-07 07:10:50Z avb $ - * @link http://pear.php.net/package/HTTP_Request2 + * @category HTTP + * @package HTTP_Request2 + * @author Alexey Borzov <avb@php.net> + * @copyright 2008-2014 Alexey Borzov <avb@php.net> + * @license http://opensource.org/licenses/BSD-3-Clause BSD 3-Clause License + * @link http://pear.php.net/package/HTTP_Request2 */ /** Exception classes for HTTP_Request2 package */ @@ -53,8 +30,8 @@ require_once 'HTTP/Request2/Exception.php'; * @category HTTP * @package HTTP_Request2 * @author Alexey Borzov <avb@php.net> - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 2.1.1 + * @license http://opensource.org/licenses/BSD-3-Clause BSD 3-Clause License + * @version Release: 2.2.1 * @link http://pear.php.net/package/HTTP_Request2 * @link http://pear.php.net/bugs/bug.php?id=19332 * @link http://tools.ietf.org/html/rfc1928 @@ -88,22 +65,30 @@ class HTTP_Request2_SocketWrapper /** * Class constructor, tries to establish connection * - * @param string $address Address for stream_socket_client() call, - * e.g. 'tcp://localhost:80' - * @param int $timeout Connection timeout (seconds) - * @param array $sslOptions SSL context options + * @param string $address Address for stream_socket_client() call, + * e.g. 'tcp://localhost:80' + * @param int $timeout Connection timeout (seconds) + * @param array $contextOptions Context options * * @throws HTTP_Request2_LogicException * @throws HTTP_Request2_ConnectionException */ - public function __construct($address, $timeout, array $sslOptions = array()) + public function __construct($address, $timeout, array $contextOptions = array()) { + if (!empty($contextOptions) + && !isset($contextOptions['socket']) && !isset($contextOptions['ssl']) + ) { + // Backwards compatibility with 2.1.0 and 2.1.1 releases + $contextOptions = array('ssl' => $contextOptions); + } $context = stream_context_create(); - foreach ($sslOptions as $name => $value) { - if (!stream_context_set_option($context, 'ssl', $name, $value)) { - throw new HTTP_Request2_LogicException( - "Error setting SSL context option '{$name}'" - ); + foreach ($contextOptions as $wrapper => $options) { + foreach ($options as $name => $value) { + if (!stream_context_set_option($context, $wrapper, $name, $value)) { + throw new HTTP_Request2_LogicException( + "Error setting '{$wrapper}' wrapper context option '{$name}'" + ); + } } } set_error_handler(array($this, 'connectionWarningsHandler')); @@ -111,7 +96,14 @@ class HTTP_Request2_SocketWrapper $address, $errno, $errstr, $timeout, STREAM_CLIENT_CONNECT, $context ); restore_error_handler(); - if (!$this->socket) { + // if we fail to bind to a specified local address (see request #19515), + // connection still succeeds, albeit with a warning. Throw an Exception + // with the warning text in this case as that connection is unlikely + // to be what user wants and as Curl throws an error in similar case. + if ($this->connectionWarnings) { + if ($this->socket) { + fclose($this->socket); + } $error = $errstr ? $errstr : implode("\n", $this->connectionWarnings); throw new HTTP_Request2_ConnectionException( "Unable to connect to {$address}. Error: {$error}", 0, $errno @@ -151,20 +143,42 @@ class HTTP_Request2_SocketWrapper * Strips the trailing newline from the returned data, handles global * request timeout. Method idea borrowed from Net_Socket PEAR package. * - * @param int $bufferSize buffer size to use for reading + * @param int $bufferSize buffer size to use for reading + * @param int $localTimeout timeout value to use just for this call + * (used when waiting for "100 Continue" response) * * @return string Available data up to the newline (not including newline) * @throws HTTP_Request2_MessageException In case of timeout */ - public function readLine($bufferSize) + public function readLine($bufferSize, $localTimeout = null) { $line = ''; while (!feof($this->socket)) { - if ($this->deadline) { + if (null !== $localTimeout) { + stream_set_timeout($this->socket, $localTimeout); + } elseif ($this->deadline) { stream_set_timeout($this->socket, max($this->deadline - time(), 1)); } + $line .= @fgets($this->socket, $bufferSize); - $this->checkTimeout(); + + if (null === $localTimeout) { + $this->checkTimeout(); + + } else { + $info = stream_get_meta_data($this->socket); + // reset socket timeout if we don't have request timeout specified, + // prevents further calls failing with a bogus Exception + if (!$this->deadline) { + $default = (int)@ini_get('default_socket_timeout'); + stream_set_timeout($this->socket, $default > 0 ? $default : PHP_INT_MAX); + } + if ($info['timed_out']) { + throw new HTTP_Request2_MessageException( + "readLine() call timed out", HTTP_Request2_Exception::TIMEOUT + ); + } + } if (substr($line, -1) == "\n") { return rtrim($line, "\r\n"); } diff --git a/typo3/contrib/pear/Net/URL2.php b/typo3/contrib/pear/Net/URL2.php index 9989404d2abfecfb6a1b0bd8096102bbe150f954..aee1153d959555a08f81276b5b49e79b646d3871 100644 --- a/typo3/contrib/pear/Net/URL2.php +++ b/typo3/contrib/pear/Net/URL2.php @@ -38,9 +38,9 @@ * @package Net_URL2 * @author Christian Schmidt <schmidt@php.net> * @copyright 2007-2009 Peytz & Co. A/S - * @license http://www.opensource.org/licenses/bsd-license.php New BSD License - * @version CVS: $Id: URL2.php 309223 2011-03-14 14:26:32Z till $ - * @link http://www.rfc-editor.org/rfc/rfc3986.txt + * @license https://spdx.org/licenses/BSD-3-Clause BSD-3-Clause + * @version CVS: $Id$ + * @link https://tools.ietf.org/html/rfc3986 */ /** @@ -50,9 +50,9 @@ * @package Net_URL2 * @author Christian Schmidt <schmidt@php.net> * @copyright 2007-2009 Peytz & Co. A/S - * @license http://www.opensource.org/licenses/bsd-license.php New BSD License - * @version Release: @package_version@ - * @link http://pear.php.net/package/Net_URL2 + * @license https://spdx.org/licenses/BSD-3-Clause BSD-3-Clause + * @version Release: 2.1.0 + * @link https://pear.php.net/package/Net_URL2 */ class Net_URL2 { @@ -67,6 +67,12 @@ class Net_URL2 */ const OPTION_USE_BRACKETS = 'use_brackets'; + /** + * Drop zero-based integer sequences in query using PHP's [] notation. Default + * is true. + */ + const OPTION_DROP_SEQUENCE = 'drop_sequence'; + /** * URL-encode query variable keys. Default is true. */ @@ -90,6 +96,7 @@ class Net_URL2 private $_options = array( self::OPTION_STRICT => true, self::OPTION_USE_BRACKETS => true, + self::OPTION_DROP_SEQUENCE => true, self::OPTION_ENCODE_KEYS => true, self::OPTION_SEPARATOR_INPUT => '&', self::OPTION_SEPARATOR_OUTPUT => '&', @@ -136,7 +143,6 @@ class Net_URL2 * @param string $url an absolute or relative URL * @param array $options an array of OPTION_xxx constants * - * @return $this * @uses self::parseUrl() */ public function __construct($url, array $options = array()) @@ -156,8 +162,9 @@ class Net_URL2 * This method will magically set the value of a private variable ($var) * with the value passed as the args * - * @param string $var The private variable to set. - * @param mixed $arg An argument of any type. + * @param string $var The private variable to set. + * @param mixed $arg An argument of any type. + * * @return void */ public function __set($var, $arg) @@ -174,10 +181,11 @@ class Net_URL2 * This is the magic get method to retrieve the private variable * that was set by either __set() or it's setter... * - * @param string $var The property name to retrieve. - * @return mixed $this->$var Either a boolean false if the - * property is not set or the value - * of the private property. + * @param string $var The property name to retrieve. + * + * @return mixed $this->$var Either a boolean false if the + * property is not set or the value + * of the private property. */ public function __get($var) { @@ -193,7 +201,7 @@ class Net_URL2 * Returns the scheme, e.g. "http" or "urn", or false if there is no * scheme specified, i.e. if this is a relative URL. * - * @return string|bool + * @return string|bool */ public function getScheme() { @@ -209,7 +217,7 @@ class Net_URL2 * URL * * @return $this - * @see getScheme() + * @see getScheme */ public function setScheme($scheme) { @@ -221,12 +229,12 @@ class Net_URL2 * Returns the user part of the userinfo part (the part preceding the first * ":"), or false if there is no userinfo part. * - * @return string|bool + * @return string|bool */ public function getUser() { return $this->_userinfo !== false - ? preg_replace('@:.*$@', '', $this->_userinfo) + ? preg_replace('(:.*$)', '', $this->_userinfo) : false; } @@ -236,7 +244,7 @@ class Net_URL2 * contain "@" in front of the hostname) or the userinfo part does not * contain ":". * - * @return string|bool + * @return string|bool */ public function getPassword() { @@ -249,7 +257,7 @@ class Net_URL2 * Returns the userinfo part, or false if there is none, i.e. if the * authority part does not contain "@". * - * @return string|bool + * @return string|bool */ public function getUserinfo() { @@ -267,10 +275,15 @@ class Net_URL2 */ public function setUserinfo($userinfo, $password = false) { - $this->_userinfo = $userinfo; if ($password !== false) { - $this->_userinfo .= ':' . $password; + $userinfo .= ':' . $password; } + + if ($userinfo !== false) { + $userinfo = $this->_encodeData($userinfo); + } + + $this->_userinfo = $userinfo; return $this; } @@ -278,7 +291,7 @@ class Net_URL2 * Returns the host part, or false if there is no authority part, e.g. * relative URLs. * - * @return string|bool a hostname, an IP address, or false + * @return string|bool a hostname, an IP address, or false */ public function getHost() { @@ -303,7 +316,7 @@ class Net_URL2 * Returns the port number, or false if there is no port number specified, * i.e. if the default port is to be used. * - * @return string|bool + * @return string|bool */ public function getPort() { @@ -332,13 +345,13 @@ class Net_URL2 */ public function getAuthority() { - if (!$this->_host) { + if (false === $this->_host) { return false; } $authority = ''; - if ($this->_userinfo !== false) { + if (strlen($this->_userinfo)) { $authority .= $this->_userinfo . '@'; } @@ -355,7 +368,7 @@ class Net_URL2 * Sets the authority part, i.e. [ userinfo "@" ] host [ ":" port ]. Specify * false if there is no authority. * - * @param string|false $authority a hostname or an IP addresse, possibly + * @param string|bool $authority a hostname or an IP address, possibly * with userinfo prefixed and port number * appended, e.g. "foo:bar@example.org:81". * @@ -366,15 +379,24 @@ class Net_URL2 $this->_userinfo = false; $this->_host = false; $this->_port = false; - if (preg_match('@^(([^\@]*)\@)?([^:]+)(:(\d*))?$@', $authority, $reg)) { - if ($reg[1]) { - $this->_userinfo = $reg[2]; - } - $this->_host = $reg[3]; - if (isset($reg[5])) { - $this->_port = $reg[5]; - } + if ('' === $authority) { + $this->_host = $authority; + return $this; + } + + if (!preg_match('(^(([^\@]*)\@)?(.+?)(:(\d*))?$)', $authority, $matches)) { + return $this; + } + + if ($matches[1]) { + $this->_userinfo = $this->_encodeData($matches[2]); + } + + $this->_host = $matches[3]; + + if (isset($matches[5]) && strlen($matches[5])) { + $this->_port = $matches[5]; } return $this; } @@ -407,7 +429,7 @@ class Net_URL2 * is not present in the URL. * * @return string|bool - * @see self::getQueryVariables() + * @see getQueryVariables */ public function getQuery() { @@ -421,7 +443,7 @@ class Net_URL2 * @param string|bool $query a query string, e.g. "foo=1&bar=2" * * @return $this - * @see self::setQueryVariables() + * @see setQueryVariables */ public function setQuery($query) { @@ -432,7 +454,7 @@ class Net_URL2 /** * Returns the fragment name, or false if "#" is not present in the URL. * - * @return string|bool + * @return string|bool */ public function getFragment() { @@ -458,57 +480,165 @@ class Net_URL2 * $_GET in a PHP script. If the URL does not contain a "?", an empty array * is returned. * - * @return array + * @return array */ public function getQueryVariables() { - $pattern = '/[' . - preg_quote($this->getOption(self::OPTION_SEPARATOR_INPUT), '/') . - ']/'; - $parts = preg_split($pattern, $this->_query, -1, PREG_SPLIT_NO_EMPTY); + $separator = $this->getOption(self::OPTION_SEPARATOR_INPUT); + $encodeKeys = $this->getOption(self::OPTION_ENCODE_KEYS); + $useBrackets = $this->getOption(self::OPTION_USE_BRACKETS); + $return = array(); - foreach ($parts as $part) { - if (strpos($part, '=') !== false) { - list($key, $value) = explode('=', $part, 2); - } else { - $key = $part; - $value = null; - } + for ($part = strtok($this->_query, $separator); + strlen($part); + $part = strtok($separator) + ) { + list($key, $value) = explode('=', $part, 2) + array(1 => ''); - if ($this->getOption(self::OPTION_ENCODE_KEYS)) { + if ($encodeKeys) { $key = rawurldecode($key); } $value = rawurldecode($value); - if ($this->getOption(self::OPTION_USE_BRACKETS) && - preg_match('#^(.*)\[([0-9a-z_-]*)\]#i', $key, $matches)) { + if ($useBrackets) { + $return = $this->_queryArrayByKey($key, $value, $return); + } else { + if (isset($return[$key])) { + $return[$key] = (array) $return[$key]; + $return[$key][] = $value; + } else { + $return[$key] = $value; + } + } + } - $key = $matches[1]; - $idx = $matches[2]; + return $return; + } - // Ensure is an array - if (empty($return[$key]) || !is_array($return[$key])) { - $return[$key] = array(); - } + /** + * Parse a single query key=value pair into an existing php array + * + * @param string $key query-key + * @param string $value query-value + * @param array $array of existing query variables (if any) + * + * @return mixed + */ + private function _queryArrayByKey($key, $value, array $array = array()) + { + if (!strlen($key)) { + return $array; + } - // Add data - if ($idx === '') { - $return[$key][] = $value; - } else { - $return[$key][$idx] = $value; + $offset = $this->_queryKeyBracketOffset($key); + if ($offset === false) { + $name = $key; + } else { + $name = substr($key, 0, $offset); + } + + if (!strlen($name)) { + return $array; + } + + if (!$offset) { + // named value + $array[$name] = $value; + } else { + // array + $brackets = substr($key, $offset); + if (!isset($array[$name])) { + $array[$name] = null; + } + $array[$name] = $this->_queryArrayByBrackets( + $brackets, $value, $array[$name] + ); + } + + return $array; + } + + /** + * Parse a key-buffer to place value in array + * + * @param string $buffer to consume all keys from + * @param string $value to be set/add + * @param array $array to traverse and set/add value in + * + * @throws Exception + * @return array + */ + private function _queryArrayByBrackets($buffer, $value, array $array = null) + { + $entry = &$array; + + for ($iteration = 0; strlen($buffer); $iteration++) { + $open = $this->_queryKeyBracketOffset($buffer); + if ($open !== 0) { + // Opening bracket [ must exist at offset 0, if not, there is + // no bracket to parse and the value dropped. + // if this happens in the first iteration, this is flawed, see + // as well the second exception below. + if ($iteration) { + break; } - } elseif (!$this->getOption(self::OPTION_USE_BRACKETS) - && !empty($return[$key]) - ) { - $return[$key] = (array) $return[$key]; - $return[$key][] = $value; + // @codeCoverageIgnoreStart + throw new Exception( + 'Net_URL2 Internal Error: '. __METHOD__ .'(): ' . + 'Opening bracket [ must exist at offset 0' + ); + // @codeCoverageIgnoreEnd + } + + $close = strpos($buffer, ']', 1); + if (!$close) { + // this error condition should never be reached as this is a + // private method and bracket pairs are checked beforehand. + // See as well the first exception for the opening bracket. + // @codeCoverageIgnoreStart + throw new Exception( + 'Net_URL2 Internal Error: '. __METHOD__ .'(): ' . + 'Closing bracket ] must exist, not found' + ); + // @codeCoverageIgnoreEnd + } + + $index = substr($buffer, 1, $close - 1); + if (strlen($index)) { + $entry = &$entry[$index]; } else { - $return[$key] = $value; + if (!is_array($entry)) { + $entry = array(); + } + $entry[] = &$new; + $entry = &$new; + unset($new); } + $buffer = substr($buffer, $close + 1); } - return $return; + $entry = $value; + + return $array; + } + + /** + * Query-key has brackets ("...[]") + * + * @param string $key query-key + * + * @return bool|int offset of opening bracket, false if no brackets + */ + private function _queryKeyBracketOffset($key) + { + if (false !== $open = strpos($key, '[') + and false === strpos($key, ']', $open + 1) + ) { + $open = false; + } + + return $open; } /** @@ -548,7 +678,7 @@ class Net_URL2 } /** - * Removes the specifed variable from the query string. + * Removes the specified variable from the query string. * * @param string $name a query string variable, e.g. "foo" in "?foo=1" * @@ -564,22 +694,23 @@ class Net_URL2 /** * Returns a string representation of this URL. * - * @return string + * @return string */ public function getURL() { // See RFC 3986, section 5.3 - $url = ""; + $url = ''; if ($this->_scheme !== false) { $url .= $this->_scheme . ':'; } $authority = $this->getAuthority(); - if ($authority !== false) { - $url .= '//' . $authority; + if ($authority === false && strtolower($this->_scheme) === 'file') { + $authority = ''; } - $url .= $this->_path; + + $url .= $this->_buildAuthorityAndPath($authority, $this->_path); if ($this->_query !== false) { $url .= '?' . $this->_query; @@ -588,26 +719,46 @@ class Net_URL2 if ($this->_fragment !== false) { $url .= '#' . $this->_fragment; } - + return $url; } + /** + * Put authority and path together, wrapping authority + * into proper separators/terminators. + * + * @param string|bool $authority authority + * @param string $path path + * + * @return string + */ + private function _buildAuthorityAndPath($authority, $path) + { + if ($authority === false) { + return $path; + } + + $terminator = ($path !== '' && $path[0] !== '/') ? '/' : ''; + + return '//' . $authority . $terminator . $path; + } + /** * Returns a string representation of this URL. * - * @return string - * @see toString() + * @return string + * @link https://php.net/language.oop5.magic#object.tostring */ public function __toString() { return $this->getURL(); } - /** + /** * Returns a normalized string representation of this URL. This is useful * for comparison of URLs. * - * @return string + * @return string */ public function getNormalizedURL() { @@ -616,55 +767,102 @@ class Net_URL2 return $url->getUrl(); } - /** - * Returns a normalized Net_URL2 instance. + /** + * Normalizes the URL * - * @return Net_URL2 + * See RFC 3986, Section 6. Normalization and Comparison + * + * @link https://tools.ietf.org/html/rfc3986#section-6 + * + * @return void */ public function normalize() { - // See RFC 3886, section 6 + // See RFC 3986, section 6 - // Schemes are case-insensitive + // Scheme is case-insensitive if ($this->_scheme) { $this->_scheme = strtolower($this->_scheme); } - // Hostnames are case-insensitive + // Hostname is case-insensitive if ($this->_host) { $this->_host = strtolower($this->_host); } // Remove default port number for known schemes (RFC 3986, section 6.2.3) - if ($this->_port && - $this->_scheme && - $this->_port == getservbyname($this->_scheme, 'tcp')) { - + if ('' === $this->_port + || $this->_port + && $this->_scheme + && $this->_port == getservbyname($this->_scheme, 'tcp') + ) { $this->_port = false; } // Normalize case of %XX percentage-encodings (RFC 3986, section 6.2.2.1) - foreach (array('_userinfo', '_host', '_path') as $part) { - if ($this->$part) { - $this->$part = preg_replace('/%[0-9a-f]{2}/ie', - 'strtoupper("\0")', - $this->$part); + // Normalize percentage-encoded unreserved characters (section 6.2.2.2) + $fields = array(&$this->_userinfo, &$this->_host, &$this->_path); + foreach ($fields as &$field) { + if ($field !== false) { + $field = $this->_normalize("$field"); } } + unset($field); // Path segment normalization (RFC 3986, section 6.2.2.3) $this->_path = self::removeDotSegments($this->_path); // Scheme based normalization (RFC 3986, section 6.2.3) - if ($this->_host && !$this->_path) { + if (false !== $this->_host && '' === $this->_path) { $this->_path = '/'; } + + // path should start with '/' if there is authority (section 3.3.) + if (strlen($this->getAuthority()) + && strlen($this->_path) + && $this->_path[0] !== '/' + ) { + $this->_path = '/' . $this->_path; + } + } + + /** + * Normalize case of %XX percentage-encodings (RFC 3986, section 6.2.2.1) + * Normalize percentage-encoded unreserved characters (section 6.2.2.2) + * + * @param string|array $mixed string or array of strings to normalize + * + * @return string|array + * @see normalize + * @see _normalizeCallback() + */ + private function _normalize($mixed) + { + return preg_replace_callback( + '((?:%[0-9a-fA-Z]{2})+)', array($this, '_normalizeCallback'), + $mixed + ); + } + + /** + * Callback for _normalize() of %XX percentage-encodings + * + * @param array $matches as by preg_replace_callback + * + * @return string + * @see normalize + * @see _normalize + * @SuppressWarnings(PHPMD.UnusedPrivateMethod) + */ + private function _normalizeCallback($matches) + { + return self::urlencode(urldecode($matches[0])); } /** * Returns whether this instance represents an absolute URL. * - * @return bool + * @return bool */ public function isAbsolute() { @@ -677,20 +875,25 @@ class Net_URL2 * * @param Net_URL2|string $reference relative URL * - * @return Net_URL2 + * @throws Exception + * @return $this */ public function resolve($reference) { if (!$reference instanceof Net_URL2) { $reference = new self($reference); } - if (!$this->isAbsolute()) { - throw new Exception('Base-URL must be absolute'); + if (!$reference->_isFragmentOnly() && !$this->isAbsolute()) { + throw new Exception( + 'Base-URL must be absolute if reference is not fragment-only' + ); } // A non-strict parser may ignore a scheme in the reference if it is // identical to the base URI's scheme. - if (!$this->getOption(self::OPTION_STRICT) && $reference->_scheme == $this->_scheme) { + if (!$this->getOption(self::OPTION_STRICT) + && $reference->_scheme == $this->_scheme + ) { $reference->_scheme = false; } @@ -720,7 +923,7 @@ class Net_URL2 } else { // Merge paths (RFC 3986, section 5.2.3) if ($this->_host !== false && $this->_path == '') { - $target->_path = '/' . $this->_path; + $target->_path = '/' . $reference->_path; } else { $i = strrpos($this->_path, '/'); if ($i !== false) { @@ -742,6 +945,25 @@ class Net_URL2 return $target; } + /** + * URL is fragment-only + * + * @SuppressWarnings(PHPMD.UnusedPrivateMethod) + * @return bool + */ + private function _isFragmentOnly() + { + return ( + $this->_fragment !== false + && $this->_query === false + && $this->_path === '' + && $this->_port === false + && $this->_host === false + && $this->_userinfo === false + && $this->_scheme === false + ); + } + /** * Removes dots as described in RFC 3986, section 5.2.4, e.g. * "/foo/../bar/baz" => "/bar/baz" @@ -752,43 +974,52 @@ class Net_URL2 */ public static function removeDotSegments($path) { + $path = (string) $path; $output = ''; // Make sure not to be trapped in an infinite loop due to a bug in this // method + $loopLimit = 256; $j = 0; - while ($path && $j++ < 100) { - if (substr($path, 0, 2) == './') { + while ('' !== $path && $j++ < $loopLimit) { + if (substr($path, 0, 2) === './') { // Step 2.A $path = substr($path, 2); - } elseif (substr($path, 0, 3) == '../') { + } elseif (substr($path, 0, 3) === '../') { // Step 2.A $path = substr($path, 3); - } elseif (substr($path, 0, 3) == '/./' || $path == '/.') { + } elseif (substr($path, 0, 3) === '/./' || $path === '/.') { // Step 2.B $path = '/' . substr($path, 3); - } elseif (substr($path, 0, 4) == '/../' || $path == '/..') { + } elseif (substr($path, 0, 4) === '/../' || $path === '/..') { // Step 2.C $path = '/' . substr($path, 4); $i = strrpos($output, '/'); $output = $i === false ? '' : substr($output, 0, $i); - } elseif ($path == '.' || $path == '..') { + } elseif ($path === '.' || $path === '..') { // Step 2.D $path = ''; } else { // Step 2.E - $i = strpos($path, '/'); - if ($i === 0) { - $i = strpos($path, '/', 1); - } + $i = strpos($path, '/', $path[0] === '/'); if ($i === false) { - $i = strlen($path); + $output .= $path; + $path = ''; + break; } $output .= substr($path, 0, $i); $path = substr($path, $i); } } + if ($path !== '') { + $message = sprintf( + 'Unable to remove dot segments; hit loop limit %d (left: %s)', + $j, var_export($path, true) + ); + trigger_error($message, E_USER_WARNING); + } + return $output; } @@ -797,12 +1028,13 @@ class Net_URL2 * Similar to PHP's rawurlencode(), except that it also encodes ~ in PHP * 5.2.x and earlier. * - * @param $raw the string to encode + * @param string $string string to encode + * * @return string */ public static function urlencode($string) { - $encoded = rawurlencode($string); + $encoded = rawurlencode($string); // This is only necessary in PHP < 5.3. $encoded = str_replace('%7E', '~', $encoded); @@ -813,7 +1045,8 @@ class Net_URL2 * Returns a Net_URL2 instance representing the canonical URL of the * currently executing PHP script. * - * @return string + * @throws Exception + * @return string */ public static function getCanonical() { @@ -827,9 +1060,9 @@ class Net_URL2 $url->_scheme = isset($_SERVER['HTTPS']) ? 'https' : 'http'; $url->_host = $_SERVER['SERVER_NAME']; $port = $_SERVER['SERVER_PORT']; - if ($url->_scheme == 'http' && $port != 80 || - $url->_scheme == 'https' && $port != 443) { - + if ($url->_scheme == 'http' && $port != 80 + || $url->_scheme == 'https' && $port != 443 + ) { $url->_port = $port; } return $url; @@ -849,7 +1082,8 @@ class Net_URL2 * Returns a Net_URL2 instance representing the URL used to retrieve the * current request. * - * @return Net_URL2 + * @throws Exception + * @return $this */ public static function getRequested() { @@ -871,7 +1105,7 @@ class Net_URL2 * * @param string $optionName The name of the option to retrieve * - * @return mixed + * @return mixed */ public function getOption($optionName) { @@ -885,7 +1119,7 @@ class Net_URL2 * * @param array $data An array, which has to be converted into * QUERY_STRING. Anything is possible. - * @param string $seperator See {@link self::OPTION_SEPARATOR_OUTPUT} + * @param string $separator Separator {@link self::OPTION_SEPARATOR_OUTPUT} * @param string $key For stacked values (arrays in an array). * * @return string @@ -893,12 +1127,17 @@ class Net_URL2 protected function buildQuery(array $data, $separator, $key = null) { $query = array(); + $drop_names = ( + $this->_options[self::OPTION_DROP_SEQUENCE] === true + && array_keys($data) === array_keys(array_values($data)) + ); foreach ($data as $name => $value) { if ($this->getOption(self::OPTION_ENCODE_KEYS) === true) { $name = rawurlencode($name); } if ($key !== null) { if ($this->getOption(self::OPTION_USE_BRACKETS) === true) { + $drop_names && $name = ''; $name = $key . '[' . $name . ']'; } else { $name = $key; @@ -914,29 +1153,66 @@ class Net_URL2 } /** - * This method uses a funky regex to parse the url into the designated parts. + * This method uses a regex to parse the url into the designated parts. * - * @param string $url + * @param string $url URL * * @return void * @uses self::$_scheme, self::setAuthority(), self::$_path, self::$_query, * self::$_fragment - * @see self::__construct() + * @see __construct */ protected function parseUrl($url) { // The regular expression is copied verbatim from RFC 3986, appendix B. // The expression does not validate the URL but matches any string. - preg_match('!^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?!', - $url, - $matches); + preg_match( + '(^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?)', + $url, $matches + ); // "path" is always present (possibly as an empty string); the rest // are optional. $this->_scheme = !empty($matches[1]) ? $matches[2] : false; $this->setAuthority(!empty($matches[3]) ? $matches[4] : false); - $this->_path = $matches[5]; - $this->_query = !empty($matches[6]) ? $matches[7] : false; + $this->_path = $this->_encodeData($matches[5]); + $this->_query = !empty($matches[6]) + ? $this->_encodeData($matches[7]) + : false + ; $this->_fragment = !empty($matches[8]) ? $matches[9] : false; } + + /** + * Encode characters that might have been forgotten to encode when passing + * in an URL. Applied onto Userinfo, Path and Query. + * + * @param string $url URL + * + * @return string + * @see parseUrl + * @see setAuthority + * @link https://pear.php.net/bugs/bug.php?id=20425 + */ + private function _encodeData($url) + { + return preg_replace_callback( + '([\x-\x20\x22\x3C\x3E\x7F-\xFF]+)', + array($this, '_encodeCallback'), $url + ); + } + + /** + * callback for encoding character data + * + * @param array $matches Matches + * + * @return string + * @see _encodeData + * @SuppressWarnings(PHPMD.UnusedPrivateMethod) + */ + private function _encodeCallback(array $matches) + { + return rawurlencode($matches[0]); + } } diff --git a/typo3/contrib/pear/PEAR/Exception.php b/typo3/contrib/pear/PEAR/Exception.php index ef1cfe20e7aba31704012d25e926614ba6bf1209..2990cb612a2527c5e7e7dce1b35fb58be6370bcd 100644 --- a/typo3/contrib/pear/PEAR/Exception.php +++ b/typo3/contrib/pear/PEAR/Exception.php @@ -13,7 +13,7 @@ * @author Greg Beaver <cellog@php.net> * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version CVS: $Id: Exception.php 313023 2011-07-06 19:17:11Z dufuz $ + * @version CVS: $Id$ * @link http://pear.php.net/package/PEAR * @since File available since Release 1.3.3 */ @@ -89,7 +89,7 @@ * @author Greg Beaver <cellog@php.net> * @copyright 1997-2009 The Authors * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.9.4 + * @version Release: 1.9.5 * @link http://pear.php.net/package/PEAR * @since Class available since Release 1.3.3 * @@ -386,5 +386,4 @@ class PEAR_Exception extends Exception } return $causeMsg . $this->getTraceAsString(); } -} -?> \ No newline at end of file +} \ No newline at end of file diff --git a/typo3/contrib/pear/data/public-suffix-list.php b/typo3/contrib/pear/data/public-suffix-list.php index d5df48da32d3f8320943233d6bcbe7705baedb4f..af92733011b3e1705fd502b17660cfe4492e6d55 100644 --- a/typo3/contrib/pear/data/public-suffix-list.php +++ b/typo3/contrib/pear/data/public-suffix-list.php @@ -1,45 +1,7 @@ <?php -// ***** BEGIN LICENSE BLOCK ***** -// Version: MPL 1.1/GPL 2.0/LGPL 2.1 -// -// The contents of this file are subject to the Mozilla Public License Version -// 1.1 (the "License"); you may not use this file except in compliance with -// the License. You may obtain a copy of the License at -// http://www.mozilla.org/MPL/ -// -// Software distributed under the License is distributed on an "AS IS" basis, -// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License -// for the specific language governing rights and limitations under the -// License. -// -// The Original Code is the Public Suffix List. -// -// The Initial Developer of the Original Code is -// Jo Hermans <jo.hermans@gmail.com>. -// Portions created by the Initial Developer are Copyright (C) 2007 -// the Initial Developer. All Rights Reserved. -// -// Contributor(s): -// Ruben Arakelyan <ruben@rubenarakelyan.com> -// Gervase Markham <gerv@gerv.net> -// Pamela Greene <pamg.bugs@gmail.com> -// David Triendl <david@triendl.name> -// Jothan Frakes <jothan@gmail.com> -// The kind representatives of many TLD registries -// -// Alternatively, the contents of this file may be used under the terms of -// either the GNU General Public License Version 2 or later (the "GPL"), or -// the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), -// in which case the provisions of the GPL or the LGPL are applicable instead -// of those above. If you wish to allow use of your version of this file only -// under the terms of either the GPL or the LGPL, and not to allow others to -// use your version of this file under the terms of the MPL, indicate your -// decision by deleting the provisions above and replace them with the notice -// and other provisions required by the GPL or the LGPL. If you do not delete -// the provisions above, a recipient may use your version of this file under -// the terms of any one of the MPL, the GPL or the LGPL. -// -// ***** END LICENSE BLOCK ***** +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. return array( 'ac' => array( @@ -198,16 +160,16 @@ return array( ), 'aq' => true, 'ar' => array( - '*' => true, - '!congresodelalengua3' => true, - '!educ' => true, - '!gobiernoelectronico' => true, - '!mecon' => true, - '!nacion' => true, - '!nic' => true, - '!promocion' => true, - '!retina' => true, - '!uba' => true + 'com' => array( + 'blogspot' => true + ), + 'edu' => true, + 'gob' => true, + 'int' => true, + 'mil' => true, + 'net' => true, + 'org' => true, + 'tur' => true ), 'arpa' => array( 'e164' => true, @@ -223,7 +185,9 @@ return array( 'asia' => true, 'at' => array( 'ac' => true, - 'co' => true, + 'co' => array( + 'blogspot' => true + ), 'gv' => true, 'or' => true, 'biz' => true, @@ -231,7 +195,9 @@ return array( 'priv' => true ), 'au' => array( - 'com' => true, + 'com' => array( + 'blogspot' => true + ), 'net' => true, 'org' => true, 'edu' => array( @@ -246,16 +212,15 @@ return array( ), 'gov' => array( 'act' => true, - 'nt' => true, 'qld' => true, 'sa' => true, 'tas' => true, 'vic' => true, 'wa' => true ), - 'csiro' => true, 'asn' => true, 'id' => true, + 'csiro' => true, 'info' => true, 'conf' => true, 'oz' => true, @@ -312,7 +277,8 @@ return array( '*' => true ), 'be' => array( - 'ac' => true + 'ac' => true, + 'blogspot' => true ), 'bf' => array( 'gov' => true @@ -381,7 +347,8 @@ return array( 'bj' => array( 'asso' => true, 'barreau' => true, - 'gouv' => true + 'gouv' => true, + 'blogspot' => true ), 'bm' => array( 'com' => true, @@ -416,13 +383,15 @@ return array( 'bio' => true, 'blog' => true, 'bmd' => true, - 'can' => true, 'cim' => true, 'cng' => true, 'cnt' => true, - 'com' => true, + 'com' => array( + 'blogspot' => true + ), 'coop' => true, 'ecn' => true, + 'eco' => true, 'edu' => true, 'emp' => true, 'eng' => true, @@ -443,6 +412,7 @@ return array( 'inf' => true, 'jor' => true, 'jus' => true, + 'leg' => true, 'lel' => true, 'mat' => true, 'med' => true, @@ -488,6 +458,7 @@ return array( 'net' => true, 'org' => true ), + 'bv' => true, 'bw' => array( 'co' => true, 'org' => true @@ -521,7 +492,8 @@ return array( 'sk' => true, 'yk' => true, 'gc' => true, - 'co' => true + 'co' => true, + 'blogspot' => true ), 'cat' => true, 'cc' => array( @@ -533,9 +505,13 @@ return array( 'cd' => array( 'gov' => true ), - 'cf' => true, + 'cf' => array( + 'blogspot' => true + ), 'cg' => true, - 'ch' => true, + 'ch' => array( + 'blogspot' => true + ), 'ci' => array( 'org' => true, 'or' => true, @@ -628,6 +604,45 @@ return array( 'web' => true ), 'com' => array( + 'amazonaws' => array( + 'compute' => array( + 'ap-northeast-1' => true, + 'ap-southeast-1' => true, + 'ap-southeast-2' => true, + 'eu-west-1' => true, + 'sa-east-1' => true, + 'us-gov-west-1' => true, + 'us-west-1' => true, + 'us-west-2' => true + ), + 'us-east-1' => true, + 'compute-1' => array( + 'z-1' => true, + 'z-2' => true + ), + 'elb' => true, + 's3' => true, + 's3-us-west-2' => true, + 's3-us-west-1' => true, + 's3-eu-west-1' => true, + 's3-ap-southeast-1' => true, + 's3-ap-southeast-2' => true, + 's3-ap-northeast-1' => true, + 's3-sa-east-1' => true, + 's3-us-gov-west-1' => true, + 's3-fips-us-gov-west-1' => true, + 's3-website-us-east-1' => true, + 's3-website-us-west-2' => true, + 's3-website-us-west-1' => true, + 's3-website-eu-west-1' => true, + 's3-website-ap-southeast-1' => true, + 's3-website-ap-southeast-2' => true, + 's3-website-ap-northeast-1' => true, + 's3-website-sa-east-1' => true, + 's3-website-us-gov-west-1' => true + ), + 'elasticbeanstalk' => true, + 'betainabox' => true, 'ar' => true, 'br' => true, 'cn' => true, @@ -647,8 +662,9 @@ return array( 'us' => true, 'uy' => true, 'za' => true, - 'operaunite' => true, - 'appspot' => true, + 'cloudcontrolled' => true, + 'cloudcontrolapp' => true, + 'dreamhosters' => true, 'dyndns-at-home' => true, 'dyndns-at-work' => true, 'dyndns-blog' => true, @@ -798,7 +814,17 @@ return array( 'simple-url' => true, 'space-to-rent' => true, 'teaches-yoga' => true, - 'writesthisblog' => true + 'writesthisblog' => true, + 'ro' => true, + 'appspot' => true, + 'blogspot' => true, + 'codespot' => true, + 'googleapis' => true, + 'googlecode' => true, + 'herokuapp' => true, + 'herokussl' => true, + 'operaunite' => true, + 'rhcloud' => true ), 'coop' => true, 'cr' => array( @@ -818,7 +844,15 @@ return array( 'gov' => true, 'inf' => true ), - 'cv' => true, + 'cv' => array( + 'blogspot' => true + ), + 'cw' => array( + 'com' => true, + 'edu' => true, + 'net' => true, + 'org' => true + ), 'cx' => array( 'gov' => true, 'ath' => true @@ -826,7 +860,9 @@ return array( 'cy' => array( '*' => true ), - 'cz' => true, + 'cz' => array( + 'blogspot' => true + ), 'de' => array( 'com' => true, 'fuettertdasnetz' => true, @@ -834,10 +870,13 @@ return array( 'istmein' => true, 'lebtimnetz' => true, 'leitungsen' => true, - 'traeumtgerade' => true + 'traeumtgerade' => true, + 'blogspot' => true ), 'dj' => true, - 'dk' => true, + 'dk' => array( + 'blogspot' => true + ), 'dm' => array( 'com' => true, 'net' => true, @@ -909,7 +948,9 @@ return array( '*' => true ), 'es' => array( - 'com' => true, + 'com' => array( + 'blogspot' => true + ), 'nom' => true, 'org' => true, 'gob' => true, @@ -921,6 +962,7 @@ return array( 'eu' => true, 'fi' => array( 'aland' => true, + 'blogspot' => true, 'iki' => true ), 'fj' => array( @@ -954,9 +996,11 @@ return array( 'notaires' => true, 'pharmacien' => true, 'port' => true, - 'veterinaire' => true + 'veterinaire' => true, + 'blogspot' => true ), 'ga' => true, + 'gb' => true, 'gd' => true, 'ge' => array( 'com' => true, @@ -970,10 +1014,8 @@ return array( 'gf' => true, 'gg' => array( 'co' => true, - 'org' => true, 'net' => true, - 'sch' => true, - 'gov' => true + 'org' => true ), 'gh' => array( 'com' => true, @@ -1015,12 +1057,18 @@ return array( 'edu' => true, 'net' => true, 'org' => true, - 'gov' => true + 'gov' => true, + 'blogspot' => true ), 'gs' => true, 'gt' => array( - '*' => true, - '!www' => true + 'com' => true, + 'edu' => true, + 'gob' => true, + 'ind' => true, + 'mil' => true, + 'net' => true, + 'org' => true ), 'gu' => array( '*' => true @@ -1052,7 +1100,8 @@ return array( '网絡' => true, '组织' => true, '組織' => true, - '組织' => true + '組织' => true, + 'blogspot' => true ), 'hm' => true, 'hn' => array( @@ -1119,34 +1168,42 @@ return array( 'szex' => true, 'tozsde' => true, 'utazas' => true, - 'video' => true + 'video' => true, + 'blogspot' => true ), 'id' => array( 'ac' => true, + 'biz' => true, 'co' => true, 'go' => true, 'mil' => true, + 'my' => true, 'net' => true, 'or' => true, 'sch' => true, 'web' => true ), 'ie' => array( - 'gov' => true + 'gov' => true, + 'blogspot' => true ), 'il' => array( - '*' => true + '*' => true, + 'co' => array( + 'blogspot' => true + ) ), 'im' => array( + 'ac' => true, 'co' => array( 'ltd' => true, 'plc' => true ), + 'com' => true, 'net' => true, - 'gov' => true, 'org' => true, - 'nic' => true, - 'ac' => true + 'tt' => true, + 'tv' => true ), 'in' => array( 'co' => true, @@ -1160,7 +1217,8 @@ return array( 'edu' => true, 'res' => true, 'gov' => true, - 'mil' => true + 'mil' => true, + 'blogspot' => true ), 'info' => array( 'dyndns' => true, @@ -1178,7 +1236,8 @@ return array( 'eu' => true ), 'io' => array( - 'com' => true + 'com' => true, + 'github' => true ), 'iq' => array( 'gov' => true, @@ -1205,7 +1264,8 @@ return array( 'edu' => true, 'gov' => true, 'org' => true, - 'int' => true + 'int' => true, + 'cupcake' => true ), 'it' => array( 'gov' => true, @@ -1484,14 +1544,13 @@ return array( 'vicenza' => true, 'vi' => true, 'viterbo' => true, - 'vt' => true + 'vt' => true, + 'blogspot' => true ), 'je' => array( 'co' => true, - 'org' => true, 'net' => true, - 'sch' => true, - 'gov' => true + 'org' => true ), 'jm' => array( '*' => true @@ -1518,230 +1577,1807 @@ return array( 'ne' => true, 'or' => true, 'aichi' => array( - '*' => true, - '!pref' => true + 'aisai' => true, + 'ama' => true, + 'anjo' => true, + 'asuke' => true, + 'chiryu' => true, + 'chita' => true, + 'fuso' => true, + 'gamagori' => true, + 'handa' => true, + 'hazu' => true, + 'hekinan' => true, + 'higashiura' => true, + 'ichinomiya' => true, + 'inazawa' => true, + 'inuyama' => true, + 'isshiki' => true, + 'iwakura' => true, + 'kanie' => true, + 'kariya' => true, + 'kasugai' => true, + 'kira' => true, + 'kiyosu' => true, + 'komaki' => true, + 'konan' => true, + 'kota' => true, + 'mihama' => true, + 'miyoshi' => true, + 'nagakute' => true, + 'nishio' => true, + 'nisshin' => true, + 'obu' => true, + 'oguchi' => true, + 'oharu' => true, + 'okazaki' => true, + 'owariasahi' => true, + 'seto' => true, + 'shikatsu' => true, + 'shinshiro' => true, + 'shitara' => true, + 'tahara' => true, + 'takahama' => true, + 'tobishima' => true, + 'toei' => true, + 'togo' => true, + 'tokai' => true, + 'tokoname' => true, + 'toyoake' => true, + 'toyohashi' => true, + 'toyokawa' => true, + 'toyone' => true, + 'toyota' => true, + 'tsushima' => true, + 'yatomi' => true ), 'akita' => array( - '*' => true, - '!pref' => true + 'akita' => true, + 'daisen' => true, + 'fujisato' => true, + 'gojome' => true, + 'hachirogata' => true, + 'happou' => true, + 'higashinaruse' => true, + 'honjo' => true, + 'honjyo' => true, + 'ikawa' => true, + 'kamikoani' => true, + 'kamioka' => true, + 'katagami' => true, + 'kazuno' => true, + 'kitaakita' => true, + 'kosaka' => true, + 'kyowa' => true, + 'misato' => true, + 'mitane' => true, + 'moriyoshi' => true, + 'nikaho' => true, + 'noshiro' => true, + 'odate' => true, + 'oga' => true, + 'ogata' => true, + 'semboku' => true, + 'yokote' => true, + 'yurihonjo' => true ), 'aomori' => array( - '*' => true, - '!pref' => true + 'aomori' => true, + 'gonohe' => true, + 'hachinohe' => true, + 'hashikami' => true, + 'hiranai' => true, + 'hirosaki' => true, + 'itayanagi' => true, + 'kuroishi' => true, + 'misawa' => true, + 'mutsu' => true, + 'nakadomari' => true, + 'noheji' => true, + 'oirase' => true, + 'owani' => true, + 'rokunohe' => true, + 'sannohe' => true, + 'shichinohe' => true, + 'shingo' => true, + 'takko' => true, + 'towada' => true, + 'tsugaru' => true, + 'tsuruta' => true ), 'chiba' => array( - '*' => true, - '!pref' => true, - '!city' => true + 'abiko' => true, + 'asahi' => true, + 'chonan' => true, + 'chosei' => true, + 'choshi' => true, + 'chuo' => true, + 'funabashi' => true, + 'futtsu' => true, + 'hanamigawa' => true, + 'ichihara' => true, + 'ichikawa' => true, + 'ichinomiya' => true, + 'inzai' => true, + 'isumi' => true, + 'kamagaya' => true, + 'kamogawa' => true, + 'kashiwa' => true, + 'katori' => true, + 'katsuura' => true, + 'kimitsu' => true, + 'kisarazu' => true, + 'kozaki' => true, + 'kujukuri' => true, + 'kyonan' => true, + 'matsudo' => true, + 'midori' => true, + 'mihama' => true, + 'minamiboso' => true, + 'mobara' => true, + 'mutsuzawa' => true, + 'nagara' => true, + 'nagareyama' => true, + 'narashino' => true, + 'narita' => true, + 'noda' => true, + 'oamishirasato' => true, + 'omigawa' => true, + 'onjuku' => true, + 'otaki' => true, + 'sakae' => true, + 'sakura' => true, + 'shimofusa' => true, + 'shirako' => true, + 'shiroi' => true, + 'shisui' => true, + 'sodegaura' => true, + 'sosa' => true, + 'tako' => true, + 'tateyama' => true, + 'togane' => true, + 'tohnosho' => true, + 'tomisato' => true, + 'urayasu' => true, + 'yachimata' => true, + 'yachiyo' => true, + 'yokaichiba' => true, + 'yokoshibahikari' => true, + 'yotsukaido' => true ), 'ehime' => array( - '*' => true, - '!pref' => true + 'ainan' => true, + 'honai' => true, + 'ikata' => true, + 'imabari' => true, + 'iyo' => true, + 'kamijima' => true, + 'kihoku' => true, + 'kumakogen' => true, + 'masaki' => true, + 'matsuno' => true, + 'matsuyama' => true, + 'namikata' => true, + 'niihama' => true, + 'ozu' => true, + 'saijo' => true, + 'seiyo' => true, + 'shikokuchuo' => true, + 'tobe' => true, + 'toon' => true, + 'uchiko' => true, + 'uwajima' => true, + 'yawatahama' => true ), 'fukui' => array( - '*' => true, - '!pref' => true + 'echizen' => true, + 'eiheiji' => true, + 'fukui' => true, + 'ikeda' => true, + 'katsuyama' => true, + 'mihama' => true, + 'minamiechizen' => true, + 'obama' => true, + 'ohi' => true, + 'ono' => true, + 'sabae' => true, + 'sakai' => true, + 'takahama' => true, + 'tsuruga' => true, + 'wakasa' => true ), 'fukuoka' => array( - '*' => true, - '!pref' => true, - '!city' => true + 'ashiya' => true, + 'buzen' => true, + 'chikugo' => true, + 'chikuho' => true, + 'chikujo' => true, + 'chikushino' => true, + 'chikuzen' => true, + 'chuo' => true, + 'dazaifu' => true, + 'fukuchi' => true, + 'hakata' => true, + 'higashi' => true, + 'hirokawa' => true, + 'hisayama' => true, + 'iizuka' => true, + 'inatsuki' => true, + 'kaho' => true, + 'kasuga' => true, + 'kasuya' => true, + 'kawara' => true, + 'keisen' => true, + 'koga' => true, + 'kurate' => true, + 'kurogi' => true, + 'kurume' => true, + 'minami' => true, + 'miyako' => true, + 'miyama' => true, + 'miyawaka' => true, + 'mizumaki' => true, + 'munakata' => true, + 'nakagawa' => true, + 'nakama' => true, + 'nishi' => true, + 'nogata' => true, + 'ogori' => true, + 'okagaki' => true, + 'okawa' => true, + 'oki' => true, + 'omuta' => true, + 'onga' => true, + 'onojo' => true, + 'oto' => true, + 'saigawa' => true, + 'sasaguri' => true, + 'shingu' => true, + 'shinyoshitomi' => true, + 'shonai' => true, + 'soeda' => true, + 'sue' => true, + 'tachiarai' => true, + 'tagawa' => true, + 'takata' => true, + 'toho' => true, + 'toyotsu' => true, + 'tsuiki' => true, + 'ukiha' => true, + 'umi' => true, + 'usui' => true, + 'yamada' => true, + 'yame' => true, + 'yanagawa' => true, + 'yukuhashi' => true ), 'fukushima' => array( - '*' => true, - '!pref' => true + 'aizubange' => true, + 'aizumisato' => true, + 'aizuwakamatsu' => true, + 'asakawa' => true, + 'bandai' => true, + 'date' => true, + 'fukushima' => true, + 'furudono' => true, + 'futaba' => true, + 'hanawa' => true, + 'higashi' => true, + 'hirata' => true, + 'hirono' => true, + 'iitate' => true, + 'inawashiro' => true, + 'ishikawa' => true, + 'iwaki' => true, + 'izumizaki' => true, + 'kagamiishi' => true, + 'kaneyama' => true, + 'kawamata' => true, + 'kitakata' => true, + 'kitashiobara' => true, + 'koori' => true, + 'koriyama' => true, + 'kunimi' => true, + 'miharu' => true, + 'mishima' => true, + 'namie' => true, + 'nango' => true, + 'nishiaizu' => true, + 'nishigo' => true, + 'okuma' => true, + 'omotego' => true, + 'ono' => true, + 'otama' => true, + 'samegawa' => true, + 'shimogo' => true, + 'shirakawa' => true, + 'showa' => true, + 'soma' => true, + 'sukagawa' => true, + 'taishin' => true, + 'tamakawa' => true, + 'tanagura' => true, + 'tenei' => true, + 'yabuki' => true, + 'yamato' => true, + 'yamatsuri' => true, + 'yanaizu' => true, + 'yugawa' => true ), 'gifu' => array( - '*' => true, - '!pref' => true + 'anpachi' => true, + 'ena' => true, + 'gifu' => true, + 'ginan' => true, + 'godo' => true, + 'gujo' => true, + 'hashima' => true, + 'hichiso' => true, + 'hida' => true, + 'higashishirakawa' => true, + 'ibigawa' => true, + 'ikeda' => true, + 'kakamigahara' => true, + 'kani' => true, + 'kasahara' => true, + 'kasamatsu' => true, + 'kawaue' => true, + 'kitagata' => true, + 'mino' => true, + 'minokamo' => true, + 'mitake' => true, + 'mizunami' => true, + 'motosu' => true, + 'nakatsugawa' => true, + 'ogaki' => true, + 'sakahogi' => true, + 'seki' => true, + 'sekigahara' => true, + 'shirakawa' => true, + 'tajimi' => true, + 'takayama' => true, + 'tarui' => true, + 'toki' => true, + 'tomika' => true, + 'wanouchi' => true, + 'yamagata' => true, + 'yaotsu' => true, + 'yoro' => true ), 'gunma' => array( - '*' => true, - '!pref' => true + 'annaka' => true, + 'chiyoda' => true, + 'fujioka' => true, + 'higashiagatsuma' => true, + 'isesaki' => true, + 'itakura' => true, + 'kanna' => true, + 'kanra' => true, + 'katashina' => true, + 'kawaba' => true, + 'kiryu' => true, + 'kusatsu' => true, + 'maebashi' => true, + 'meiwa' => true, + 'midori' => true, + 'minakami' => true, + 'naganohara' => true, + 'nakanojo' => true, + 'nanmoku' => true, + 'numata' => true, + 'oizumi' => true, + 'ora' => true, + 'ota' => true, + 'shibukawa' => true, + 'shimonita' => true, + 'shinto' => true, + 'showa' => true, + 'takasaki' => true, + 'takayama' => true, + 'tamamura' => true, + 'tatebayashi' => true, + 'tomioka' => true, + 'tsukiyono' => true, + 'tsumagoi' => true, + 'ueno' => true, + 'yoshioka' => true ), 'hiroshima' => array( - '*' => true, - '!pref' => true, - '!city' => true + 'asaminami' => true, + 'daiwa' => true, + 'etajima' => true, + 'fuchu' => true, + 'fukuyama' => true, + 'hatsukaichi' => true, + 'higashihiroshima' => true, + 'hongo' => true, + 'jinsekikogen' => true, + 'kaita' => true, + 'kui' => true, + 'kumano' => true, + 'kure' => true, + 'mihara' => true, + 'miyoshi' => true, + 'naka' => true, + 'onomichi' => true, + 'osakikamijima' => true, + 'otake' => true, + 'saka' => true, + 'sera' => true, + 'seranishi' => true, + 'shinichi' => true, + 'shobara' => true, + 'takehara' => true ), 'hokkaido' => array( - '*' => true, - '!pref' => true + 'abashiri' => true, + 'abira' => true, + 'aibetsu' => true, + 'akabira' => true, + 'akkeshi' => true, + 'asahikawa' => true, + 'ashibetsu' => true, + 'ashoro' => true, + 'assabu' => true, + 'atsuma' => true, + 'bibai' => true, + 'biei' => true, + 'bifuka' => true, + 'bihoro' => true, + 'biratori' => true, + 'chippubetsu' => true, + 'chitose' => true, + 'date' => true, + 'ebetsu' => true, + 'embetsu' => true, + 'eniwa' => true, + 'erimo' => true, + 'esan' => true, + 'esashi' => true, + 'fukagawa' => true, + 'fukushima' => true, + 'furano' => true, + 'furubira' => true, + 'haboro' => true, + 'hakodate' => true, + 'hamatonbetsu' => true, + 'hidaka' => true, + 'higashikagura' => true, + 'higashikawa' => true, + 'hiroo' => true, + 'hokuryu' => true, + 'hokuto' => true, + 'honbetsu' => true, + 'horokanai' => true, + 'horonobe' => true, + 'ikeda' => true, + 'imakane' => true, + 'ishikari' => true, + 'iwamizawa' => true, + 'iwanai' => true, + 'kamifurano' => true, + 'kamikawa' => true, + 'kamishihoro' => true, + 'kamisunagawa' => true, + 'kamoenai' => true, + 'kayabe' => true, + 'kembuchi' => true, + 'kikonai' => true, + 'kimobetsu' => true, + 'kitahiroshima' => true, + 'kitami' => true, + 'kiyosato' => true, + 'koshimizu' => true, + 'kunneppu' => true, + 'kuriyama' => true, + 'kuromatsunai' => true, + 'kushiro' => true, + 'kutchan' => true, + 'kyowa' => true, + 'mashike' => true, + 'matsumae' => true, + 'mikasa' => true, + 'minamifurano' => true, + 'mombetsu' => true, + 'moseushi' => true, + 'mukawa' => true, + 'muroran' => true, + 'naie' => true, + 'nakagawa' => true, + 'nakasatsunai' => true, + 'nakatombetsu' => true, + 'nanae' => true, + 'nanporo' => true, + 'nayoro' => true, + 'nemuro' => true, + 'niikappu' => true, + 'niki' => true, + 'nishiokoppe' => true, + 'noboribetsu' => true, + 'numata' => true, + 'obihiro' => true, + 'obira' => true, + 'oketo' => true, + 'okoppe' => true, + 'otaru' => true, + 'otobe' => true, + 'otofuke' => true, + 'otoineppu' => true, + 'oumu' => true, + 'ozora' => true, + 'pippu' => true, + 'rankoshi' => true, + 'rebun' => true, + 'rikubetsu' => true, + 'rishiri' => true, + 'rishirifuji' => true, + 'saroma' => true, + 'sarufutsu' => true, + 'shakotan' => true, + 'shari' => true, + 'shibecha' => true, + 'shibetsu' => true, + 'shikabe' => true, + 'shikaoi' => true, + 'shimamaki' => true, + 'shimizu' => true, + 'shimokawa' => true, + 'shinshinotsu' => true, + 'shintoku' => true, + 'shiranuka' => true, + 'shiraoi' => true, + 'shiriuchi' => true, + 'sobetsu' => true, + 'sunagawa' => true, + 'taiki' => true, + 'takasu' => true, + 'takikawa' => true, + 'takinoue' => true, + 'teshikaga' => true, + 'tobetsu' => true, + 'tohma' => true, + 'tomakomai' => true, + 'tomari' => true, + 'toya' => true, + 'toyako' => true, + 'toyotomi' => true, + 'toyoura' => true, + 'tsubetsu' => true, + 'tsukigata' => true, + 'urakawa' => true, + 'urausu' => true, + 'uryu' => true, + 'utashinai' => true, + 'wakkanai' => true, + 'wassamu' => true, + 'yakumo' => true, + 'yoichi' => true ), 'hyogo' => array( - '*' => true, - '!pref' => true + 'aioi' => true, + 'akashi' => true, + 'ako' => true, + 'amagasaki' => true, + 'aogaki' => true, + 'asago' => true, + 'ashiya' => true, + 'awaji' => true, + 'fukusaki' => true, + 'goshiki' => true, + 'harima' => true, + 'himeji' => true, + 'ichikawa' => true, + 'inagawa' => true, + 'itami' => true, + 'kakogawa' => true, + 'kamigori' => true, + 'kamikawa' => true, + 'kasai' => true, + 'kasuga' => true, + 'kawanishi' => true, + 'miki' => true, + 'minamiawaji' => true, + 'nishinomiya' => true, + 'nishiwaki' => true, + 'ono' => true, + 'sanda' => true, + 'sannan' => true, + 'sasayama' => true, + 'sayo' => true, + 'shingu' => true, + 'shinonsen' => true, + 'shiso' => true, + 'sumoto' => true, + 'taishi' => true, + 'taka' => true, + 'takarazuka' => true, + 'takasago' => true, + 'takino' => true, + 'tamba' => true, + 'tatsuno' => true, + 'toyooka' => true, + 'yabu' => true, + 'yashiro' => true, + 'yoka' => true, + 'yokawa' => true ), 'ibaraki' => array( - '*' => true, - '!pref' => true + 'ami' => true, + 'asahi' => true, + 'bando' => true, + 'chikusei' => true, + 'daigo' => true, + 'fujishiro' => true, + 'hitachi' => true, + 'hitachinaka' => true, + 'hitachiomiya' => true, + 'hitachiota' => true, + 'ibaraki' => true, + 'ina' => true, + 'inashiki' => true, + 'itako' => true, + 'iwama' => true, + 'joso' => true, + 'kamisu' => true, + 'kasama' => true, + 'kashima' => true, + 'kasumigaura' => true, + 'koga' => true, + 'miho' => true, + 'mito' => true, + 'moriya' => true, + 'naka' => true, + 'namegata' => true, + 'oarai' => true, + 'ogawa' => true, + 'omitama' => true, + 'ryugasaki' => true, + 'sakai' => true, + 'sakuragawa' => true, + 'shimodate' => true, + 'shimotsuma' => true, + 'shirosato' => true, + 'sowa' => true, + 'suifu' => true, + 'takahagi' => true, + 'tamatsukuri' => true, + 'tokai' => true, + 'tomobe' => true, + 'tone' => true, + 'toride' => true, + 'tsuchiura' => true, + 'tsukuba' => true, + 'uchihara' => true, + 'ushiku' => true, + 'yachiyo' => true, + 'yamagata' => true, + 'yawara' => true, + 'yuki' => true ), 'ishikawa' => array( - '*' => true, - '!pref' => true + 'anamizu' => true, + 'hakui' => true, + 'hakusan' => true, + 'kaga' => true, + 'kahoku' => true, + 'kanazawa' => true, + 'kawakita' => true, + 'komatsu' => true, + 'nakanoto' => true, + 'nanao' => true, + 'nomi' => true, + 'nonoichi' => true, + 'noto' => true, + 'shika' => true, + 'suzu' => true, + 'tsubata' => true, + 'tsurugi' => true, + 'uchinada' => true, + 'wajima' => true ), 'iwate' => array( - '*' => true, - '!pref' => true + 'fudai' => true, + 'fujisawa' => true, + 'hanamaki' => true, + 'hiraizumi' => true, + 'hirono' => true, + 'ichinohe' => true, + 'ichinoseki' => true, + 'iwaizumi' => true, + 'iwate' => true, + 'joboji' => true, + 'kamaishi' => true, + 'kanegasaki' => true, + 'karumai' => true, + 'kawai' => true, + 'kitakami' => true, + 'kuji' => true, + 'kunohe' => true, + 'kuzumaki' => true, + 'miyako' => true, + 'mizusawa' => true, + 'morioka' => true, + 'ninohe' => true, + 'noda' => true, + 'ofunato' => true, + 'oshu' => true, + 'otsuchi' => true, + 'rikuzentakata' => true, + 'shiwa' => true, + 'shizukuishi' => true, + 'sumita' => true, + 'takizawa' => true, + 'tanohata' => true, + 'tono' => true, + 'yahaba' => true, + 'yamada' => true ), 'kagawa' => array( - '*' => true, - '!pref' => true + 'ayagawa' => true, + 'higashikagawa' => true, + 'kanonji' => true, + 'kotohira' => true, + 'manno' => true, + 'marugame' => true, + 'mitoyo' => true, + 'naoshima' => true, + 'sanuki' => true, + 'tadotsu' => true, + 'takamatsu' => true, + 'tonosho' => true, + 'uchinomi' => true, + 'utazu' => true, + 'zentsuji' => true ), 'kagoshima' => array( - '*' => true, - '!pref' => true + 'akune' => true, + 'amami' => true, + 'hioki' => true, + 'isa' => true, + 'isen' => true, + 'izumi' => true, + 'kagoshima' => true, + 'kanoya' => true, + 'kawanabe' => true, + 'kinko' => true, + 'kouyama' => true, + 'makurazaki' => true, + 'matsumoto' => true, + 'minamitane' => true, + 'nakatane' => true, + 'nishinoomote' => true, + 'satsumasendai' => true, + 'soo' => true, + 'tarumizu' => true, + 'yusui' => true ), 'kanagawa' => array( - '*' => true, - '!pref' => true - ), - 'kawasaki' => array( - '*' => true, - '!city' => true - ), - 'kitakyushu' => array( - '*' => true, - '!city' => true - ), - 'kobe' => array( - '*' => true, - '!city' => true + 'aikawa' => true, + 'atsugi' => true, + 'ayase' => true, + 'chigasaki' => true, + 'ebina' => true, + 'fujisawa' => true, + 'hadano' => true, + 'hakone' => true, + 'hiratsuka' => true, + 'isehara' => true, + 'kaisei' => true, + 'kamakura' => true, + 'kiyokawa' => true, + 'matsuda' => true, + 'minamiashigara' => true, + 'miura' => true, + 'nakai' => true, + 'ninomiya' => true, + 'odawara' => true, + 'oi' => true, + 'oiso' => true, + 'sagamihara' => true, + 'samukawa' => true, + 'tsukui' => true, + 'yamakita' => true, + 'yamato' => true, + 'yokosuka' => true, + 'yugawara' => true, + 'zama' => true, + 'zushi' => true ), 'kochi' => array( - '*' => true, - '!pref' => true + 'aki' => true, + 'geisei' => true, + 'hidaka' => true, + 'higashitsuno' => true, + 'ino' => true, + 'kagami' => true, + 'kami' => true, + 'kitagawa' => true, + 'kochi' => true, + 'mihara' => true, + 'motoyama' => true, + 'muroto' => true, + 'nahari' => true, + 'nakamura' => true, + 'nankoku' => true, + 'nishitosa' => true, + 'niyodogawa' => true, + 'ochi' => true, + 'okawa' => true, + 'otoyo' => true, + 'otsuki' => true, + 'sakawa' => true, + 'sukumo' => true, + 'susaki' => true, + 'tosa' => true, + 'tosashimizu' => true, + 'toyo' => true, + 'tsuno' => true, + 'umaji' => true, + 'yasuda' => true, + 'yusuhara' => true ), 'kumamoto' => array( - '*' => true, - '!pref' => true + 'amakusa' => true, + 'arao' => true, + 'aso' => true, + 'choyo' => true, + 'gyokuto' => true, + 'hitoyoshi' => true, + 'kamiamakusa' => true, + 'kashima' => true, + 'kikuchi' => true, + 'kosa' => true, + 'kumamoto' => true, + 'mashiki' => true, + 'mifune' => true, + 'minamata' => true, + 'minamioguni' => true, + 'nagasu' => true, + 'nishihara' => true, + 'oguni' => true, + 'ozu' => true, + 'sumoto' => true, + 'takamori' => true, + 'uki' => true, + 'uto' => true, + 'yamaga' => true, + 'yamato' => true, + 'yatsushiro' => true ), 'kyoto' => array( - '*' => true, - '!pref' => true, - '!city' => true + 'ayabe' => true, + 'fukuchiyama' => true, + 'higashiyama' => true, + 'ide' => true, + 'ine' => true, + 'joyo' => true, + 'kameoka' => true, + 'kamo' => true, + 'kita' => true, + 'kizu' => true, + 'kumiyama' => true, + 'kyotamba' => true, + 'kyotanabe' => true, + 'kyotango' => true, + 'maizuru' => true, + 'minami' => true, + 'minamiyamashiro' => true, + 'miyazu' => true, + 'muko' => true, + 'nagaokakyo' => true, + 'nakagyo' => true, + 'nantan' => true, + 'oyamazaki' => true, + 'sakyo' => true, + 'seika' => true, + 'tanabe' => true, + 'uji' => true, + 'ujitawara' => true, + 'wazuka' => true, + 'yamashina' => true, + 'yawata' => true ), 'mie' => array( - '*' => true, - '!pref' => true + 'asahi' => true, + 'inabe' => true, + 'ise' => true, + 'kameyama' => true, + 'kawagoe' => true, + 'kiho' => true, + 'kisosaki' => true, + 'kiwa' => true, + 'komono' => true, + 'kumano' => true, + 'kuwana' => true, + 'matsusaka' => true, + 'meiwa' => true, + 'mihama' => true, + 'minamiise' => true, + 'misugi' => true, + 'miyama' => true, + 'nabari' => true, + 'shima' => true, + 'suzuka' => true, + 'tado' => true, + 'taiki' => true, + 'taki' => true, + 'tamaki' => true, + 'toba' => true, + 'tsu' => true, + 'udono' => true, + 'ureshino' => true, + 'watarai' => true, + 'yokkaichi' => true ), 'miyagi' => array( - '*' => true, - '!pref' => true + 'furukawa' => true, + 'higashimatsushima' => true, + 'ishinomaki' => true, + 'iwanuma' => true, + 'kakuda' => true, + 'kami' => true, + 'kawasaki' => true, + 'kesennuma' => true, + 'marumori' => true, + 'matsushima' => true, + 'minamisanriku' => true, + 'misato' => true, + 'murata' => true, + 'natori' => true, + 'ogawara' => true, + 'ohira' => true, + 'onagawa' => true, + 'osaki' => true, + 'rifu' => true, + 'semine' => true, + 'shibata' => true, + 'shichikashuku' => true, + 'shikama' => true, + 'shiogama' => true, + 'shiroishi' => true, + 'tagajo' => true, + 'taiwa' => true, + 'tome' => true, + 'tomiya' => true, + 'wakuya' => true, + 'watari' => true, + 'yamamoto' => true, + 'zao' => true ), 'miyazaki' => array( - '*' => true, - '!pref' => true + 'aya' => true, + 'ebino' => true, + 'gokase' => true, + 'hyuga' => true, + 'kadogawa' => true, + 'kawaminami' => true, + 'kijo' => true, + 'kitagawa' => true, + 'kitakata' => true, + 'kitaura' => true, + 'kobayashi' => true, + 'kunitomi' => true, + 'kushima' => true, + 'mimata' => true, + 'miyakonojo' => true, + 'miyazaki' => true, + 'morotsuka' => true, + 'nichinan' => true, + 'nishimera' => true, + 'nobeoka' => true, + 'saito' => true, + 'shiiba' => true, + 'shintomi' => true, + 'takaharu' => true, + 'takanabe' => true, + 'takazaki' => true, + 'tsuno' => true ), 'nagano' => array( - '*' => true, - '!pref' => true + 'achi' => true, + 'agematsu' => true, + 'anan' => true, + 'aoki' => true, + 'asahi' => true, + 'azumino' => true, + 'chikuhoku' => true, + 'chikuma' => true, + 'chino' => true, + 'fujimi' => true, + 'hakuba' => true, + 'hara' => true, + 'hiraya' => true, + 'iida' => true, + 'iijima' => true, + 'iiyama' => true, + 'iizuna' => true, + 'ikeda' => true, + 'ikusaka' => true, + 'ina' => true, + 'karuizawa' => true, + 'kawakami' => true, + 'kiso' => true, + 'kisofukushima' => true, + 'kitaaiki' => true, + 'komagane' => true, + 'komoro' => true, + 'matsukawa' => true, + 'matsumoto' => true, + 'miasa' => true, + 'minamiaiki' => true, + 'minamimaki' => true, + 'minamiminowa' => true, + 'minowa' => true, + 'miyada' => true, + 'miyota' => true, + 'mochizuki' => true, + 'nagano' => true, + 'nagawa' => true, + 'nagiso' => true, + 'nakagawa' => true, + 'nakano' => true, + 'nozawaonsen' => true, + 'obuse' => true, + 'ogawa' => true, + 'okaya' => true, + 'omachi' => true, + 'omi' => true, + 'ookuwa' => true, + 'ooshika' => true, + 'otaki' => true, + 'otari' => true, + 'sakae' => true, + 'sakaki' => true, + 'saku' => true, + 'sakuho' => true, + 'shimosuwa' => true, + 'shinanomachi' => true, + 'shiojiri' => true, + 'suwa' => true, + 'suzaka' => true, + 'takagi' => true, + 'takamori' => true, + 'takayama' => true, + 'tateshina' => true, + 'tatsuno' => true, + 'togakushi' => true, + 'togura' => true, + 'tomi' => true, + 'ueda' => true, + 'wada' => true, + 'yamagata' => true, + 'yamanouchi' => true, + 'yasaka' => true, + 'yasuoka' => true ), 'nagasaki' => array( - '*' => true, - '!pref' => true - ), - 'nagoya' => array( - '*' => true, - '!city' => true + 'chijiwa' => true, + 'futsu' => true, + 'goto' => true, + 'hasami' => true, + 'hirado' => true, + 'iki' => true, + 'isahaya' => true, + 'kawatana' => true, + 'kuchinotsu' => true, + 'matsuura' => true, + 'nagasaki' => true, + 'obama' => true, + 'omura' => true, + 'oseto' => true, + 'saikai' => true, + 'sasebo' => true, + 'seihi' => true, + 'shimabara' => true, + 'shinkamigoto' => true, + 'togitsu' => true, + 'tsushima' => true, + 'unzen' => true ), 'nara' => array( - '*' => true, - '!pref' => true + 'ando' => true, + 'gose' => true, + 'heguri' => true, + 'higashiyoshino' => true, + 'ikaruga' => true, + 'ikoma' => true, + 'kamikitayama' => true, + 'kanmaki' => true, + 'kashiba' => true, + 'kashihara' => true, + 'katsuragi' => true, + 'kawai' => true, + 'kawakami' => true, + 'kawanishi' => true, + 'koryo' => true, + 'kurotaki' => true, + 'mitsue' => true, + 'miyake' => true, + 'nara' => true, + 'nosegawa' => true, + 'oji' => true, + 'ouda' => true, + 'oyodo' => true, + 'sakurai' => true, + 'sango' => true, + 'shimoichi' => true, + 'shimokitayama' => true, + 'shinjo' => true, + 'soni' => true, + 'takatori' => true, + 'tawaramoto' => true, + 'tenkawa' => true, + 'tenri' => true, + 'uda' => true, + 'yamatokoriyama' => true, + 'yamatotakada' => true, + 'yamazoe' => true, + 'yoshino' => true ), 'niigata' => array( - '*' => true, - '!pref' => true, - '!city' => true + 'aga' => true, + 'agano' => true, + 'gosen' => true, + 'itoigawa' => true, + 'izumozaki' => true, + 'joetsu' => true, + 'kamo' => true, + 'kariwa' => true, + 'kashiwazaki' => true, + 'minamiuonuma' => true, + 'mitsuke' => true, + 'muika' => true, + 'murakami' => true, + 'myoko' => true, + 'nagaoka' => true, + 'niigata' => true, + 'ojiya' => true, + 'omi' => true, + 'sado' => true, + 'sanjo' => true, + 'seiro' => true, + 'seirou' => true, + 'sekikawa' => true, + 'shibata' => true, + 'tagami' => true, + 'tainai' => true, + 'tochio' => true, + 'tokamachi' => true, + 'tsubame' => true, + 'tsunan' => true, + 'uonuma' => true, + 'yahiko' => true, + 'yoita' => true, + 'yuzawa' => true ), 'oita' => array( - '*' => true, - '!pref' => true + 'beppu' => true, + 'bungoono' => true, + 'bungotakada' => true, + 'hasama' => true, + 'hiji' => true, + 'himeshima' => true, + 'hita' => true, + 'kamitsue' => true, + 'kokonoe' => true, + 'kuju' => true, + 'kunisaki' => true, + 'kusu' => true, + 'oita' => true, + 'saiki' => true, + 'taketa' => true, + 'tsukumi' => true, + 'usa' => true, + 'usuki' => true, + 'yufu' => true ), 'okayama' => array( - '*' => true, - '!pref' => true, - '!city' => true + 'akaiwa' => true, + 'asakuchi' => true, + 'bizen' => true, + 'hayashima' => true, + 'ibara' => true, + 'kagamino' => true, + 'kasaoka' => true, + 'kibichuo' => true, + 'kumenan' => true, + 'kurashiki' => true, + 'maniwa' => true, + 'misaki' => true, + 'nagi' => true, + 'niimi' => true, + 'nishiawakura' => true, + 'okayama' => true, + 'satosho' => true, + 'setouchi' => true, + 'shinjo' => true, + 'shoo' => true, + 'soja' => true, + 'takahashi' => true, + 'tamano' => true, + 'tsuyama' => true, + 'wake' => true, + 'yakage' => true ), 'okinawa' => array( - '*' => true, - '!pref' => true + 'aguni' => true, + 'ginowan' => true, + 'ginoza' => true, + 'gushikami' => true, + 'haebaru' => true, + 'higashi' => true, + 'hirara' => true, + 'iheya' => true, + 'ishigaki' => true, + 'ishikawa' => true, + 'itoman' => true, + 'izena' => true, + 'kadena' => true, + 'kin' => true, + 'kitadaito' => true, + 'kitanakagusuku' => true, + 'kumejima' => true, + 'kunigami' => true, + 'minamidaito' => true, + 'motobu' => true, + 'nago' => true, + 'naha' => true, + 'nakagusuku' => true, + 'nakijin' => true, + 'nanjo' => true, + 'nishihara' => true, + 'ogimi' => true, + 'okinawa' => true, + 'onna' => true, + 'shimoji' => true, + 'taketomi' => true, + 'tarama' => true, + 'tokashiki' => true, + 'tomigusuku' => true, + 'tonaki' => true, + 'urasoe' => true, + 'uruma' => true, + 'yaese' => true, + 'yomitan' => true, + 'yonabaru' => true, + 'yonaguni' => true, + 'zamami' => true ), 'osaka' => array( - '*' => true, - '!pref' => true, - '!city' => true + 'abeno' => true, + 'chihayaakasaka' => true, + 'chuo' => true, + 'daito' => true, + 'fujiidera' => true, + 'habikino' => true, + 'hannan' => true, + 'higashiosaka' => true, + 'higashisumiyoshi' => true, + 'higashiyodogawa' => true, + 'hirakata' => true, + 'ibaraki' => true, + 'ikeda' => true, + 'izumi' => true, + 'izumiotsu' => true, + 'izumisano' => true, + 'kadoma' => true, + 'kaizuka' => true, + 'kanan' => true, + 'kashiwara' => true, + 'katano' => true, + 'kawachinagano' => true, + 'kishiwada' => true, + 'kita' => true, + 'kumatori' => true, + 'matsubara' => true, + 'minato' => true, + 'minoh' => true, + 'misaki' => true, + 'moriguchi' => true, + 'neyagawa' => true, + 'nishi' => true, + 'nose' => true, + 'osakasayama' => true, + 'sakai' => true, + 'sayama' => true, + 'sennan' => true, + 'settsu' => true, + 'shijonawate' => true, + 'shimamoto' => true, + 'suita' => true, + 'tadaoka' => true, + 'taishi' => true, + 'tajiri' => true, + 'takaishi' => true, + 'takatsuki' => true, + 'tondabayashi' => true, + 'toyonaka' => true, + 'toyono' => true, + 'yao' => true ), 'saga' => array( - '*' => true, - '!pref' => true + 'ariake' => true, + 'arita' => true, + 'fukudomi' => true, + 'genkai' => true, + 'hamatama' => true, + 'hizen' => true, + 'imari' => true, + 'kamimine' => true, + 'kanzaki' => true, + 'karatsu' => true, + 'kashima' => true, + 'kitagata' => true, + 'kitahata' => true, + 'kiyama' => true, + 'kouhoku' => true, + 'kyuragi' => true, + 'nishiarita' => true, + 'ogi' => true, + 'omachi' => true, + 'ouchi' => true, + 'saga' => true, + 'shiroishi' => true, + 'taku' => true, + 'tara' => true, + 'tosu' => true, + 'yoshinogari' => true ), 'saitama' => array( - '*' => true, - '!pref' => true, - '!city' => true - ), - 'sapporo' => array( - '*' => true, - '!city' => true - ), - 'sendai' => array( - '*' => true, - '!city' => true + 'arakawa' => true, + 'asaka' => true, + 'chichibu' => true, + 'fujimi' => true, + 'fujimino' => true, + 'fukaya' => true, + 'hanno' => true, + 'hanyu' => true, + 'hasuda' => true, + 'hatogaya' => true, + 'hatoyama' => true, + 'hidaka' => true, + 'higashichichibu' => true, + 'higashimatsuyama' => true, + 'honjo' => true, + 'ina' => true, + 'iruma' => true, + 'iwatsuki' => true, + 'kamiizumi' => true, + 'kamikawa' => true, + 'kamisato' => true, + 'kasukabe' => true, + 'kawagoe' => true, + 'kawaguchi' => true, + 'kawajima' => true, + 'kazo' => true, + 'kitamoto' => true, + 'koshigaya' => true, + 'kounosu' => true, + 'kuki' => true, + 'kumagaya' => true, + 'matsubushi' => true, + 'minano' => true, + 'misato' => true, + 'miyashiro' => true, + 'miyoshi' => true, + 'moroyama' => true, + 'nagatoro' => true, + 'namegawa' => true, + 'niiza' => true, + 'ogano' => true, + 'ogawa' => true, + 'ogose' => true, + 'okegawa' => true, + 'omiya' => true, + 'otaki' => true, + 'ranzan' => true, + 'ryokami' => true, + 'saitama' => true, + 'sakado' => true, + 'satte' => true, + 'sayama' => true, + 'shiki' => true, + 'shiraoka' => true, + 'soka' => true, + 'sugito' => true, + 'toda' => true, + 'tokigawa' => true, + 'tokorozawa' => true, + 'tsurugashima' => true, + 'urawa' => true, + 'warabi' => true, + 'yashio' => true, + 'yokoze' => true, + 'yono' => true, + 'yorii' => true, + 'yoshida' => true, + 'yoshikawa' => true, + 'yoshimi' => true ), 'shiga' => array( - '*' => true, - '!pref' => true + 'aisho' => true, + 'gamo' => true, + 'higashiomi' => true, + 'hikone' => true, + 'koka' => true, + 'konan' => true, + 'kosei' => true, + 'koto' => true, + 'kusatsu' => true, + 'maibara' => true, + 'moriyama' => true, + 'nagahama' => true, + 'nishiazai' => true, + 'notogawa' => true, + 'omihachiman' => true, + 'otsu' => true, + 'ritto' => true, + 'ryuoh' => true, + 'takashima' => true, + 'takatsuki' => true, + 'torahime' => true, + 'toyosato' => true, + 'yasu' => true ), 'shimane' => array( - '*' => true, - '!pref' => true + 'akagi' => true, + 'ama' => true, + 'gotsu' => true, + 'hamada' => true, + 'higashiizumo' => true, + 'hikawa' => true, + 'hikimi' => true, + 'izumo' => true, + 'kakinoki' => true, + 'masuda' => true, + 'matsue' => true, + 'misato' => true, + 'nishinoshima' => true, + 'ohda' => true, + 'okinoshima' => true, + 'okuizumo' => true, + 'shimane' => true, + 'tamayu' => true, + 'tsuwano' => true, + 'unnan' => true, + 'yakumo' => true, + 'yasugi' => true, + 'yatsuka' => true ), 'shizuoka' => array( - '*' => true, - '!pref' => true, - '!city' => true + 'arai' => true, + 'atami' => true, + 'fuji' => true, + 'fujieda' => true, + 'fujikawa' => true, + 'fujinomiya' => true, + 'fukuroi' => true, + 'gotemba' => true, + 'haibara' => true, + 'hamamatsu' => true, + 'higashiizu' => true, + 'ito' => true, + 'iwata' => true, + 'izu' => true, + 'izunokuni' => true, + 'kakegawa' => true, + 'kannami' => true, + 'kawanehon' => true, + 'kawazu' => true, + 'kikugawa' => true, + 'kosai' => true, + 'makinohara' => true, + 'matsuzaki' => true, + 'minamiizu' => true, + 'mishima' => true, + 'morimachi' => true, + 'nishiizu' => true, + 'numazu' => true, + 'omaezaki' => true, + 'shimada' => true, + 'shimizu' => true, + 'shimoda' => true, + 'shizuoka' => true, + 'susono' => true, + 'yaizu' => true, + 'yoshida' => true ), 'tochigi' => array( - '*' => true, - '!pref' => true + 'ashikaga' => true, + 'bato' => true, + 'haga' => true, + 'ichikai' => true, + 'iwafune' => true, + 'kaminokawa' => true, + 'kanuma' => true, + 'karasuyama' => true, + 'kuroiso' => true, + 'mashiko' => true, + 'mibu' => true, + 'moka' => true, + 'motegi' => true, + 'nasu' => true, + 'nasushiobara' => true, + 'nikko' => true, + 'nishikata' => true, + 'nogi' => true, + 'ohira' => true, + 'ohtawara' => true, + 'oyama' => true, + 'sakura' => true, + 'sano' => true, + 'shimotsuke' => true, + 'shioya' => true, + 'takanezawa' => true, + 'tochigi' => true, + 'tsuga' => true, + 'ujiie' => true, + 'utsunomiya' => true, + 'yaita' => true ), 'tokushima' => array( - '*' => true, - '!pref' => true + 'aizumi' => true, + 'anan' => true, + 'ichiba' => true, + 'itano' => true, + 'kainan' => true, + 'komatsushima' => true, + 'matsushige' => true, + 'mima' => true, + 'minami' => true, + 'miyoshi' => true, + 'mugi' => true, + 'nakagawa' => true, + 'naruto' => true, + 'sanagochi' => true, + 'shishikui' => true, + 'tokushima' => true, + 'wajiki' => true ), 'tokyo' => array( - '*' => true, - '!metro' => true + 'adachi' => true, + 'akiruno' => true, + 'akishima' => true, + 'aogashima' => true, + 'arakawa' => true, + 'bunkyo' => true, + 'chiyoda' => true, + 'chofu' => true, + 'chuo' => true, + 'edogawa' => true, + 'fuchu' => true, + 'fussa' => true, + 'hachijo' => true, + 'hachioji' => true, + 'hamura' => true, + 'higashikurume' => true, + 'higashimurayama' => true, + 'higashiyamato' => true, + 'hino' => true, + 'hinode' => true, + 'hinohara' => true, + 'inagi' => true, + 'itabashi' => true, + 'katsushika' => true, + 'kita' => true, + 'kiyose' => true, + 'kodaira' => true, + 'koganei' => true, + 'kokubunji' => true, + 'komae' => true, + 'koto' => true, + 'kouzushima' => true, + 'kunitachi' => true, + 'machida' => true, + 'meguro' => true, + 'minato' => true, + 'mitaka' => true, + 'mizuho' => true, + 'musashimurayama' => true, + 'musashino' => true, + 'nakano' => true, + 'nerima' => true, + 'ogasawara' => true, + 'okutama' => true, + 'ome' => true, + 'oshima' => true, + 'ota' => true, + 'setagaya' => true, + 'shibuya' => true, + 'shinagawa' => true, + 'shinjuku' => true, + 'suginami' => true, + 'sumida' => true, + 'tachikawa' => true, + 'taito' => true, + 'tama' => true, + 'toshima' => true ), 'tottori' => array( - '*' => true, - '!pref' => true + 'chizu' => true, + 'hino' => true, + 'kawahara' => true, + 'koge' => true, + 'kotoura' => true, + 'misasa' => true, + 'nanbu' => true, + 'nichinan' => true, + 'sakaiminato' => true, + 'tottori' => true, + 'wakasa' => true, + 'yazu' => true, + 'yonago' => true ), 'toyama' => array( - '*' => true, - '!pref' => true + 'asahi' => true, + 'fuchu' => true, + 'fukumitsu' => true, + 'funahashi' => true, + 'himi' => true, + 'imizu' => true, + 'inami' => true, + 'johana' => true, + 'kamiichi' => true, + 'kurobe' => true, + 'nakaniikawa' => true, + 'namerikawa' => true, + 'nanto' => true, + 'nyuzen' => true, + 'oyabe' => true, + 'taira' => true, + 'takaoka' => true, + 'tateyama' => true, + 'toga' => true, + 'tonami' => true, + 'toyama' => true, + 'unazuki' => true, + 'uozu' => true, + 'yamada' => true ), 'wakayama' => array( - '*' => true, - '!pref' => true + 'arida' => true, + 'aridagawa' => true, + 'gobo' => true, + 'hashimoto' => true, + 'hidaka' => true, + 'hirogawa' => true, + 'inami' => true, + 'iwade' => true, + 'kainan' => true, + 'kamitonda' => true, + 'katsuragi' => true, + 'kimino' => true, + 'kinokawa' => true, + 'kitayama' => true, + 'koya' => true, + 'koza' => true, + 'kozagawa' => true, + 'kudoyama' => true, + 'kushimoto' => true, + 'mihama' => true, + 'misato' => true, + 'nachikatsuura' => true, + 'shingu' => true, + 'shirahama' => true, + 'taiji' => true, + 'tanabe' => true, + 'wakayama' => true, + 'yuasa' => true, + 'yura' => true ), 'yamagata' => array( - '*' => true, - '!pref' => true + 'asahi' => true, + 'funagata' => true, + 'higashine' => true, + 'iide' => true, + 'kahoku' => true, + 'kaminoyama' => true, + 'kaneyama' => true, + 'kawanishi' => true, + 'mamurogawa' => true, + 'mikawa' => true, + 'murayama' => true, + 'nagai' => true, + 'nakayama' => true, + 'nanyo' => true, + 'nishikawa' => true, + 'obanazawa' => true, + 'oe' => true, + 'oguni' => true, + 'ohkura' => true, + 'oishida' => true, + 'sagae' => true, + 'sakata' => true, + 'sakegawa' => true, + 'shinjo' => true, + 'shirataka' => true, + 'shonai' => true, + 'takahata' => true, + 'tendo' => true, + 'tozawa' => true, + 'tsuruoka' => true, + 'yamagata' => true, + 'yamanobe' => true, + 'yonezawa' => true, + 'yuza' => true ), 'yamaguchi' => array( - '*' => true, - '!pref' => true + 'abu' => true, + 'hagi' => true, + 'hikari' => true, + 'hofu' => true, + 'iwakuni' => true, + 'kudamatsu' => true, + 'mitou' => true, + 'nagato' => true, + 'oshima' => true, + 'shimonoseki' => true, + 'shunan' => true, + 'tabuse' => true, + 'tokuyama' => true, + 'toyota' => true, + 'ube' => true, + 'yuu' => true ), 'yamanashi' => array( + 'chuo' => true, + 'doshi' => true, + 'fuefuki' => true, + 'fujikawa' => true, + 'fujikawaguchiko' => true, + 'fujiyoshida' => true, + 'hayakawa' => true, + 'hokuto' => true, + 'ichikawamisato' => true, + 'kai' => true, + 'kofu' => true, + 'koshu' => true, + 'kosuge' => true, + 'minami-alps' => true, + 'minobu' => true, + 'nakamichi' => true, + 'nanbu' => true, + 'narusawa' => true, + 'nirasaki' => true, + 'nishikatsura' => true, + 'oshino' => true, + 'otsuki' => true, + 'showa' => true, + 'tabayama' => true, + 'tsuru' => true, + 'uenohara' => true, + 'yamanakako' => true, + 'yamanashi' => true + ), + 'kawasaki' => array( + '*' => true, + '!city' => true + ), + 'kitakyushu' => array( + '*' => true, + '!city' => true + ), + 'kobe' => array( '*' => true, - '!pref' => true + '!city' => true + ), + 'nagoya' => array( + '*' => true, + '!city' => true + ), + 'sapporo' => array( + '*' => true, + '!city' => true + ), + 'sendai' => array( + '*' => true, + '!city' => true ), 'yokohama' => array( '*' => true, '!city' => true - ) + ), + 'blogspot' => true ), 'ke' => array( '*' => true @@ -1828,7 +3464,8 @@ return array( 'jeonbuk' => true, 'jeonnam' => true, 'seoul' => true, - 'ulsan' => true + 'ulsan' => true, + 'blogspot' => true ), 'kw' => array( '*' => true @@ -1987,7 +3624,8 @@ return array( 'mn' => array( 'gov' => true, 'edu' => true, - 'org' => true + 'org' => true, + 'nyc' => true ), 'mo' => array( 'com' => true, @@ -2000,11 +3638,15 @@ return array( 'mp' => true, 'mq' => true, 'mr' => array( - 'gov' => true + 'gov' => true, + 'blogspot' => true ), 'ms' => true, 'mt' => array( - '*' => true + 'com' => true, + 'edu' => true, + 'net' => true, + 'org' => true ), 'mu' => array( 'com' => true, @@ -2599,7 +4241,8 @@ return array( 'org' => true, 'gob' => true, 'edu' => true, - 'net' => true + 'net' => true, + 'blogspot' => true ), 'my' => array( 'com' => true, @@ -2611,7 +4254,8 @@ return array( 'name' => true ), 'mz' => array( - '*' => true + '*' => true, + '!teledata' => true ), 'na' => array( 'info' => true, @@ -2645,11 +4289,12 @@ return array( ), 'ne' => true, 'net' => array( + 'cloudfront' => true, 'gb' => true, + 'hu' => true, 'jp' => true, 'se' => true, 'uk' => true, - 'za' => true, 'at-band-camp' => true, 'blogdns' => true, 'broke-it' => true, @@ -2684,7 +4329,19 @@ return array( 'servebbs' => true, 'serveftp' => true, 'thruhere' => true, - 'webhop' => true + 'webhop' => true, + 'fastly' => array( + 'ssl' => array( + 'a' => true, + 'b' => true, + 'global' => true + ), + 'prod' => array( + 'a' => true, + 'global' => true + ) + ), + 'za' => true ), 'nf' => array( 'com' => true, @@ -2699,19 +4356,23 @@ return array( 'store' => true ), 'ng' => array( - 'ac' => true, 'com' => true, 'edu' => true, - 'gov' => true, + 'name' => true, 'net' => true, - 'org' => true + 'org' => true, + 'sch' => true, + 'gov' => true, + 'mil' => true, + 'mobi' => true ), 'ni' => array( '*' => true ), 'nl' => array( 'bv' => true, - 'co' => true + 'co' => true, + 'blogspot' => true ), 'no' => array( 'fhs' => true, @@ -3510,7 +5171,8 @@ return array( 'østfold' => array( 'vÃ¥ler' => true ), - 'co' => true + 'co' => true, + 'blogspot' => true ), 'np' => array( '*' => true @@ -3530,25 +5192,25 @@ return array( 'shacknet' => true ), 'nz' => array( - '*' => true + '*' => true, + 'co' => array( + 'blogspot' => true + ) ), 'om' => array( - '*' => true, - '!mediaphone' => true, - '!nawrastelecom' => true, - '!nawras' => true, - '!omanmobile' => true, - '!omanpost' => true, - '!omantel' => true, - '!rakpetroleum' => true, - '!siemens' => true, - '!songfest' => true, - '!statecouncil' => true + 'co' => true, + 'com' => true, + 'edu' => true, + 'gov' => true, + 'med' => true, + 'museum' => true, + 'net' => true, + 'org' => true, + 'pro' => true ), 'org' => array( 'ae' => true, 'us' => true, - 'za' => true, 'dyndns' => array( 'go' => true, 'home' => true @@ -3601,7 +5263,8 @@ return array( 'serveftp' => true, 'servegame' => true, 'stuff-4-sale' => true, - 'webhop' => true + 'webhop' => true, + 'za' => true ), 'pa' => array( 'ac' => true, @@ -3850,6 +5513,7 @@ return array( 'edu' => true, 'net' => true ), + 'post' => true, 'pr' => array( 'com' => true, 'net' => true, @@ -3891,7 +5555,8 @@ return array( 'int' => true, 'publ' => true, 'com' => true, - 'nome' => true + 'nome' => true, + 'blogspot' => true ), 'pw' => array( 'co' => true, @@ -3902,7 +5567,13 @@ return array( 'belau' => true ), 'py' => array( - '*' => true + 'com' => true, + 'coop' => true, + 'edu' => true, + 'gov' => true, + 'mil' => true, + 'net' => true, + 'org' => true ), 'qa' => array( 'com' => true, @@ -3917,7 +5588,8 @@ return array( 're' => array( 'com' => true, 'asso' => true, - 'nom' => true + 'nom' => true, + 'blogspot' => true ), 'ro' => array( 'com' => true, @@ -3930,7 +5602,8 @@ return array( 'arts' => true, 'firm' => true, 'store' => true, - 'www' => true + 'www' => true, + 'blogspot' => true ), 'rs' => array( 'co' => true, @@ -4116,6 +5789,7 @@ return array( 'org' => true, 'edu' => true, 'med' => true, + 'tv' => true, 'gov' => true, 'info' => true ), @@ -4159,7 +5833,8 @@ return array( 'w' => true, 'x' => true, 'y' => true, - 'z' => true + 'z' => true, + 'blogspot' => true ), 'sg' => array( 'com' => true, @@ -4167,11 +5842,21 @@ return array( 'org' => true, 'gov' => true, 'edu' => true, - 'per' => true + 'per' => true, + 'blogspot' => true + ), + 'sh' => array( + 'com' => true, + 'net' => true, + 'gov' => true, + 'org' => true, + 'mil' => true ), - 'sh' => true, 'si' => true, - 'sk' => true, + 'sj' => true, + 'sk' => array( + 'blogspot' => true + ), 'sl' => array( 'com' => true, 'net' => true, @@ -4211,7 +5896,14 @@ return array( ), 'su' => true, 'sv' => array( - '*' => true + 'com' => true, + 'edu' => true, + 'gob' => true, + 'org' => true, + 'red' => true + ), + 'sx' => array( + 'gov' => true ), 'sy' => array( 'edu' => true, @@ -4227,7 +5919,9 @@ return array( 'org' => true ), 'tc' => true, - 'td' => true, + 'td' => array( + 'blogspot' => true + ), 'tel' => true, 'tf' => true, 'tg' => true, @@ -4261,7 +5955,16 @@ return array( 'tl' => array( 'gov' => true ), - 'tm' => true, + 'tm' => array( + 'com' => true, + 'co' => true, + 'org' => true, + 'net' => true, + 'nom' => true, + 'gov' => true, + 'mil' => true, + 'edu' => true + ), 'tn' => array( 'com' => true, 'ens' => true, @@ -4292,6 +5995,7 @@ return array( 'edu' => true, 'mil' => true ), + 'tp' => true, 'tr' => array( '*' => true, '!nic' => true, @@ -4338,16 +6042,22 @@ return array( 'club' => true, '網路' => true, '組織' => true, - '商æ¥' => true + '商æ¥' => true, + 'blogspot' => true ), 'tz' => array( 'ac' => true, 'co' => true, 'go' => true, + 'hotel' => true, + 'info' => true, + 'me' => true, 'mil' => true, + 'mobi' => true, 'ne' => true, 'or' => true, - 'sc' => true + 'sc' => true, + 'tv' => true ), 'ua' => array( 'com' => true, @@ -4357,61 +6067,87 @@ return array( 'net' => true, 'org' => true, 'cherkassy' => true, + 'cherkasy' => true, 'chernigov' => true, + 'chernihiv' => true, + 'chernivtsi' => true, 'chernovtsy' => true, 'ck' => true, 'cn' => true, + 'cr' => true, 'crimea' => true, 'cv' => true, 'dn' => true, 'dnepropetrovsk' => true, + 'dnipropetrovsk' => true, + 'dominic' => true, 'donetsk' => true, 'dp' => true, 'if' => true, 'ivano-frankivsk' => true, 'kh' => true, + 'kharkiv' => true, 'kharkov' => true, 'kherson' => true, 'khmelnitskiy' => true, + 'khmelnytskyi' => true, 'kiev' => true, 'kirovograd' => true, 'km' => true, 'kr' => true, + 'krym' => true, 'ks' => true, 'kv' => true, + 'kyiv' => true, 'lg' => true, + 'lt' => true, 'lugansk' => true, 'lutsk' => true, + 'lv' => true, 'lviv' => true, 'mk' => true, + 'mykolaiv' => true, 'nikolaev' => true, 'od' => true, + 'odesa' => true, 'odessa' => true, 'pl' => true, 'poltava' => true, + 'rivne' => true, 'rovno' => true, 'rv' => true, + 'sb' => true, 'sebastopol' => true, + 'sevastopol' => true, + 'sm' => true, 'sumy' => true, 'te' => true, 'ternopil' => true, + 'uz' => true, 'uzhgorod' => true, 'vinnica' => true, + 'vinnytsia' => true, 'vn' => true, + 'volyn' => true, + 'yalta' => true, 'zaporizhzhe' => true, - 'zp' => true, + 'zaporizhzhia' => true, 'zhitomir' => true, + 'zhytomyr' => true, + 'zp' => true, 'zt' => true, 'co' => true, 'pp' => true ), 'ug' => array( 'co' => true, + 'or' => true, 'ac' => true, 'sc' => true, 'go' => true, 'ne' => true, - 'or' => true + 'com' => true, + 'org' => true ), 'uk' => array( '*' => true, @@ -4420,16 +6156,16 @@ return array( ), '!bl' => true, '!british-library' => true, - '!icnet' => true, '!jet' => true, '!mod' => true, + '!national-library-scotland' => true, '!nel' => true, - '!nhs' => true, '!nic' => true, '!nls' => true, - '!national-library-scotland' => true, '!parliament' => true, - '!police' => true + 'co' => array( + 'blogspot' => true + ) ), 'us' => array( 'dni' => true, @@ -4661,7 +6397,6 @@ return array( 'lib' => true ), 'sd' => array( - 'k12' => true, 'cc' => true, 'lib' => true ), @@ -4706,9 +6441,7 @@ return array( 'lib' => true ), 'wv' => array( - 'k12' => true, - 'cc' => true, - 'lib' => true + 'cc' => true ), 'wy' => array( 'k12' => true, @@ -4720,11 +6453,18 @@ return array( 'stuff-4-sale' => true ), 'uy' => array( - '*' => true + 'com' => true, + 'edu' => true, + 'gub' => true, + 'mil' => true, + 'net' => true, + 'org' => true ), 'uz' => array( + 'co' => true, 'com' => true, - 'co' => true + 'net' => true, + 'org' => true ), 'va' => true, 'vc' => array( @@ -4736,7 +6476,16 @@ return array( 'edu' => true ), 've' => array( - '*' => true + 'co' => true, + 'com' => true, + 'e12' => true, + 'edu' => true, + 'gov' => true, + 'info' => true, + 'mil' => true, + 'net' => true, + 'org' => true, + 'web' => true ), 'vg' => true, 'vi' => array( @@ -4791,9 +6540,12 @@ return array( 'ايران' => true, 'الاردن' => true, 'í•œêµ' => true, + 'қаз' => true, 'ලංකà·' => true, 'இலஙà¯à®•à¯ˆ' => true, 'المغرب' => true, + 'мон' => true, + 'مليسيا' => true, 'عمان' => true, 'Ùلسطين' => true, 'Ñрб' => true, @@ -4826,6 +6578,124 @@ return array( ), 'zw' => array( '*' => true - ) + ), + 'онлайн' => true, + 'Ñайт' => true, + 'شبكة' => true, + '游æˆ' => true, + 'ä¼ä¸š' => true, + 'camera' => true, + 'clothing' => true, + 'lighting' => true, + 'singles' => true, + 'ventures' => true, + 'voyage' => true, + 'guru' => true, + 'holdings' => true, + 'equipment' => true, + 'bike' => true, + 'estate' => true, + 'tattoo' => true, + '在线' => true, + 'ä¸æ–‡ç½‘' => true, + 'land' => true, + 'plumbing' => true, + 'contractors' => true, + 'sexy' => true, + 'menu' => true, + '世界' => true, + 'uno' => true, + 'gallery' => true, + 'technology' => true, + '集团' => true, + 'reviews' => true, + 'guide' => true, + 'æˆ‘çˆ±ä½ ' => true, + 'graphics' => true, + 'construction' => true, + 'onl' => true, + 'ã¿ã‚“ãª' => true, + 'diamonds' => true, + 'kiwi' => true, + 'enterprises' => true, + 'today' => true, + 'futbol' => true, + 'photography' => true, + 'tips' => true, + 'directory' => true, + 'kitchen' => true, + '移动' => true, + 'kim' => true, + '삼성' => true, + 'monash' => true, + 'wed' => true, + 'pink' => true, + 'ruhr' => true, + 'buzz' => true, + 'careers' => true, + 'shoes' => true, + 'موقع' => true, + 'career' => true, + 'otsuka' => true, + 'ä¸ä¿¡' => true, + 'gift' => true, + 'recipes' => true, + 'coffee' => true, + 'luxury' => true, + 'domains' => true, + 'photos' => true, + 'limo' => true, + 'viajes' => true, + 'wang' => true, + 'democrat' => true, + 'mango' => true, + 'cab' => true, + 'support' => true, + 'dance' => true, + 'nagoya' => true, + 'computer' => true, + 'wien' => true, + 'berlin' => true, + 'codes' => true, + 'email' => true, + 'بازار' => true, + 'repair' => true, + 'holiday' => true, + 'center' => true, + 'systems' => true, + 'wiki' => true, + 'ceo' => true, + 'international' => true, + 'solar' => true, + 'company' => true, + 'education' => true, + 'training' => true, + 'academy' => true, + 'marketing' => true, + 'florist' => true, + 'solutions' => true, + 'build' => true, + 'institute' => true, + 'builders' => true, + 'red' => true, + 'blue' => true, + 'ninja' => true, + 'business' => true, + 'gal' => true, + 'social' => true, + 'house' => true, + 'camp' => true, + 'immobilien' => true, + 'moda' => true, + 'glass' => true, + 'management' => true, + 'kaufen' => true, + 'farm' => true, + '公益' => true, + '政务' => true, + 'club' => true, + 'voting' => true, + 'TOKYO' => true, + 'moe' => true ); ?> \ No newline at end of file diff --git a/typo3/sysext/core/Classes/Http/HttpRequest.php b/typo3/sysext/core/Classes/Http/HttpRequest.php index b44a20d55fec59caaa0139b88103fdf66e941f31..d809697edb4ba4d2ecddbebfe5933d59b68390d5 100644 --- a/typo3/sysext/core/Classes/Http/HttpRequest.php +++ b/typo3/sysext/core/Classes/Http/HttpRequest.php @@ -90,15 +90,15 @@ class HttpRequest extends \HTTP_Request2 { $this->setConfig('store_body', FALSE); // Check if we already attached an instance of download. If so, just reuse it. foreach ($this->observers as $observer) { - if ($observer instanceof \TYPO3\CMS\Core\Http\Observer\Download) { - /** @var \TYPO3\CMS\Core\Http\Observer\Download $attached */ + if ($observer instanceof Observer\Download) { + /** @var Observer\Download $attached */ $observer->setDirectory($directory); $observer->setFilename($filename); $isAttached = TRUE; } } if (!$isAttached) { - /** @var \TYPO3\CMS\Core\Http\Observer\Download $observer */ + /** @var Observer\Download $observer */ $observer = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Http\Observer\Download::class, $directory, $filename); $this->attach($observer); } diff --git a/typo3/sysext/linkvalidator/Classes/Linktype/ExternalLinktype.php b/typo3/sysext/linkvalidator/Classes/Linktype/ExternalLinktype.php index bde0d7da9a8106a851eed49ff055829de49e1b39..8f601edec2b6009687e30340ce8bf3fd001a8912 100644 --- a/typo3/sysext/linkvalidator/Classes/Linktype/ExternalLinktype.php +++ b/typo3/sysext/linkvalidator/Classes/Linktype/ExternalLinktype.php @@ -67,7 +67,7 @@ class ExternalLinktype extends \TYPO3\CMS\Linkvalidator\Linktype\AbstractLinktyp 'follow_redirects' => TRUE, 'strict_redirects' => TRUE ); - /** @var $request \TYPO3\CMS\Core\Http\HttpRequest|\HTTP_Request2 */ + /** @var $request \TYPO3\CMS\Core\Http\HttpRequest */ $request = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Http\HttpRequest::class, $url, 'HEAD', $config); // Observe cookies $request->setCookieJar(TRUE);