diff options
93 files changed, 1290 insertions, 843 deletions
diff --git a/.travis.yml b/.travis.yml index 87a869567..5b49434cc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,7 +5,8 @@ php: - 5.4 notifications: - email: false + email: + on_failure: change env: global: @@ -18,8 +19,6 @@ env: - REPORT_EXIT_STATUS=1 matrix: - ENABLE_MAINTAINER_ZTS=0 ENABLE_DEBUG=0 - - ENABLE_MAINTAINER_ZTS=1 ENABLE_DEBUG=0 - - ENABLE_MAINTAINER_ZTS=0 ENABLE_DEBUG=1 - ENABLE_MAINTAINER_ZTS=1 ENABLE_DEBUG=1 before_script: @@ -1,5 +1,33 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +15 May 2014, PHP 5.6.0 Beta 3 + +- Core: + . Fixed bug #67169 (array_splice all elements, then []= gives wrong index). + (Nikita) + . Fixed bug #67198 (php://input regression). (Mike) + . Fixed bug #67247 (spl_fixedarray_resize integer overflow). (Stas) + . Fixed bug #67250 (iptcparse out-of-bounds read). (Stas) + . Fixed bug #67252 (convert_uudecode out-of-bounds read). (Stas) + +- Date: + . Fixed bug #67251 (date_parse_from_format out-of-bounds read). (Stas) + . Fixed bug #67253 (timelib_meridian_with_check out-of-bounds read). (Stas) + +- GD: + . Fixed bug #67248 (imageaffinematrixget missing check of parameters). (Stas) + +- OpenSSL: + . Fixed bug #67224 (Fall back to crypto_type from context if not specified + explicitly in stream_socket_enable_crypto). (Chris Wright) + +- PCRE: + . Fixed bug #67238 (Ungreedy and min/max quantifier bug, applied patch + from the upstream). (Anatol) + +- mbstring + . Fixed bug #67199 (mb_regex_encoding mismatch). (Yasuo) + 01 May 2014, PHP 5.6.0 Beta 2 - CLI server: @@ -62,7 +90,10 @@ PHP NEWS - litespeed . Fixed bug #63228 (-Werror=format-security error in lsapi code). - (George Wang) + (Elan Ruusamäe, George) + +- mysqli: + . Fixed building against an external libmysqlclient. (Adam) - mysqlnd: . Added a new fetching mode to mysqlnd. (Andrey) @@ -76,7 +107,8 @@ PHP NEWS - phpdbg: . Added watchpoints (watch command). (Bob) . Renamed some commands (next => continue and how to step). (Joe) - . Fixed issue #85 (https://github.com/krakjoe/phpdbg/issues/85). (Bob) + . Fixed issue #85 (https://github.com/krakjoe/phpdbg/issues/85) + (Added stdin/stdout/stderr constants and their php:// wrappers). (Bob) - PDO: . Fixed bug #66604 ('pdo/php_pdo_error.h' not copied to the include dir). diff --git a/README.RELEASE_PROCESS b/README.RELEASE_PROCESS index 21305f299..7a82a5c61 100644 --- a/README.RELEASE_PROCESS +++ b/README.RELEASE_PROCESS @@ -11,17 +11,27 @@ because the sysadmins can not upgrade stuff then. 2. Package two days before a release. So if the release is to be on Thursday, package on Tuesday. Think about timezones as well. -3. Ensure that Windows builds will work before packaging - -4. Follow all steps to the letter. When unclear ask previous RM's (David/Julien/ +3. Ensure that the tests on Travis CI are green. +See: https://travis-ci.org/php/php-src/builds +It is recommended to do so a couple of days before the packaging day, to +have enough time to investigate failures, communicate with the authors and +commit the fixes. +The RM for the branch is also responsible for keeping the CI green on +ongoing bases between the releases. Check the CI status for your branch +periodically and resolve the failures ASAP. See more in: +https://wiki.php.net/rfc/travis_ci + +4. Ensure that Windows builds will work before packaging + +5. Follow all steps to the letter. When unclear ask previous RM's (David/Julien/ Johannes/Stas/Derick/Ilia) before proceeding. Ideally make sure that for the first releases one of the previous RM's is around to answer questions. For the steps related to the php/QA/bug websites try to have someone from the webmaster team (Bjori) on hand. -5. Verify the tags to be extra sure everything was tagged properly. +6. Verify the tags to be extra sure everything was tagged properly. -6. Moving extensions from/to PECL requires write acces to the destination. +7. Moving extensions from/to PECL requires write acces to the destination. Most developers should have this. Moving extensions from php-src to PECL @@ -48,47 +58,49 @@ Rolling a non stable release (alpha/beta/RC) 1. Check windows snapshot builder logs (http://windows.php.net/downloads/snaps/ the last revision) -2. run the "scripts/dev/credits" script in php-src and commit the changes in the +2. Check the tests at https://travis-ci.org/php/php-src/builds + +3. run the "scripts/dev/credits" script in php-src and commit the changes in the credits files in ext/standard. -3. Checkout the release branch for this release (e.g., PHP-5.4.2) from the main branch. +4. Checkout the release branch for this release (e.g., PHP-5.4.2) from the main branch. -4. Bump the version numbers in ``main/php_version.h``, ``configure.in`` and possibly ``NEWS``. +5. Bump the version numbers in ``main/php_version.h``, ``configure.in`` and possibly ``NEWS``. Do not use abbreviations for alpha and beta. Do not use dashes, you should ``#define PHP_VERSION "5.4.22RC1"`` and not ``#define PHP_VERSION "5.4.22-RC1"`` -5. Compile and make test, with and without ZTS, using the right Bison version +6. Compile and make test, with and without ZTS, using the right Bison version (for example, for 5.5, Bison 2.4.1 is used) -6. Check ./sapi/cli/php -v output for version matching. +7. Check ./sapi/cli/php -v output for version matching. -7. If all is right, commit the changes to the release branch with ``git commit -a``. +8. If all is right, commit the changes to the release branch with ``git commit -a``. -8. Tag the repository release branch with the version, e.g.: +9. Tag the repository release branch with the version, e.g.: ``git tag -u YOURKEYID php-5.4.2RC2`` -9. Bump the version numbers in ``main/php_version.h``, ``configure.in`` and ``NEWS`` +10. Bump the version numbers in ``main/php_version.h``, ``configure.in`` and ``NEWS`` in the *main* branch (PHP-5.4 for example) to prepare for the **next** version. F.e. if the RC is "5.4.1RC1" then the new one should be "5.4.2-dev" - regardless if we get a new RC or not. This is to make sure ``version_compare()`` can correctly work. Commit the changes to the main branch. -10. Push the changes to the main repo, the tag, the main branch and the release branch : +11. Push the changes to the main repo, the tag, the main branch and the release branch : ``git push --tags origin HEAD`` ``git push origin {main branch}`` ``git push origin {release branch}`` -11. run: ``PHPROOT=. ./makedist 5.4.2RC2``, this will export the tree, create configure +12. run: ``PHPROOT=. ./makedist 5.4.2RC2``, this will export the tree, create configure and build three tarballs (gz, bz2 and xz). -12. Copy those tarballs (scp, rsync) to downloads.php.net, in your homedir there should be a +13. Copy those tarballs (scp, rsync) to downloads.php.net, in your homedir there should be a directory "downloads/". Copy them into there, so that the system can generate MD5 sums. If you do not have this directory, talk to Derick or Dan. -13. Now the RC can be found on http://downloads.php.net/yourname, +14. Now the RC can be found on http://downloads.php.net/yourname, f.e. http://downloads.php.net/derick/ -14. Once the release has been tagged, contact the PHP Windows development team +15. Once the release has been tagged, contact the PHP Windows development team (internals-win@lists.php.net) so that Windows binaries can be created. Once those are made, they should be placed into the same directory as the source snapshots. @@ -144,7 +156,8 @@ the base branches and merged upwards as usual (f.e commit the CVE fix to 5.3, merge to 5.4, 5.5 etc...). Then you can cherry-pick it in your release branch. Don't forget to update NEWS manually in an extra commit then. -3. Commit those changes +3. Commit those changes. Ensure the tests at https://travis-ci.org/php/php-src/builds are +still passing. 4. run the "scripts/dev/credits" script in php-src and commit the changes in the credits files in ext/standard. @@ -154,7 +167,7 @@ credits files in ext/standard. 6. Check ./sapi/cli/php -v output for version matching. -7. tag the repository with the version f.e. "``git tag -s php-5.4.1``" +7. tag the repository with the version f.e. "``git tag -u YOURKEYID -s php-5.4.1``" 8. Push the tag f.e. "``git push origin php-5.4.1``" @@ -222,6 +222,12 @@ PHP 5.6 UPGRADE NOTES The $source parameter of mcrypt_create_iv() now defaults to MCRYPT_DEV_URANDOM instead of MCRYPT_DEV_RANDOM. +- OpenSSL: + The $crypto_type parameter is now optional in stream_socket_enable_crypto() + if the stream's SSL context specifies the new "crypto_type" option. The + crypto method from the context is used as a fallback if no crypto method is + specified at call-time. + - XMLReader: XMLReader::getAttributeNs and XMLReader::getAttributeNo now return NULL if the attribute could not be found, just like XMLReader::getAttribute. @@ -470,3 +476,5 @@ PHP 5.6 UPGRADE NOTES input_encoding output_encoding + The mb_regex_encoding() default setting is changed from EUC-JP to UTF-8. + diff --git a/Zend/tests/bug67169.phpt b/Zend/tests/bug67169.phpt new file mode 100644 index 000000000..8aa6aaf24 --- /dev/null +++ b/Zend/tests/bug67169.phpt @@ -0,0 +1,26 @@ +--TEST-- +Bug #67169: array_splice all elements, then []= gives wrong index +--FILE-- +<?php + +$array = array('a', 'b'); +array_splice($array, 0, 2); +$array[] = 'c'; +var_dump($array); + +$array = array('a', 'b'); +array_shift($array); +array_shift($array); +$array[] = 'c'; +var_dump($array); + +?> +--EXPECT-- +array(1) { + [0]=> + string(1) "c" +} +array(1) { + [0]=> + string(1) "c" +} diff --git a/Zend/zend.c b/Zend/zend.c index ce1163130..34dcc7546 100644 --- a/Zend/zend.c +++ b/Zend/zend.c @@ -954,7 +954,7 @@ ZEND_API void zend_deactivate(TSRMLS_D) /* {{{ */ zend_destroy_rsrc_list(&EG(regular_list) TSRMLS_CC); -#ifdef ZEND_DEBUG +#if ZEND_DEBUG if (GC_G(gc_enabled) && !CG(unclean_shutdown)) { gc_collect_cycles(TSRMLS_C); } diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c index 309631338..a9fd3e9a4 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -487,6 +487,7 @@ ZEND_API void zend_hash_reindex(HashTable *ht, zend_bool only_integer_keys) { IS_CONSISTENT(ht); if (UNEXPECTED(ht->nNumOfElements == 0)) { + ht->nNextFreeElement = 0; return; } @@ -3666,7 +3666,7 @@ ac_config_headers="$ac_config_headers main/php_config.h" PHP_MAJOR_VERSION=5 PHP_MINOR_VERSION=6 PHP_RELEASE_VERSION=0 -PHP_EXTRA_VERSION="beta2" +PHP_EXTRA_VERSION="beta3" PHP_VERSION="$PHP_MAJOR_VERSION.$PHP_MINOR_VERSION.$PHP_RELEASE_VERSION$PHP_EXTRA_VERSION" PHP_VERSION_ID=`expr $PHP_MAJOR_VERSION \* 10000 + $PHP_MINOR_VERSION \* 100 + $PHP_RELEASE_VERSION` @@ -13995,7 +13995,7 @@ $as_echo "#define PHPDBG_DEBUG 0" >>confdefs.h PHP_PHPDBG_FILES="phpdbg.c phpdbg_parser.c phpdbg_lexer.c phpdbg_prompt.c phpdbg_help.c phpdbg_break.c phpdbg_print.c phpdbg_bp.c phpdbg_opcode.c phpdbg_list.c phpdbg_utils.c phpdbg_info.c phpdbg_cmd.c phpdbg_set.c phpdbg_frame.c phpdbg_watch.c phpdbg_btree.c" if test "$PHP_READLINE" != "no"; then - PHPDBG_EXTRA_LIBS="-lreadline" + PHPDBG_EXTRA_LIBS="$PHP_READLINE_LIBS" fi diff --git a/configure.in b/configure.in index 276faa567..8313c3956 100644 --- a/configure.in +++ b/configure.in @@ -120,7 +120,7 @@ int zend_sprintf(char *buffer, const char *format, ...); PHP_MAJOR_VERSION=5 PHP_MINOR_VERSION=6 PHP_RELEASE_VERSION=0 -PHP_EXTRA_VERSION="beta2" +PHP_EXTRA_VERSION="beta3" PHP_VERSION="$PHP_MAJOR_VERSION.$PHP_MINOR_VERSION.$PHP_RELEASE_VERSION$PHP_EXTRA_VERSION" PHP_VERSION_ID=`expr [$]PHP_MAJOR_VERSION \* 10000 + [$]PHP_MINOR_VERSION \* 100 + [$]PHP_RELEASE_VERSION` diff --git a/ext/bz2/bz2.c b/ext/bz2/bz2.c index cc845584f..f310289d7 100644 --- a/ext/bz2/bz2.c +++ b/ext/bz2/bz2.c @@ -230,6 +230,9 @@ PHP_BZ2_API php_stream *_php_stream_bz2open(php_stream_wrapper *wrapper, #endif if (php_check_open_basedir(path_copy TSRMLS_CC)) { +#ifdef VIRTUAL_DIR + efree(path_copy); +#endif return NULL; } @@ -239,6 +242,9 @@ PHP_BZ2_API php_stream *_php_stream_bz2open(php_stream_wrapper *wrapper, if (opened_path && bz_file) { *opened_path = estrdup(path_copy); } +#ifdef VIRTUAL_DIR + efree(path_copy); +#endif path_copy = NULL; if (bz_file == NULL) { diff --git a/ext/curl/tests/bug27023.phpt b/ext/curl/tests/bug27023.phpt index 62effec99..fce69f570 100644 --- a/ext/curl/tests/bug27023.phpt +++ b/ext/curl/tests/bug27023.phpt @@ -4,18 +4,15 @@ Bug #27023 (CURLOPT_POSTFIELDS does not parse content types for files) error_reporting = E_ALL & ~E_DEPRECATED --SKIPIF-- <?php -if (!extension_loaded("curl")) { - exit("skip curl extension not loaded"); -} -if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) { - exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined"); -} +include 'skipif.inc'; ?> --FILE-- <?php -$host = getenv('PHP_CURL_HTTP_REMOTE_SERVER'); + include 'server.inc'; + $host = curl_cli_server_start(); $ch = curl_init(); +curl_setopt($ch, CURLOPT_SAFE_UPLOAD, 0); curl_setopt($ch, CURLOPT_URL, "{$host}/get.php?test=file"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); diff --git a/ext/curl/tests/bug27023_2.phpt b/ext/curl/tests/bug27023_2.phpt new file mode 100644 index 000000000..c878ebac3 --- /dev/null +++ b/ext/curl/tests/bug27023_2.phpt @@ -0,0 +1,44 @@ +--TEST-- +Bug #27023 (CURLOPT_POSTFIELDS does not parse content types for files) +--INI-- +error_reporting = E_ALL & ~E_DEPRECATED +--SKIPIF-- +<?php include 'skipif.inc'; ?> +--FILE-- +<?php + +include 'server.inc'; +$host = curl_cli_server_start(); +$ch = curl_init(); +curl_setopt($ch, CURLOPT_SAFE_UPLOAD, 1); +curl_setopt($ch, CURLOPT_URL, "{$host}/get.php?test=file"); +curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + +$file = curl_file_create(__DIR__ . '/curl_testdata1.txt'); +$params = array('file' => $file); +curl_setopt($ch, CURLOPT_POSTFIELDS, $params); +var_dump(curl_exec($ch)); + +$file = curl_file_create(__DIR__ . '/curl_testdata1.txt', "text/plain"); +$params = array('file' => $file); +curl_setopt($ch, CURLOPT_POSTFIELDS, $params); +var_dump(curl_exec($ch)); + +$file = curl_file_create(__DIR__ . '/curl_testdata1.txt', null, "foo.txt"); +$params = array('file' => $file); +curl_setopt($ch, CURLOPT_POSTFIELDS, $params); +var_dump(curl_exec($ch)); + +$file = curl_file_create(__DIR__ . '/curl_testdata1.txt', "text/plain", "foo.txt"); +$params = array('file' => $file); +curl_setopt($ch, CURLOPT_POSTFIELDS, $params); +var_dump(curl_exec($ch)); + + +curl_close($ch); +?> +--EXPECTF-- +string(%d) "curl_testdata1.txt|application/octet-stream" +string(%d) "curl_testdata1.txt|text/plain" +string(%d) "foo.txt|application/octet-stream" +string(%d) "foo.txt|text/plain" diff --git a/ext/curl/tests/bug45161.phpt b/ext/curl/tests/bug45161.phpt index 9fdc7a7e2..bfcd24400 100644 --- a/ext/curl/tests/bug45161.phpt +++ b/ext/curl/tests/bug45161.phpt @@ -8,9 +8,6 @@ if (substr(PHP_OS, 0, 3) == 'WIN') { if (!extension_loaded("curl")) { exit("skip curl extension not loaded"); } -if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) { - exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined"); -} $curl_version = curl_version(); if ($curl_version['version_number'] < 0x071100) { exit("skip: test works only with curl >= 7.17.0"); diff --git a/ext/curl/tests/bug46711.phpt b/ext/curl/tests/bug46711.phpt index 8eef5562f..3149c45d7 100644 --- a/ext/curl/tests/bug46711.phpt +++ b/ext/curl/tests/bug46711.phpt @@ -5,9 +5,6 @@ Bug #46711 (lost memory when foreach is used for values passed to curl_setopt()) if (!extension_loaded("curl")) { exit("skip curl extension not loaded"); } -if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) { - exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined"); -} ?> --FILE-- <?php diff --git a/ext/curl/tests/bug48203.phpt b/ext/curl/tests/bug48203.phpt index d8f4d2269..aae7fc51a 100644 --- a/ext/curl/tests/bug48203.phpt +++ b/ext/curl/tests/bug48203.phpt @@ -1,24 +1,17 @@ --TEST-- Bug #48203 (Crash when CURLOPT_STDERR is set to regular file) --SKIPIF-- -<?php -if (!extension_loaded("curl")) { - exit("skip curl extension not loaded"); -} -if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) { - exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined"); -} -?> +<?php include 'skipif.inc'; ?> --FILE-- <?php - +include 'server.inc'; $fp = fopen(dirname(__FILE__) . '/bug48203.tmp', 'w'); $ch = curl_init(); curl_setopt($ch, CURLOPT_VERBOSE, 1); curl_setopt($ch, CURLOPT_STDERR, $fp); -curl_setopt($ch, CURLOPT_URL, getenv('PHP_CURL_HTTP_REMOTE_SERVER')); +curl_setopt($ch, CURLOPT_URL, curl_cli_server_start()); fclose($fp); // <-- premature close of $fp caused a crash! diff --git a/ext/curl/tests/bug48203_multi.phpt b/ext/curl/tests/bug48203_multi.phpt index 501b77843..e28c990e9 100644 --- a/ext/curl/tests/bug48203_multi.phpt +++ b/ext/curl/tests/bug48203_multi.phpt @@ -2,16 +2,11 @@ Variation of bug #48203 with curl_multi_exec (Crash when file pointers passed to curl are closed before calling curl_multi_exec) --SKIPIF-- <?php -if (!extension_loaded("curl")) { - exit("skip curl extension not loaded"); -} -if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) { - exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined"); -} +include 'skipif.inc'; ?> --FILE-- <?php - +include 'server.inc'; function checkForClosedFilePointer($curl_option, $description) { $fp = fopen(dirname(__FILE__) . '/bug48203.tmp', 'w'); @@ -21,7 +16,7 @@ function checkForClosedFilePointer($curl_option, $description) { $options = array( CURLOPT_RETURNTRANSFER => 1, $curl_option => $fp, - CURLOPT_URL => getenv("PHP_CURL_HTTP_REMOTE_SERVER") + CURLOPT_URL => curl_cli_server_start() ); // we also need to set CURLOPT_VERBOSE to test CURLOPT_STDERR properly diff --git a/ext/curl/tests/bug48207.phpt b/ext/curl/tests/bug48207.phpt index 6ac16f5ea..a3cd81544 100644 --- a/ext/curl/tests/bug48207.phpt +++ b/ext/curl/tests/bug48207.phpt @@ -4,7 +4,7 @@ Test curl_setopt() CURLOPT_FILE readonly file handle Mark van der Velden #testfest Utrecht 2009 --SKIPIF-- -<?php if (!extension_loaded("curl")) print "skip"; ?> +<?php include 'skipif.inc'; ?> --FILE-- <?php /* @@ -14,7 +14,8 @@ Mark van der Velden */ // Figure out what handler to use -$host = getenv('PHP_CURL_HTTP_REMOTE_SERVER'); +include 'server.inc'; +$host = curl_cli_server_start(); if(!empty($host)) { // Use the set Environment variable diff --git a/ext/curl/tests/bug54798.phpt b/ext/curl/tests/bug54798.phpt index afd98cb87..4a9b99994 100644 --- a/ext/curl/tests/bug54798.phpt +++ b/ext/curl/tests/bug54798.phpt @@ -2,12 +2,7 @@ Bug #54798 (Segfault when CURLOPT_STDERR file pointer is closed before calling curl_exec) --SKIPIF-- <?php -if (!extension_loaded("curl")) { - exit("skip curl extension not loaded"); -} -if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) { - exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined"); -} +include 'skipif.inc'; ?> --FILE-- <?php @@ -47,7 +42,8 @@ $options_to_check = array( "CURLOPT_INFILE" ); -$host = getenv('PHP_CURL_HTTP_REMOTE_SERVER'); +include 'server.inc'; +$host = curl_cli_server_start(); foreach($options_to_check as $option) { checkForClosedFilePointer($host, constant($option), $option); } diff --git a/ext/curl/tests/bug54995.phpt b/ext/curl/tests/bug54995.phpt index 0f3f50f34..4af59948b 100644 --- a/ext/curl/tests/bug54995.phpt +++ b/ext/curl/tests/bug54995.phpt @@ -2,20 +2,16 @@ Bug #54995 (Missing CURLINFO_RESPONSE_CODE support) --SKIPIF-- <?php -if (!extension_loaded("curl")) { - exit("skip curl extension not loaded"); -} +include 'skipif.inc'; + if ($curl_version['version_number'] > 0x070a08) { exit("skip: tests works a versions of curl >= 7.10.8"); } -if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) { - exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined"); -} ?> --FILE-- <?php - -$host = getenv('PHP_CURL_HTTP_REMOTE_SERVER'); +include 'server.inc'; +$host = curl_cli_server_start(); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "{$host}/get.php"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); diff --git a/ext/curl/tests/bug55767.phpt b/ext/curl/tests/bug55767.phpt index 321f67ba6..161ced0bf 100644 --- a/ext/curl/tests/bug55767.phpt +++ b/ext/curl/tests/bug55767.phpt @@ -2,8 +2,7 @@ Test curl_opt() function with POST params from array with a numeric key --SKIPIF-- <?php -if (!extension_loaded("curl")) exit("skip curl extension not loaded"); -if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined"); +include 'skipinf.inc'; ?> --FILE-- <?php @@ -13,7 +12,8 @@ if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) exit("skip PHP_CURL_HTTP_R * Alias to functions: */ - $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER'); + include 'server.inc'; + $host = curl_cli_server_start(); // start testing echo '*** Testing curl sending through GET an POST ***' . "\n"; diff --git a/ext/curl/tests/bug66109.phpt b/ext/curl/tests/bug66109.phpt index aacfba438..5a18e9729 100644 --- a/ext/curl/tests/bug66109.phpt +++ b/ext/curl/tests/bug66109.phpt @@ -1,18 +1,11 @@ --TEST-- Bug #66109 (Option CURLOPT_CUSTOMREQUEST can't be reset to default.) --SKIPIF-- -<?php -if (!extension_loaded("curl")) { - exit("skip curl extension not loaded"); -} -if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) { - exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined"); -} -?> +<?php include 'skipif.inc'; ?> --FILE-- <?php - -$host = getenv('PHP_CURL_HTTP_REMOTE_SERVER'); +include 'server.inc'; +$host = curl_cli_server_start(); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "{$host}/get.php?test=method"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); diff --git a/ext/curl/tests/curl_CURLOPT_READDATA.phpt b/ext/curl/tests/curl_CURLOPT_READDATA.phpt index ea63d445a..25bd0e9b4 100644 --- a/ext/curl/tests/curl_CURLOPT_READDATA.phpt +++ b/ext/curl/tests/curl_CURLOPT_READDATA.phpt @@ -4,12 +4,14 @@ Test CURLOPT_READDATA without a callback function Mattijs Hoitink mattijshoitink@gmail.com #Testfest Utrecht 2009 --SKIPIF-- -<?php if (!extension_loaded("curl") || false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) print "skip need PHP_CURL_HTTP_REMOTE_SERVER environment variable"; ?> +<?php include 'skipif.inc'; ?> --FILE-- <?php +include 'server.inc'; +$host = curl_cli_server_start(); // The URL to POST to -$url = getenv('PHP_CURL_HTTP_REMOTE_SERVER') . '/get.php?test=post'; +$url = $host . '/get.php?test=post'; // Create a temporary file to read the data from $tempname = tempnam(sys_get_temp_dir(), 'CURL_DATA'); diff --git a/ext/curl/tests/curl_basic_001.phpt b/ext/curl/tests/curl_basic_001.phpt index fa362b33c..4921b69bd 100644 --- a/ext/curl/tests/curl_basic_001.phpt +++ b/ext/curl/tests/curl_basic_001.phpt @@ -4,10 +4,7 @@ Test curl_exec() function with basic functionality Sebastian Deutsch <sebastian.deutsch@9elements.com> TestFest 2009 - AFUP - Jean-Marc Fontaine <jmf@durcommefaire.net> --SKIPIF-- -<?php -if (!extension_loaded("curl")) exit("skip curl extension not loaded"); -if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined"); -?> +<?php include 'skipif.inc'; ?> --FILE-- <?php /* Prototype : bool curl_exec(resource ch) @@ -15,8 +12,8 @@ if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) exit("skip PHP_CURL_HTTP_R * Source code: ext/curl/interface.c * Alias to functions: */ - - $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER'); + include 'server.inc'; + $host = curl_cli_server_start(); // start testing echo "*** Testing curl_exec() : basic functionality ***\n"; diff --git a/ext/curl/tests/curl_basic_002.phpt b/ext/curl/tests/curl_basic_002.phpt index e46f323b5..69aef4b82 100644 --- a/ext/curl/tests/curl_basic_002.phpt +++ b/ext/curl/tests/curl_basic_002.phpt @@ -4,10 +4,7 @@ Test curl_opt() function with CURLOPT_RETURNTRANSFER parameter set to 1 Sebastian Deutsch <sebastian.deutsch@9elements.com> TestFest 2009 - AFUP - Jean-Marc Fontaine <jmf@durcommefaire.net> --SKIPIF-- -<?php -if (!extension_loaded("curl")) exit("skip curl extension not loaded"); -if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined"); -?> +<?php include 'skipif.inc'; ?> --FILE-- <?php /* Prototype : bool curl_setopt(resource ch, int option, mixed value) @@ -16,7 +13,8 @@ if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) exit("skip PHP_CURL_HTTP_R * Alias to functions: */ - $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER'); + include 'server.inc'; + $host = curl_cli_server_start(); // start testing echo '*** Testing curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); ***' . "\n"; diff --git a/ext/curl/tests/curl_basic_003.phpt b/ext/curl/tests/curl_basic_003.phpt index eb2aecdd8..9c5967db8 100644 --- a/ext/curl/tests/curl_basic_003.phpt +++ b/ext/curl/tests/curl_basic_003.phpt @@ -4,10 +4,7 @@ Test curl_opt() function with POST parameters Sebastian Deutsch <sebastian.deutsch@9elements.com> TestFest 2009 - AFUP - Jean-Marc Fontaine <jmf@durcommefaire.net> --SKIPIF-- -<?php -if (!extension_loaded("curl")) exit("skip curl extension not loaded"); -if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined"); -?> +<?php include 'skipif.inc'; ?> --FILE-- <?php /* Prototype : bool curl_setopt(resource ch, int option, mixed value) @@ -16,7 +13,8 @@ if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) exit("skip PHP_CURL_HTTP_R * Alias to functions: */ - $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER'); + include 'server.inc'; + $host = curl_cli_server_start(); // start testing echo '*** Testing curl sending through GET an POST ***' . "\n"; diff --git a/ext/curl/tests/curl_basic_004.phpt b/ext/curl/tests/curl_basic_004.phpt index ea2eeca87..08dc7a100 100644 --- a/ext/curl/tests/curl_basic_004.phpt +++ b/ext/curl/tests/curl_basic_004.phpt @@ -4,10 +4,7 @@ Test curl_opt() function with setting referer Sebastian Deutsch <sebastian.deutsch@9elements.com> TestFest 2009 - AFUP - Jean-Marc Fontaine <jmf@durcommefaire.net> --SKIPIF-- -<?php -if (!extension_loaded("curl")) exit("skip curl extension not loaded"); -if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined"); -?> +<?php include 'skipif.inc'; ?> --FILE-- <?php /* Prototype : bool curl_setopt(resource ch, int option, mixed value) @@ -16,7 +13,8 @@ if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) exit("skip PHP_CURL_HTTP_R * Alias to functions: */ - $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER'); + include 'server.inc'; + $host = curl_cli_server_start(); // start testing echo '*** Testing curl setting referer ***' . "\n"; diff --git a/ext/curl/tests/curl_basic_005.phpt b/ext/curl/tests/curl_basic_005.phpt index 9285c108e..200db765d 100644 --- a/ext/curl/tests/curl_basic_005.phpt +++ b/ext/curl/tests/curl_basic_005.phpt @@ -4,10 +4,7 @@ Test curl_opt() function with user agent Sebastian Deutsch <sebastian.deutsch@9elements.com> TestFest 2009 - AFUP - Jean-Marc Fontaine <jmf@durcommefaire.net> --SKIPIF-- -<?php -if (!extension_loaded("curl")) exit("skip curl extension not loaded"); -if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined"); -?> +<?php include 'skipif.inc'; ?> --FILE-- <?php /* Prototype : bool curl_setopt(resource ch, int option, mixed value) @@ -16,7 +13,8 @@ if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) exit("skip PHP_CURL_HTTP_R * Alias to functions: */ - $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER'); + include 'server.inc'; + $host = curl_cli_server_start(); // start testing echo '*** Testing curl with user agent ***' . "\n"; diff --git a/ext/curl/tests/curl_basic_006.phpt b/ext/curl/tests/curl_basic_006.phpt index 5f1a4f483..e48a5ba70 100644 --- a/ext/curl/tests/curl_basic_006.phpt +++ b/ext/curl/tests/curl_basic_006.phpt @@ -4,10 +4,7 @@ Test curl_opt() function with CURLOPT_WRITEFUNCTION parameter set to a closure ? TestFest 2009 - AFUP - Jean-Marc Fontaine <jmf@durcommefaire.net> --SKIPIF-- -<?php -if (!extension_loaded("curl")) exit("skip curl extension not loaded"); -if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined"); -?> +<?php include 'skipif.inc'; ?> --FILE-- <?php /* Prototype : bool curl_setopt(resource ch, int option, mixed value) @@ -16,23 +13,26 @@ if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) exit("skip PHP_CURL_HTTP_R * Alias to functions: */ - $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER'); + include 'server.inc'; + $host = curl_cli_server_start(); // start testing echo '*** Testing curl_setopt($ch, CURLOPT_WRITEFUNCTION, <closure>); ***' . "\n"; $url = "{$host}/get.php?test=get"; $ch = curl_init(); - + $alldata = ''; ob_start(); // start output buffering curl_setopt($ch, CURLOPT_URL, $url); //set the url we want to use curl_setopt($ch, CURLOPT_WRITEFUNCTION, function ($ch, $data) { - echo 'Data: '.$data; + $GLOBALS['alldata'] .= $data; return strlen ($data); }); - + curl_exec($ch); curl_close($ch); + ob_end_flush(); + echo "Data: $alldata"; ?> ===DONE=== --EXPECTF-- diff --git a/ext/curl/tests/curl_basic_011.phpt b/ext/curl/tests/curl_basic_011.phpt index 10c90b123..4e3308240 100644 --- a/ext/curl/tests/curl_basic_011.phpt +++ b/ext/curl/tests/curl_basic_011.phpt @@ -3,7 +3,7 @@ Test curl_opt() function with COOKIE --CREDITS-- TestFest 2009 - AFUP - Xavier Gorse <xgorse@elao.com> --SKIPIF-- -<?php if (!extension_loaded("curl") || false === getenv(b'PHP_CURL_HTTP_REMOTE_SERVER')) print "skip need PHP_CURL_HTTP_REMOTE_SERVER environment variable"; ?> +<?php include 'skipif.inc'; ?> --FILE-- <?php /* Prototype : bool curl_setopt(resource ch, int option, mixed value) @@ -12,7 +12,8 @@ TestFest 2009 - AFUP - Xavier Gorse <xgorse@elao.com> * Alias to functions: */ - $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER'); + include 'server.inc'; + $host = curl_cli_server_start(); // start testing echo '*** Testing curl with cookie ***' . "\n"; diff --git a/ext/curl/tests/curl_basic_012.phpt b/ext/curl/tests/curl_basic_012.phpt index e4706fad4..f136880df 100644 --- a/ext/curl/tests/curl_basic_012.phpt +++ b/ext/curl/tests/curl_basic_012.phpt @@ -3,7 +3,7 @@ Test curl_opt() function with CURLOPT_HTTP_VERSION/CURL_HTTP_VERSION_1_0 --CREDITS-- TestFest 2009 - AFUP - Xavier Gorse <xgorse@elao.com> --SKIPIF-- -<?php if (!extension_loaded("curl") || false === getenv(b'PHP_CURL_HTTP_REMOTE_SERVER')) print "skip"; ?> +<?php include 'skipif.inc'; ?> --FILE-- <?php /* Prototype : bool curl_setopt(resource ch, int option, mixed value) @@ -12,7 +12,8 @@ TestFest 2009 - AFUP - Xavier Gorse <xgorse@elao.com> * Alias to functions: */ - $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER'); + include 'server.inc'; + $host = curl_cli_server_start(); // start testing echo '*** Testing curl with HTTP/1.0 ***' . "\n"; diff --git a/ext/curl/tests/curl_basic_013.phpt b/ext/curl/tests/curl_basic_013.phpt index c49d187be..6d09517e8 100644 --- a/ext/curl/tests/curl_basic_013.phpt +++ b/ext/curl/tests/curl_basic_013.phpt @@ -3,7 +3,7 @@ Test curl_opt() function with CURLOPT_HTTP_VERSION/CURL_HTTP_VERSION_1_1 --CREDITS-- TestFest 2009 - AFUP - Xavier Gorse <xgorse@elao.com> --SKIPIF-- -<?php if (!extension_loaded("curl") || false === getenv(b'PHP_CURL_HTTP_REMOTE_SERVER')) print "skip"; ?> +<?php include 'skipif.inc'; ?> --FILE-- <?php /* Prototype : bool curl_setopt(resource ch, int option, mixed value) @@ -12,7 +12,8 @@ TestFest 2009 - AFUP - Xavier Gorse <xgorse@elao.com> * Alias to functions: */ - $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER'); + include 'server.inc'; + $host = curl_cli_server_start(); // start testing echo '*** Testing curl with HTTP/1.1 ***' . "\n"; diff --git a/ext/curl/tests/curl_basic_017.phpt b/ext/curl/tests/curl_basic_017.phpt index 09247b2c6..dc0bee926 100644 --- a/ext/curl/tests/curl_basic_017.phpt +++ b/ext/curl/tests/curl_basic_017.phpt @@ -3,7 +3,7 @@ Test curl_multi_exec() function with basic functionality --CREDITS-- TestFest 2009 - AFUP - Thomas Rabaix <thomas.rabaix@gmail.com> --SKIPIF-- -<?php if (!extension_loaded("curl") || false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) print "skip"; ?> +<?php include 'skipif.inc'; ?> --FILE-- <?php /* Prototype : bool curl_multi_exec(resource ch) @@ -12,7 +12,8 @@ TestFest 2009 - AFUP - Thomas Rabaix <thomas.rabaix@gmail.com> * Alias to functions: */ - $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER'); + include 'server.inc'; + $host = curl_cli_server_start(); // start testing echo "*** Testing curl_exec() : basic functionality ***\n"; diff --git a/ext/curl/tests/curl_basic_018.phpt b/ext/curl/tests/curl_basic_018.phpt index 7cffb89f0..359421fc0 100644 --- a/ext/curl/tests/curl_basic_018.phpt +++ b/ext/curl/tests/curl_basic_018.phpt @@ -3,7 +3,7 @@ Test curl_setopt() with curl_multi function with basic functionality --CREDITS-- TestFest 2009 - AFUP - Thomas Rabaix <thomas.rabaix@gmail.com> --SKIPIF-- -<?php if (!extension_loaded("curl") || false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) print "skip"; ?> +<?php include 'skipif.inc'; ?> --FILE-- <?php /* Prototype : bool curl_setopt(resource ch, int option, mixed value) @@ -12,7 +12,8 @@ TestFest 2009 - AFUP - Thomas Rabaix <thomas.rabaix@gmail.com> * Alias to functions: */ - $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER'); + include 'server.inc'; + $host = curl_cli_server_start(); // start testing echo "*** Testing curl_exec() : basic functionality ***\n"; diff --git a/ext/curl/tests/curl_basic_019.phpt b/ext/curl/tests/curl_basic_019.phpt index ab605a8c7..2c58500ef 100644 --- a/ext/curl/tests/curl_basic_019.phpt +++ b/ext/curl/tests/curl_basic_019.phpt @@ -3,22 +3,19 @@ Test curl_getinfo() function with CURLINFO_EFFECTIVE_URL parameter --CREDITS-- Jean-Marc Fontaine <jmf@durcommefaire.net> --SKIPIF-- -<?php -if (!extension_loaded("curl")) exit("skip curl extension not loaded"); -if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined"); -?> +<?php include 'skipif.inc'; ?> --FILE-- <?php - $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER'); + include 'server.inc'; + $host = curl_cli_server_start(); - $url = "{$host}/get.php?test="; + $url = "http://{$host}/get.php?test="; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_exec($ch); $info = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); var_dump($url == $info); - curl_close($ch); ?> ===DONE=== diff --git a/ext/curl/tests/curl_basic_020.phpt b/ext/curl/tests/curl_basic_020.phpt index d62205350..1227ad326 100644 --- a/ext/curl/tests/curl_basic_020.phpt +++ b/ext/curl/tests/curl_basic_020.phpt @@ -3,13 +3,11 @@ Test curl_getinfo() function with CURLINFO_HTTP_CODE parameter --CREDITS-- Jean-Marc Fontaine <jmf@durcommefaire.net> --SKIPIF-- -<?php -if (!extension_loaded("curl")) exit("skip curl extension not loaded"); -if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined"); -?> +<?php include 'skipif.inc'; ?> --FILE-- <?php - $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER'); + include 'server.inc'; + $host = curl_cli_server_start(); $url = "{$host}/get.php?test="; $ch = curl_init(); diff --git a/ext/curl/tests/curl_basic_021.phpt b/ext/curl/tests/curl_basic_021.phpt index 3b4798d51..d9f5a90be 100644 --- a/ext/curl/tests/curl_basic_021.phpt +++ b/ext/curl/tests/curl_basic_021.phpt @@ -3,13 +3,11 @@ Test curl_getinfo() function with CURLINFO_CONTENT_TYPE parameter --CREDITS-- Jean-Marc Fontaine <jmf@durcommefaire.net> --SKIPIF-- -<?php -if (!extension_loaded("curl")) exit("skip curl extension not loaded"); -if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined"); -?> +<?php include 'skipif.inc'; ?> --FILE-- <?php - $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER'); + include 'server.inc'; + $host = curl_cli_server_start(); $url = "{$host}/get.php?test=contenttype"; $ch = curl_init(); diff --git a/ext/curl/tests/curl_copy_handle_basic_001.phpt b/ext/curl/tests/curl_copy_handle_basic_001.phpt index f1b4db3ce..aafa41ee2 100644 --- a/ext/curl/tests/curl_copy_handle_basic_001.phpt +++ b/ext/curl/tests/curl_copy_handle_basic_001.phpt @@ -4,11 +4,12 @@ Test curl_copy_handle() with simple get Rick Buitenman <rick@meritos.nl> #testfest Utrecht 2009 --SKIPIF-- -<?php if (!extension_loaded("curl") || false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) print "skip need PHP_CURL_HTTP_REMOTE_SERVER environment variable"; ?> +<?php include 'skipif.inc'; ?> --FILE-- <?php - $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER'); + include 'server.inc'; + $host = curl_cli_server_start(); echo '*** Testing curl copy handle with simple GET ***' . "\n"; diff --git a/ext/curl/tests/curl_copy_handle_basic_002.phpt b/ext/curl/tests/curl_copy_handle_basic_002.phpt index 9ab33635f..6e8214ad2 100644 --- a/ext/curl/tests/curl_copy_handle_basic_002.phpt +++ b/ext/curl/tests/curl_copy_handle_basic_002.phpt @@ -4,10 +4,11 @@ Test curl_copy_handle() with simple POST Rick Buitenman <rick@meritos.nl> #testfest Utrecht 2009 --SKIPIF-- -<?php if (!extension_loaded("curl") || false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) print "skip need PHP_CURL_HTTP_REMOTE_SERVER environment variable"; ?> +<?php include 'skipif.inc'; ?> --FILE-- <?php - $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER'); + include 'server.inc'; + $host = curl_cli_server_start(); echo '*** Testing curl copy handle with simple POST ***' . "\n"; diff --git a/ext/curl/tests/curl_copy_handle_basic_004.phpt b/ext/curl/tests/curl_copy_handle_basic_004.phpt index 9b794e91b..c690180a5 100644 --- a/ext/curl/tests/curl_copy_handle_basic_004.phpt +++ b/ext/curl/tests/curl_copy_handle_basic_004.phpt @@ -4,11 +4,12 @@ Test curl_copy_handle() after exec() Rick Buitenman <rick@meritos.nl> #testfest Utrecht 2009 --SKIPIF-- -<?php if (!extension_loaded("curl") || false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) print "skip need PHP_CURL_HTTP_REMOTE_SERVER environment variable"; ?> +<?php include 'skipif.inc'; ?> --FILE-- <?php - $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER'); + include 'server.inc'; + $host = curl_cli_server_start(); echo '*** Test curl_copy_handle() after exec() ***' . "\n"; diff --git a/ext/curl/tests/curl_copy_handle_basic_005.phpt b/ext/curl/tests/curl_copy_handle_basic_005.phpt index aa9e2fa99..e92603324 100644 --- a/ext/curl/tests/curl_copy_handle_basic_005.phpt +++ b/ext/curl/tests/curl_copy_handle_basic_005.phpt @@ -4,11 +4,12 @@ Test curl_copy_handle() after exec() with POST Rick Buitenman <rick@meritos.nl> #testfest Utrecht 2009 --SKIPIF-- -<?php if (!extension_loaded("curl") || false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) print "skip need PHP_CURL_HTTP_REMOTE_SERVER environment variable"; ?> +<?php include 'skipif.inc'; ?> --FILE-- <?php - $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER'); + include 'server.inc'; + $host = curl_cli_server_start(); echo '*** Test curl_copy_handle() after exec() with POST ***' . "\n"; diff --git a/ext/curl/tests/curl_copy_handle_basic_006.phpt b/ext/curl/tests/curl_copy_handle_basic_006.phpt index defc0f232..0a5c2a25e 100644 --- a/ext/curl/tests/curl_copy_handle_basic_006.phpt +++ b/ext/curl/tests/curl_copy_handle_basic_006.phpt @@ -4,11 +4,12 @@ Test curl_copy_handle() with User Agent Rick Buitenman <rick@meritos.nl> #testfest Utrecht 2009 --SKIPIF-- -<?php if (!extension_loaded("curl") || false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) print "skip need PHP_CURL_HTTP_REMOTE_SERVER environment variable"; ?> +<?php include 'skipif.inc'; ?> --FILE-- <?php - $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER'); + include 'server.inc'; + $host = curl_cli_server_start(); echo '*** Testing curl copy handle with User Agent ***' . "\n"; diff --git a/ext/curl/tests/curl_copy_handle_basic_007.phpt b/ext/curl/tests/curl_copy_handle_basic_007.phpt index aa7306c1c..6334d2a4b 100644 --- a/ext/curl/tests/curl_copy_handle_basic_007.phpt +++ b/ext/curl/tests/curl_copy_handle_basic_007.phpt @@ -1,10 +1,11 @@ --TEST-- Test curl_copy_handle() with simple POST --SKIPIF-- -<?php if (!extension_loaded("curl") || false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) print "skip need PHP_CURL_HTTP_REMOTE_SERVER environment variable"; ?> +<?php include 'skipif.inc'; ?> --FILE-- <?php - $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER'); + include 'server.inc'; + $host = curl_cli_server_start(); echo '*** Testing curl copy handle with simple POST using array as arguments ***' . "\n"; diff --git a/ext/curl/tests/curl_copy_handle_basic_008.phpt b/ext/curl/tests/curl_copy_handle_basic_008.phpt index 692c2df19..cdb7de374 100644 --- a/ext/curl/tests/curl_copy_handle_basic_008.phpt +++ b/ext/curl/tests/curl_copy_handle_basic_008.phpt @@ -1,10 +1,11 @@ --TEST-- Test curl_copy_handle() with CURLOPT_PROGRESSFUNCTION --SKIPIF-- -<?php if (!extension_loaded("curl") || false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) print "skip need PHP_CURL_HTTP_REMOTE_SERVER environment variable"; ?> +<?php include 'skipif.inc'; ?> --FILE-- <?php - $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER'); + include 'server.inc'; + $host = curl_cli_server_start(); $url = "{$host}/get.php"; $ch = curl_init($url); diff --git a/ext/curl/tests/curl_file_deleted_before_curl_close.phpt b/ext/curl/tests/curl_file_deleted_before_curl_close.phpt index 3a4d949e7..5e806add0 100644 --- a/ext/curl/tests/curl_file_deleted_before_curl_close.phpt +++ b/ext/curl/tests/curl_file_deleted_before_curl_close.phpt @@ -3,11 +3,13 @@ Memory corruption error if fp of just created file is closed before curl_close. --CREDITS-- Alexey Shein <confik@gmail.com> --SKIPIF-- -<?php if (!extension_loaded("curl") || false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) print "skip"; ?> +<?php include 'skipif.inc'; ?> --FILE-- <?php -$ch = curl_init(getenv('PHP_CURL_HTTP_REMOTE_SERVER')); +include 'server.inc'; +$host = curl_cli_server_start(); +$ch = curl_init($host); $temp_file = dirname(__FILE__) . '/curl_file_deleted_before_curl_close.tmp'; if (file_exists($temp_file)) { diff --git a/ext/curl/tests/curl_file_upload.phpt b/ext/curl/tests/curl_file_upload.phpt index d3168e578..3a5a78fde 100644 --- a/ext/curl/tests/curl_file_upload.phpt +++ b/ext/curl/tests/curl_file_upload.phpt @@ -1,14 +1,8 @@ --TEST-- CURL file uploading +--INI-- --SKIPIF-- -<?php -if (!extension_loaded("curl")) { - exit("skip curl extension not loaded"); -} -if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) { - exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined"); -} -?> +<?php include 'skipif.inc'; ?> --FILE-- <?php @@ -25,7 +19,8 @@ function testcurl($ch, $name, $mime = '', $postname = '') var_dump(curl_exec($ch)); } -$host = getenv('PHP_CURL_HTTP_REMOTE_SERVER'); +include 'server.inc'; +$host = curl_cli_server_start(); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "{$host}/get.php?test=file"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); @@ -48,6 +43,7 @@ var_dump($file->getPostFilename()); curl_setopt($ch, CURLOPT_POSTFIELDS, array("file" => $file)); var_dump(curl_exec($ch)); +curl_setopt($ch, CURLOPT_SAFE_UPLOAD, 0); $params = array('file' => '@' . __DIR__ . '/curl_testdata1.txt'); curl_setopt($ch, CURLOPT_POSTFIELDS, $params); var_dump(curl_exec($ch)); diff --git a/ext/curl/tests/curl_multi_getcontent_basic3.phpt b/ext/curl/tests/curl_multi_getcontent_basic3.phpt index ac2a37172..190fe9d9c 100644 --- a/ext/curl/tests/curl_multi_getcontent_basic3.phpt +++ b/ext/curl/tests/curl_multi_getcontent_basic3.phpt @@ -4,12 +4,7 @@ Curl_multi_getcontent() basic test with different sources (local file/http) Rein Velt (rein@velt.org) #TestFest Utrecht 20090509 --SKIPIF-- -<?php -if (!extension_loaded('curl')) print 'skip need ext/curl'; -if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) { - exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined"); -} -?> +<?php include 'skipif.inc'; ?> --FILE-- <?php //CURL_MULTI_GETCONTENT TEST @@ -19,7 +14,8 @@ if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) { $ch2=curl_init(); //SET URL AND OTHER OPTIONS - $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER'); + include 'server.inc'; + $host = curl_cli_server_start(); curl_setopt($ch1, CURLOPT_URL, "{$host}/get.php?test=getpost&get_param=Hello%20World"); curl_setopt($ch2, CURLOPT_URL, "file://".dirname(__FILE__). DIRECTORY_SEPARATOR . "curl_testdata2.txt"); curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true); diff --git a/ext/curl/tests/curl_setopt_array_basic.phpt b/ext/curl/tests/curl_setopt_array_basic.phpt index 427de7fc7..d858241b7 100644 --- a/ext/curl/tests/curl_setopt_array_basic.phpt +++ b/ext/curl/tests/curl_setopt_array_basic.phpt @@ -4,7 +4,7 @@ curl_setopt_array() function - tests setting multiple cURL options with curl_set Mattijs Hoitink mattijshoitink@gmail.com #Testfest Utrecht 2009 --SKIPIF-- -<?php if (!extension_loaded("curl")) print "skip"; ?> +<?php include 'skipif.inc'; ?> --FILE-- <?php /* @@ -15,7 +15,8 @@ Mattijs Hoitink mattijshoitink@gmail.com */ // Figure out what handler to use -$host = getenv('PHP_CURL_HTTP_REMOTE_SERVER'); +include 'server.inc'; +$host = curl_cli_server_start(); if (!empty($host)) { // Use the set Environment variable $url = "{$host}/get.php?test=get"; diff --git a/ext/curl/tests/curl_setopt_basic002.phpt b/ext/curl/tests/curl_setopt_basic002.phpt index 074158a4b..7a11493ed 100644 --- a/ext/curl/tests/curl_setopt_basic002.phpt +++ b/ext/curl/tests/curl_setopt_basic002.phpt @@ -4,11 +4,12 @@ curl_setopt basic tests with CURLOPT_STDERR. Paul Sohier #phptestfest utrecht --SKIPIF-- -<?php if (!extension_loaded("curl") || false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) print "skip need PHP_CURL_HTTP_REMOTE_SERVER environment variable"; ?> +<?php include 'skipif.inc'; ?> --FILE-- <?php -$host = getenv('PHP_CURL_HTTP_REMOTE_SERVER'); +include 'server.inc'; +$host = curl_cli_server_start(); // start testing echo "*** Testing curl_setopt with CURLOPT_STDERR\n"; diff --git a/ext/curl/tests/curl_setopt_basic003.phpt b/ext/curl/tests/curl_setopt_basic003.phpt index aa225c6e3..246b83b41 100644 --- a/ext/curl/tests/curl_setopt_basic003.phpt +++ b/ext/curl/tests/curl_setopt_basic003.phpt @@ -4,11 +4,12 @@ curl_setopt() call with CURLOPT_HTTPHEADER Paul Sohier #phptestfest utrecht --SKIPIF-- -<?php if (!extension_loaded("curl") || false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) print "skip need PHP_CURL_HTTP_REMOTE_SERVER environment variable"; ?> +<?php include 'skipif.inc'; ?> --FILE-- <?php -$host = getenv('PHP_CURL_HTTP_REMOTE_SERVER'); +include 'server.inc'; +$host = curl_cli_server_start(); // start testing echo "*** curl_setopt() call with CURLOPT_HTTPHEADER\n"; diff --git a/ext/curl/tests/curl_setopt_basic004.phpt b/ext/curl/tests/curl_setopt_basic004.phpt index 97b4115e3..ee0b4921d 100644 --- a/ext/curl/tests/curl_setopt_basic004.phpt +++ b/ext/curl/tests/curl_setopt_basic004.phpt @@ -4,11 +4,12 @@ curl_setopt() call with CURLOPT_RETURNTRANSFER Paul Sohier #phptestfest utrecht --SKIPIF-- -<?php if (!extension_loaded("curl") || false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) print "skip need PHP_CURL_HTTP_REMOTE_SERVER environment variable"; ?> +<?php include 'skipif.inc'; ?> --FILE-- <?php -$host = getenv('PHP_CURL_HTTP_REMOTE_SERVER'); +include 'server.inc'; +$host = curl_cli_server_start(); // start testing echo "*** curl_setopt() call with CURLOPT_RETURNTRANSFER set to 1\n"; diff --git a/ext/curl/tests/curl_version_error.phpt b/ext/curl/tests/curl_version_error.phpt index fb4793af1..a9b80c55b 100644 --- a/ext/curl/tests/curl_version_error.phpt +++ b/ext/curl/tests/curl_version_error.phpt @@ -1,14 +1,7 @@ --TEST--
Test curl_version() function : error conditions
--SKIPIF--
-<?php
-if (!extension_loaded("curl")) {
- die('skip - curl extension not available in this build');
-}
-if (!getenv('PHP_CURL_HTTP_REMOTE_SERVER')) {
- echo "skip need PHP_CURL_HTTP_REMOTE_SERVER environment variable";
-}
-?>
+<?php if (!extension_loaded("curl")) exit("skip curl extension not loaded"); ?>
--FILE--
<?php
diff --git a/ext/curl/tests/curl_version_variation1.phpt b/ext/curl/tests/curl_version_variation1.phpt index cd912c480..927b4ac31 100644 --- a/ext/curl/tests/curl_version_variation1.phpt +++ b/ext/curl/tests/curl_version_variation1.phpt @@ -1,14 +1,7 @@ --TEST--
Test curl_version() function : usage variations - test values for $ascii argument
--SKIPIF--
-<?php
-if (!extension_loaded("curl")) {
- echo "skip - curl extension not available in this build";
-}
-if (!getenv('PHP_CURL_HTTP_REMOTE_SERVER')) {
- echo "skip need PHP_CURL_HTTP_REMOTE_SERVER environment variable";
-}
-?>
+<?php if (!extension_loaded("curl")) exit("skip curl extension not loaded"); ?>
--FILE--
<?php
diff --git a/ext/curl/tests/curl_writeheader_callback.phpt b/ext/curl/tests/curl_writeheader_callback.phpt index fa27363a4..46e0cc18b 100644 --- a/ext/curl/tests/curl_writeheader_callback.phpt +++ b/ext/curl/tests/curl_writeheader_callback.phpt @@ -4,16 +4,9 @@ Test curl option CURLOPT_HEADERFUNCTION Mathieu Kooiman <mathieuk@gmail.com> Dutch UG, TestFest 2009, Utrecht --DESCRIPTION-- -Hit the host identified by PHP_CURL_HTTP_REMOTE_SERVER and determine that the headers are sent to the callback specified for CURLOPT_HEADERFUNCTION. Different test servers specified for PHP_CURL_HTTP_REMOTE_SERVER might return different sets of headers. Just test for HTTP/1.1 200 OK. +Hit the host and determine that the headers are sent to the callback specified for CURLOPT_HEADERFUNCTION. Different test servers might return different sets of headers. Just test for HTTP/1.1 200 OK. --SKIPIF-- -<?php -if (!extension_loaded("curl")) { - echo "skip - curl extension not available in this build"; -} -if (!getenv('PHP_CURL_HTTP_REMOTE_SERVER')) { - echo "skip need PHP_CURL_HTTP_REMOTE_SERVER environment variable"; -} -?> +<?php include 'skipif.inc'; ?> --FILE-- <?php @@ -23,7 +16,8 @@ function curl_header_callback($curl_handle, $data) echo $data; } -$host = getenv('PHP_CURL_HTTP_REMOTE_SERVER'); +include 'server.inc'; +$host = curl_cli_server_start(); $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); diff --git a/ext/curl/tests/server.inc b/ext/curl/tests/server.inc new file mode 100644 index 000000000..6d96a9850 --- /dev/null +++ b/ext/curl/tests/server.inc @@ -0,0 +1,56 @@ +<?php + +define ("PHP_CURL_SERVER_HOSTNAME", "localhost"); +define ("PHP_CURL_SERVER_PORT", 8964); +define ("PHP_CURL_SERVER_ADDRESS", PHP_CURL_SERVER_HOSTNAME.":".PHP_CURL_SERVER_PORT); + +function curl_cli_server_start() { + if(getenv('PHP_CURL_HTTP_REMOTE_SERVER')) { + return getenv('PHP_CURL_HTTP_REMOTE_SERVER'); + } + + $php_executable = getenv('TEST_PHP_EXECUTABLE'); + $doc_root = __DIR__; + $router = "responder/get.php"; + + $descriptorspec = array( + 0 => STDIN, + 1 => STDOUT, + 2 => STDERR, + ); + + if (substr(PHP_OS, 0, 3) == 'WIN') { + $cmd = "{$php_executable} -t {$doc_root} -n -S " . PHP_CURL_SERVER_ADDRESS; + $cmd .= " {$router}"; + $handle = proc_open(addslashes($cmd), $descriptorspec, $pipes, $doc_root, NULL, array("bypass_shell" => true, "suppress_errors" => true)); + } else { + $cmd = "exec {$php_executable} -t {$doc_root} -n -S " . PHP_CURL_SERVER_ADDRESS; + $cmd .= " {$router}"; + $cmd .= " 2>/dev/null"; + + $handle = proc_open($cmd, $descriptorspec, $pipes, $doc_root); + } + + // note: even when server prints 'Listening on localhost:8964...Press Ctrl-C to quit.' + // it might not be listening yet...need to wait until fsockopen() call returns + $i = 0; + while (($i++ < 30) && !($fp = @fsockopen(PHP_CURL_SERVER_HOSTNAME, PHP_CURL_SERVER_PORT))) { + usleep(10000); + } + + if ($fp) { + fclose($fp); + } + + register_shutdown_function( + function($handle) use($router) { + proc_terminate($handle); + }, + $handle + ); + // don't bother sleeping, server is already up + // server can take a variable amount of time to be up, so just sleeping a guessed amount of time + // does not work. this is why tests sometimes pass and sometimes fail. to get a reliable pass + // sleeping doesn't work. + return PHP_CURL_SERVER_ADDRESS; +} diff --git a/ext/curl/tests/skipif.inc b/ext/curl/tests/skipif.inc new file mode 100644 index 000000000..62b252bcd --- /dev/null +++ b/ext/curl/tests/skipif.inc @@ -0,0 +1,7 @@ +<?php + if (!extension_loaded("curl")) exit("skip curl extension not loaded"); + if(false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) { + if (php_sapi_name() != "cli") { + die("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined"); + } + } diff --git a/ext/date/lib/parse_date.c b/ext/date/lib/parse_date.c index 8fd3a198b..dffa9770c 100644 --- a/ext/date/lib/parse_date.c +++ b/ext/date/lib/parse_date.c @@ -1,4 +1,4 @@ -/* Generated by re2c 0.13.5 on Thu Feb 6 07:35:53 2014 */ +/* Generated by re2c 0.13.5 on Tue May 13 17:01:57 2014 */ /* +----------------------------------------------------------------------+ | PHP Version 5 | @@ -400,9 +400,12 @@ static timelib_sll timelib_meridian_with_check(char **ptr, timelib_sll h) { timelib_sll retval = 0; - while (!strchr("AaPp", **ptr)) { + while (**ptr && !strchr("AaPp", **ptr)) { ++*ptr; } + if(!**ptr) { + return TIMELIB_UNSET; + } if (**ptr == 'a' || **ptr == 'A') { if (h == 12) { retval = -12; @@ -24992,7 +24995,11 @@ timelib_time *timelib_parse_from_format(char *format, char *string, int len, tim break; case '\\': /* escaped char */ - ++fptr; + if(!fptr[1]) { + add_pbf_error(s, "Escaped character expected", string, begin); + break; + } + fptr++; if (*ptr == *fptr) { ++ptr; } else { diff --git a/ext/date/lib/parse_date.re b/ext/date/lib/parse_date.re index e01e292e1..bbae79441 100644 --- a/ext/date/lib/parse_date.re +++ b/ext/date/lib/parse_date.re @@ -399,9 +399,12 @@ static timelib_sll timelib_meridian_with_check(char **ptr, timelib_sll h) { timelib_sll retval = 0; - while (!strchr("AaPp", **ptr)) { + while (**ptr && !strchr("AaPp", **ptr)) { ++*ptr; } + if(!**ptr) { + return TIMELIB_UNSET; + } if (**ptr == 'a' || **ptr == 'A') { if (h == 12) { retval = -12; @@ -2097,7 +2100,11 @@ timelib_time *timelib_parse_from_format(char *format, char *string, int len, tim break; case '\\': /* escaped char */ - ++fptr; + if(!fptr[1]) { + add_pbf_error(s, "Escaped character expected", string, begin); + break; + } + fptr++; if (*ptr == *fptr) { ++ptr; } else { diff --git a/ext/date/lib/timezonedb.h b/ext/date/lib/timezonedb.h index d2292d63b..da6749c51 100644 --- a/ext/date/lib/timezonedb.h +++ b/ext/date/lib/timezonedb.h @@ -13,575 +13,575 @@ const timelib_tzdb_index_entry timezonedb_idx_builtin[580] = { { "Africa/Brazzaville" , 0x00051C }, { "Africa/Bujumbura" , 0x000571 }, { "Africa/Cairo" , 0x0005B5 }, - { "Africa/Casablanca" , 0x000878 }, - { "Africa/Ceuta" , 0x000ADA }, - { "Africa/Conakry" , 0x000DE1 }, - { "Africa/Dakar" , 0x000E4C }, - { "Africa/Dar_es_Salaam" , 0x000EB2 }, - { "Africa/Djibouti" , 0x000F1F }, - { "Africa/Douala" , 0x000F74 }, - { "Africa/El_Aaiun" , 0x000FC9 }, - { "Africa/Freetown" , 0x0011F4 }, - { "Africa/Gaborone" , 0x001303 }, - { "Africa/Harare" , 0x001370 }, - { "Africa/Johannesburg" , 0x0013C5 }, - { "Africa/Juba" , 0x001433 }, - { "Africa/Kampala" , 0x001546 }, - { "Africa/Khartoum" , 0x0015C5 }, - { "Africa/Kigali" , 0x0016D8 }, - { "Africa/Kinshasa" , 0x00172D }, - { "Africa/Lagos" , 0x001788 }, - { "Africa/Libreville" , 0x0017DD }, - { "Africa/Lome" , 0x001832 }, - { "Africa/Luanda" , 0x001876 }, - { "Africa/Lubumbashi" , 0x0018CB }, - { "Africa/Lusaka" , 0x001926 }, - { "Africa/Malabo" , 0x00197B }, - { "Africa/Maputo" , 0x0019E1 }, - { "Africa/Maseru" , 0x001A36 }, - { "Africa/Mbabane" , 0x001A9E }, - { "Africa/Mogadishu" , 0x001AF4 }, - { "Africa/Monrovia" , 0x001B4F }, - { "Africa/Nairobi" , 0x001BB5 }, - { "Africa/Ndjamena" , 0x001C34 }, - { "Africa/Niamey" , 0x001CA0 }, - { "Africa/Nouakchott" , 0x001D13 }, - { "Africa/Ouagadougou" , 0x001D7E }, - { "Africa/Porto-Novo" , 0x001DD3 }, - { "Africa/Sao_Tome" , 0x001E39 }, - { "Africa/Timbuktu" , 0x001E8E }, - { "Africa/Tripoli" , 0x001EF9 }, - { "Africa/Tunis" , 0x002002 }, - { "Africa/Windhoek" , 0x002114 }, - { "America/Adak" , 0x00235B }, - { "America/Anchorage" , 0x0026D1 }, - { "America/Anguilla" , 0x002A45 }, - { "America/Antigua" , 0x002A9A }, - { "America/Araguaina" , 0x002B00 }, - { "America/Argentina/Buenos_Aires" , 0x002C65 }, - { "America/Argentina/Catamarca" , 0x002E13 }, - { "America/Argentina/ComodRivadavia" , 0x002FD4 }, - { "America/Argentina/Cordoba" , 0x00317A }, - { "America/Argentina/Jujuy" , 0x00334F }, - { "America/Argentina/La_Rioja" , 0x003503 }, - { "America/Argentina/Mendoza" , 0x0036BB }, - { "America/Argentina/Rio_Gallegos" , 0x00387B }, - { "America/Argentina/Salta" , 0x003A30 }, - { "America/Argentina/San_Juan" , 0x003BDC }, - { "America/Argentina/San_Luis" , 0x003D94 }, - { "America/Argentina/Tucuman" , 0x003F5A }, - { "America/Argentina/Ushuaia" , 0x004116 }, - { "America/Aruba" , 0x0042D1 }, - { "America/Asuncion" , 0x004337 }, - { "America/Atikokan" , 0x00461C }, - { "America/Atka" , 0x0046F2 }, - { "America/Bahia" , 0x004A58 }, - { "America/Bahia_Banderas" , 0x004BEB }, - { "America/Barbados" , 0x004E64 }, - { "America/Belem" , 0x004EFE }, - { "America/Belize" , 0x004FF9 }, - { "America/Blanc-Sablon" , 0x005175 }, - { "America/Boa_Vista" , 0x005229 }, - { "America/Bogota" , 0x005332 }, - { "America/Boise" , 0x00539E }, - { "America/Buenos_Aires" , 0x005735 }, - { "America/Cambridge_Bay" , 0x0058CE }, - { "America/Campo_Grande" , 0x005BF6 }, - { "America/Cancun" , 0x005EE5 }, - { "America/Caracas" , 0x006127 }, - { "America/Catamarca" , 0x00618E }, - { "America/Cayenne" , 0x006334 }, - { "America/Cayman" , 0x006396 }, - { "America/Chicago" , 0x0063EB }, - { "America/Chihuahua" , 0x006902 }, - { "America/Coral_Harbour" , 0x006B6D }, - { "America/Cordoba" , 0x006BFF }, - { "America/Costa_Rica" , 0x006DA5 }, - { "America/Creston" , 0x006E2F }, - { "America/Cuiaba" , 0x006EBB }, - { "America/Curacao" , 0x007199 }, - { "America/Danmarkshavn" , 0x0071FF }, - { "America/Dawson" , 0x007343 }, - { "America/Dawson_Creek" , 0x007660 }, - { "America/Denver" , 0x00783A }, - { "America/Detroit" , 0x007BC0 }, - { "America/Dominica" , 0x007F1F }, - { "America/Edmonton" , 0x007F74 }, - { "America/Eirunepe" , 0x00832C }, - { "America/El_Salvador" , 0x008444 }, - { "America/Ensenada" , 0x0084B9 }, - { "America/Fort_Wayne" , 0x008960 }, - { "America/Fortaleza" , 0x008822 }, - { "America/Glace_Bay" , 0x008BCA }, - { "America/Godthab" , 0x008F41 }, - { "America/Goose_Bay" , 0x009205 }, - { "America/Grand_Turk" , 0x0096C2 }, - { "America/Grenada" , 0x009971 }, - { "America/Guadeloupe" , 0x0099C6 }, - { "America/Guatemala" , 0x009A1B }, - { "America/Guayaquil" , 0x009AA4 }, - { "America/Guyana" , 0x009B01 }, - { "America/Halifax" , 0x009B82 }, - { "America/Havana" , 0x00A098 }, - { "America/Hermosillo" , 0x00A40B }, - { "America/Indiana/Indianapolis" , 0x00A4E9 }, - { "America/Indiana/Knox" , 0x00A77A }, - { "America/Indiana/Marengo" , 0x00AB11 }, - { "America/Indiana/Petersburg" , 0x00ADB7 }, - { "America/Indiana/Tell_City" , 0x00B304 }, - { "America/Indiana/Vevay" , 0x00B59D }, - { "America/Indiana/Vincennes" , 0x00B7D8 }, - { "America/Indiana/Winamac" , 0x00BA8C }, - { "America/Indianapolis" , 0x00B09A }, - { "America/Inuvik" , 0x00BD45 }, - { "America/Iqaluit" , 0x00C03C }, - { "America/Jamaica" , 0x00C35E }, - { "America/Jujuy" , 0x00C423 }, - { "America/Juneau" , 0x00C5CD }, - { "America/Kentucky/Louisville" , 0x00C94B }, - { "America/Kentucky/Monticello" , 0x00CD69 }, - { "America/Knox_IN" , 0x00D0EE }, - { "America/Kralendijk" , 0x00D45F }, - { "America/La_Paz" , 0x00D4C5 }, - { "America/Lima" , 0x00D52C }, - { "America/Los_Angeles" , 0x00D5D4 }, - { "America/Louisville" , 0x00D9E5 }, - { "America/Lower_Princes" , 0x00DDDA }, - { "America/Maceio" , 0x00DE40 }, - { "America/Managua" , 0x00DF7A }, - { "America/Manaus" , 0x00E02D }, - { "America/Marigot" , 0x00E12F }, - { "America/Martinique" , 0x00E184 }, - { "America/Matamoros" , 0x00E1F0 }, - { "America/Mazatlan" , 0x00E449 }, - { "America/Mendoza" , 0x00E6B6 }, - { "America/Menominee" , 0x00E86A }, - { "America/Merida" , 0x00EBEB }, - { "America/Metlakatla" , 0x00EE26 }, - { "America/Mexico_City" , 0x00EF60 }, - { "America/Miquelon" , 0x00F1DB }, - { "America/Moncton" , 0x00F44D }, - { "America/Monterrey" , 0x00F8E4 }, - { "America/Montevideo" , 0x00FB47 }, - { "America/Montreal" , 0x00FE59 }, - { "America/Montserrat" , 0x010349 }, - { "America/Nassau" , 0x01039E }, - { "America/New_York" , 0x0106E3 }, - { "America/Nipigon" , 0x010BEE }, - { "America/Nome" , 0x010F3F }, - { "America/Noronha" , 0x0112BD }, - { "America/North_Dakota/Beulah" , 0x0113ED }, - { "America/North_Dakota/Center" , 0x011781 }, - { "America/North_Dakota/New_Salem" , 0x011B15 }, - { "America/Ojinaga" , 0x011EBE }, - { "America/Panama" , 0x01211F }, - { "America/Pangnirtung" , 0x012174 }, - { "America/Paramaribo" , 0x0124AA }, - { "America/Phoenix" , 0x01253C }, - { "America/Port-au-Prince" , 0x0125FA }, - { "America/Port_of_Spain" , 0x01291E }, - { "America/Porto_Acre" , 0x01281A }, - { "America/Porto_Velho" , 0x012973 }, - { "America/Puerto_Rico" , 0x012A69 }, - { "America/Rainy_River" , 0x012AD4 }, - { "America/Rankin_Inlet" , 0x012E0C }, - { "America/Recife" , 0x0130F2 }, - { "America/Regina" , 0x01321C }, - { "America/Resolute" , 0x0133DA }, - { "America/Rio_Branco" , 0x0136CB }, - { "America/Rosario" , 0x0137D3 }, - { "America/Santa_Isabel" , 0x013979 }, - { "America/Santarem" , 0x013D1C }, - { "America/Santiago" , 0x013E21 }, - { "America/Santo_Domingo" , 0x0141CA }, - { "America/Sao_Paulo" , 0x014290 }, - { "America/Scoresbysund" , 0x01459F }, - { "America/Shiprock" , 0x01488D }, - { "America/Sitka" , 0x014C06 }, - { "America/St_Barthelemy" , 0x014F8E }, - { "America/St_Johns" , 0x014FE3 }, - { "America/St_Kitts" , 0x015536 }, - { "America/St_Lucia" , 0x01558B }, - { "America/St_Thomas" , 0x0155E0 }, - { "America/St_Vincent" , 0x015635 }, - { "America/Swift_Current" , 0x01568A }, - { "America/Tegucigalpa" , 0x0157AB }, - { "America/Thule" , 0x01582A }, - { "America/Thunder_Bay" , 0x015A71 }, - { "America/Tijuana" , 0x015DBA }, - { "America/Toronto" , 0x016153 }, - { "America/Tortola" , 0x016673 }, - { "America/Vancouver" , 0x0166C8 }, - { "America/Virgin" , 0x016B05 }, - { "America/Whitehorse" , 0x016B5A }, - { "America/Winnipeg" , 0x016E77 }, - { "America/Yakutat" , 0x0172B7 }, - { "America/Yellowknife" , 0x017622 }, - { "Antarctica/Casey" , 0x017932 }, - { "Antarctica/Davis" , 0x0179CF }, - { "Antarctica/DumontDUrville" , 0x017A70 }, - { "Antarctica/Macquarie" , 0x017B02 }, - { "Antarctica/Mawson" , 0x017D49 }, - { "Antarctica/McMurdo" , 0x017DC5 }, - { "Antarctica/Palmer" , 0x018170 }, - { "Antarctica/Rothera" , 0x01848C }, - { "Antarctica/South_Pole" , 0x018502 }, - { "Antarctica/Syowa" , 0x018880 }, - { "Antarctica/Troll" , 0x0188EE }, - { "Antarctica/Vostok" , 0x018AC0 }, - { "Arctic/Longyearbyen" , 0x018B31 }, - { "Asia/Aden" , 0x018E63 }, - { "Asia/Almaty" , 0x018EB8 }, - { "Asia/Amman" , 0x019037 }, - { "Asia/Anadyr" , 0x0192ED }, - { "Asia/Aqtau" , 0x0194D2 }, - { "Asia/Aqtobe" , 0x0196D1 }, - { "Asia/Ashgabat" , 0x019889 }, - { "Asia/Ashkhabad" , 0x0199A6 }, - { "Asia/Baghdad" , 0x019AC3 }, - { "Asia/Bahrain" , 0x019C38 }, - { "Asia/Baku" , 0x019C9E }, - { "Asia/Bangkok" , 0x019F86 }, - { "Asia/Beirut" , 0x019FDB }, - { "Asia/Bishkek" , 0x01A2E8 }, - { "Asia/Brunei" , 0x01A494 }, - { "Asia/Calcutta" , 0x01A4F6 }, - { "Asia/Choibalsan" , 0x01A56F }, - { "Asia/Chongqing" , 0x01A6E8 }, - { "Asia/Chungking" , 0x01A7D7 }, - { "Asia/Colombo" , 0x01A886 }, - { "Asia/Dacca" , 0x01A922 }, - { "Asia/Damascus" , 0x01A9C8 }, - { "Asia/Dhaka" , 0x01AD18 }, - { "Asia/Dili" , 0x01ADBE }, - { "Asia/Dubai" , 0x01AE48 }, - { "Asia/Dushanbe" , 0x01AE9D }, - { "Asia/Gaza" , 0x01AFA0 }, - { "Asia/Harbin" , 0x01B2F3 }, - { "Asia/Hebron" , 0x01B3DA }, - { "Asia/Ho_Chi_Minh" , 0x01B736 }, - { "Asia/Hong_Kong" , 0x01B7AE }, - { "Asia/Hovd" , 0x01B970 }, - { "Asia/Irkutsk" , 0x01BAE8 }, - { "Asia/Istanbul" , 0x01BCCE }, - { "Asia/Jakarta" , 0x01C0BB }, - { "Asia/Jayapura" , 0x01C165 }, - { "Asia/Jerusalem" , 0x01C201 }, - { "Asia/Kabul" , 0x01C530 }, - { "Asia/Kamchatka" , 0x01C581 }, - { "Asia/Karachi" , 0x01C75D }, - { "Asia/Kashgar" , 0x01C812 }, - { "Asia/Kathmandu" , 0x01C8E3 }, - { "Asia/Katmandu" , 0x01C949 }, - { "Asia/Khandyga" , 0x01C9AF }, - { "Asia/Kolkata" , 0x01CBD4 }, - { "Asia/Krasnoyarsk" , 0x01CC4D }, - { "Asia/Kuala_Lumpur" , 0x01CE35 }, - { "Asia/Kuching" , 0x01CEF2 }, - { "Asia/Kuwait" , 0x01CFE0 }, - { "Asia/Macao" , 0x01D035 }, - { "Asia/Macau" , 0x01D170 }, - { "Asia/Magadan" , 0x01D2AB }, - { "Asia/Makassar" , 0x01D48D }, - { "Asia/Manila" , 0x01D552 }, - { "Asia/Muscat" , 0x01D5D7 }, - { "Asia/Nicosia" , 0x01D62C }, - { "Asia/Novokuznetsk" , 0x01D914 }, - { "Asia/Novosibirsk" , 0x01DB16 }, - { "Asia/Omsk" , 0x01DD01 }, - { "Asia/Oral" , 0x01DEE8 }, - { "Asia/Phnom_Penh" , 0x01E0B8 }, - { "Asia/Pontianak" , 0x01E130 }, - { "Asia/Pyongyang" , 0x01E1F2 }, - { "Asia/Qatar" , 0x01E25F }, - { "Asia/Qyzylorda" , 0x01E2C5 }, - { "Asia/Rangoon" , 0x01E49B }, - { "Asia/Riyadh" , 0x01E513 }, - { "Asia/Saigon" , 0x01E568 }, - { "Asia/Sakhalin" , 0x01E5E0 }, - { "Asia/Samarkand" , 0x01E7D7 }, - { "Asia/Seoul" , 0x01E90D }, - { "Asia/Shanghai" , 0x01E9B1 }, - { "Asia/Singapore" , 0x01EA91 }, - { "Asia/Taipei" , 0x01EB48 }, - { "Asia/Tashkent" , 0x01EC60 }, - { "Asia/Tbilisi" , 0x01ED91 }, - { "Asia/Tehran" , 0x01EF4B }, - { "Asia/Tel_Aviv" , 0x01F1B9 }, - { "Asia/Thimbu" , 0x01F4E8 }, - { "Asia/Thimphu" , 0x01F54E }, - { "Asia/Tokyo" , 0x01F5B4 }, - { "Asia/Ujung_Pandang" , 0x01F63D }, - { "Asia/Ulaanbaatar" , 0x01F6BA }, - { "Asia/Ulan_Bator" , 0x01F815 }, - { "Asia/Urumqi" , 0x01F962 }, - { "Asia/Ust-Nera" , 0x01FA29 }, - { "Asia/Vientiane" , 0x01FC2E }, - { "Asia/Vladivostok" , 0x01FCA6 }, - { "Asia/Yakutsk" , 0x01FE92 }, - { "Asia/Yekaterinburg" , 0x020077 }, - { "Asia/Yerevan" , 0x020282 }, - { "Atlantic/Azores" , 0x020482 }, - { "Atlantic/Bermuda" , 0x020985 }, - { "Atlantic/Canary" , 0x020C66 }, - { "Atlantic/Cape_Verde" , 0x020F3C }, - { "Atlantic/Faeroe" , 0x020FB5 }, - { "Atlantic/Faroe" , 0x021259 }, - { "Atlantic/Jan_Mayen" , 0x0214FD }, - { "Atlantic/Madeira" , 0x02182F }, - { "Atlantic/Reykjavik" , 0x021D38 }, - { "Atlantic/South_Georgia" , 0x021EF1 }, - { "Atlantic/St_Helena" , 0x022103 }, - { "Atlantic/Stanley" , 0x021F35 }, - { "Australia/ACT" , 0x022158 }, - { "Australia/Adelaide" , 0x022475 }, - { "Australia/Brisbane" , 0x0227A1 }, - { "Australia/Broken_Hill" , 0x022868 }, - { "Australia/Canberra" , 0x022BA6 }, - { "Australia/Currie" , 0x022EC3 }, - { "Australia/Darwin" , 0x0231F6 }, - { "Australia/Eucla" , 0x02327C }, - { "Australia/Hobart" , 0x023351 }, - { "Australia/LHI" , 0x0236AF }, - { "Australia/Lindeman" , 0x02394A }, - { "Australia/Lord_Howe" , 0x023A2B }, - { "Australia/Melbourne" , 0x023CD6 }, - { "Australia/North" , 0x023FFB }, - { "Australia/NSW" , 0x02406F }, - { "Australia/Perth" , 0x02438C }, - { "Australia/Queensland" , 0x024464 }, - { "Australia/South" , 0x024510 }, - { "Australia/Sydney" , 0x02482D }, - { "Australia/Tasmania" , 0x024B6A }, - { "Australia/Victoria" , 0x024EAF }, - { "Australia/West" , 0x0251CC }, - { "Australia/Yancowinna" , 0x025282 }, - { "Brazil/Acre" , 0x0255A4 }, - { "Brazil/DeNoronha" , 0x0256A8 }, - { "Brazil/East" , 0x0257C8 }, - { "Brazil/West" , 0x025AA5 }, - { "Canada/Atlantic" , 0x025B9D }, - { "Canada/Central" , 0x026085 }, - { "Canada/East-Saskatchewan" , 0x02698F }, - { "Canada/Eastern" , 0x02649F }, - { "Canada/Mountain" , 0x026B18 }, - { "Canada/Newfoundland" , 0x026E8E }, - { "Canada/Pacific" , 0x0273B9 }, - { "Canada/Saskatchewan" , 0x0277D2 }, - { "Canada/Yukon" , 0x02795B }, - { "CET" , 0x027C5E }, - { "Chile/Continental" , 0x027F67 }, - { "Chile/EasterIsland" , 0x028302 }, - { "CST6CDT" , 0x028644 }, - { "Cuba" , 0x028995 }, - { "EET" , 0x028D08 }, - { "Egypt" , 0x028FBB }, - { "Eire" , 0x02927E }, - { "EST" , 0x02978F }, - { "EST5EDT" , 0x0297D3 }, - { "Etc/GMT" , 0x029B24 }, - { "Etc/GMT+0" , 0x029BF0 }, - { "Etc/GMT+1" , 0x029C7A }, - { "Etc/GMT+10" , 0x029D07 }, - { "Etc/GMT+11" , 0x029D95 }, - { "Etc/GMT+12" , 0x029E23 }, - { "Etc/GMT+2" , 0x029F3E }, - { "Etc/GMT+3" , 0x029FCA }, - { "Etc/GMT+4" , 0x02A056 }, - { "Etc/GMT+5" , 0x02A0E2 }, - { "Etc/GMT+6" , 0x02A16E }, - { "Etc/GMT+7" , 0x02A1FA }, - { "Etc/GMT+8" , 0x02A286 }, - { "Etc/GMT+9" , 0x02A312 }, - { "Etc/GMT-0" , 0x029BAC }, - { "Etc/GMT-1" , 0x029C34 }, - { "Etc/GMT-10" , 0x029CC0 }, - { "Etc/GMT-11" , 0x029D4E }, - { "Etc/GMT-12" , 0x029DDC }, - { "Etc/GMT-13" , 0x029E6A }, - { "Etc/GMT-14" , 0x029EB1 }, - { "Etc/GMT-2" , 0x029EF8 }, - { "Etc/GMT-3" , 0x029F84 }, - { "Etc/GMT-4" , 0x02A010 }, - { "Etc/GMT-5" , 0x02A09C }, - { "Etc/GMT-6" , 0x02A128 }, - { "Etc/GMT-7" , 0x02A1B4 }, - { "Etc/GMT-8" , 0x02A240 }, - { "Etc/GMT-9" , 0x02A2CC }, - { "Etc/GMT0" , 0x029B68 }, - { "Etc/Greenwich" , 0x02A358 }, - { "Etc/UCT" , 0x02A39C }, - { "Etc/Universal" , 0x02A3E0 }, - { "Etc/UTC" , 0x02A424 }, - { "Etc/Zulu" , 0x02A468 }, - { "Europe/Amsterdam" , 0x02A4AC }, - { "Europe/Andorra" , 0x02A8EA }, - { "Europe/Athens" , 0x02AB66 }, - { "Europe/Belfast" , 0x02AEA9 }, - { "Europe/Belgrade" , 0x02B3E0 }, - { "Europe/Berlin" , 0x02B6A9 }, - { "Europe/Bratislava" , 0x02BA0D }, - { "Europe/Brussels" , 0x02BD3F }, - { "Europe/Bucharest" , 0x02C176 }, - { "Europe/Budapest" , 0x02C4A0 }, - { "Europe/Busingen" , 0x02C813 }, - { "Europe/Chisinau" , 0x02CACA }, - { "Europe/Copenhagen" , 0x02CE58 }, - { "Europe/Dublin" , 0x02D162 }, - { "Europe/Gibraltar" , 0x02D673 }, - { "Europe/Guernsey" , 0x02DACA }, - { "Europe/Helsinki" , 0x02E001 }, - { "Europe/Isle_of_Man" , 0x02E2B7 }, - { "Europe/Istanbul" , 0x02E7EE }, - { "Europe/Jersey" , 0x02EBDB }, - { "Europe/Kaliningrad" , 0x02F112 }, - { "Europe/Kiev" , 0x02F378 }, - { "Europe/Lisbon" , 0x02F694 }, - { "Europe/Ljubljana" , 0x02FB98 }, - { "Europe/London" , 0x02FE61 }, - { "Europe/Luxembourg" , 0x030398 }, - { "Europe/Madrid" , 0x0307EE }, - { "Europe/Malta" , 0x030BB4 }, - { "Europe/Mariehamn" , 0x030F6D }, - { "Europe/Minsk" , 0x031223 }, - { "Europe/Monaco" , 0x031431 }, - { "Europe/Moscow" , 0x03186C }, - { "Europe/Nicosia" , 0x031ABD }, - { "Europe/Oslo" , 0x031DA5 }, - { "Europe/Paris" , 0x0320D7 }, - { "Europe/Podgorica" , 0x03251D }, - { "Europe/Prague" , 0x0327E6 }, - { "Europe/Riga" , 0x032B18 }, - { "Europe/Rome" , 0x032E5D }, - { "Europe/Samara" , 0x033220 }, - { "Europe/San_Marino" , 0x033453 }, - { "Europe/Sarajevo" , 0x033816 }, - { "Europe/Simferopol" , 0x033ADF }, - { "Europe/Skopje" , 0x033D2B }, - { "Europe/Sofia" , 0x033FF4 }, - { "Europe/Stockholm" , 0x0342FC }, - { "Europe/Tallinn" , 0x0345AB }, - { "Europe/Tirane" , 0x0348E5 }, - { "Europe/Tiraspol" , 0x034BEB }, - { "Europe/Uzhgorod" , 0x034F79 }, - { "Europe/Vaduz" , 0x035290 }, - { "Europe/Vatican" , 0x03553F }, - { "Europe/Vienna" , 0x035902 }, - { "Europe/Vilnius" , 0x035C2F }, - { "Europe/Volgograd" , 0x035F6E }, - { "Europe/Warsaw" , 0x03616E }, - { "Europe/Zagreb" , 0x03654F }, - { "Europe/Zaporozhye" , 0x036818 }, - { "Europe/Zurich" , 0x036B59 }, - { "Factory" , 0x036E08 }, - { "GB" , 0x036E79 }, - { "GB-Eire" , 0x0373B0 }, - { "GMT" , 0x0378E7 }, - { "GMT+0" , 0x0379B3 }, - { "GMT-0" , 0x03796F }, - { "GMT0" , 0x03792B }, - { "Greenwich" , 0x0379F7 }, - { "Hongkong" , 0x037A3B }, - { "HST" , 0x037BFD }, - { "Iceland" , 0x037C41 }, - { "Indian/Antananarivo" , 0x037DFA }, - { "Indian/Chagos" , 0x037E6E }, - { "Indian/Christmas" , 0x037ED0 }, - { "Indian/Cocos" , 0x037F14 }, - { "Indian/Comoro" , 0x037F58 }, - { "Indian/Kerguelen" , 0x037FAD }, - { "Indian/Mahe" , 0x038002 }, - { "Indian/Maldives" , 0x038057 }, - { "Indian/Mauritius" , 0x0380AC }, - { "Indian/Mayotte" , 0x038122 }, - { "Indian/Reunion" , 0x038177 }, - { "Iran" , 0x0381CC }, - { "Israel" , 0x03843A }, - { "Jamaica" , 0x038769 }, - { "Japan" , 0x03882E }, - { "Kwajalein" , 0x0388B7 }, - { "Libya" , 0x03891A }, - { "MET" , 0x038A23 }, - { "Mexico/BajaNorte" , 0x038D2C }, - { "Mexico/BajaSur" , 0x039095 }, - { "Mexico/General" , 0x0392DA }, - { "MST" , 0x039538 }, - { "MST7MDT" , 0x03957C }, - { "Navajo" , 0x0398CD }, - { "NZ" , 0x039C46 }, - { "NZ-CHAT" , 0x039FC4 }, - { "Pacific/Apia" , 0x03A2AC }, - { "Pacific/Auckland" , 0x03A448 }, - { "Pacific/Chatham" , 0x03A7D4 }, - { "Pacific/Chuuk" , 0x03AACB }, - { "Pacific/Easter" , 0x03AB24 }, - { "Pacific/Efate" , 0x03AE82 }, - { "Pacific/Enderbury" , 0x03AF48 }, - { "Pacific/Fakaofo" , 0x03AFB6 }, - { "Pacific/Fiji" , 0x03B007 }, - { "Pacific/Funafuti" , 0x03B19A }, - { "Pacific/Galapagos" , 0x03B1DE }, - { "Pacific/Gambier" , 0x03B256 }, - { "Pacific/Guadalcanal" , 0x03B2BB }, - { "Pacific/Guam" , 0x03B310 }, - { "Pacific/Honolulu" , 0x03B366 }, - { "Pacific/Johnston" , 0x03B3DD }, - { "Pacific/Kiritimati" , 0x03B45C }, - { "Pacific/Kosrae" , 0x03B4C7 }, - { "Pacific/Kwajalein" , 0x03B524 }, - { "Pacific/Majuro" , 0x03B590 }, - { "Pacific/Marquesas" , 0x03B5EF }, - { "Pacific/Midway" , 0x03B656 }, - { "Pacific/Nauru" , 0x03B6E0 }, - { "Pacific/Niue" , 0x03B758 }, - { "Pacific/Norfolk" , 0x03B7B6 }, - { "Pacific/Noumea" , 0x03B80B }, - { "Pacific/Pago_Pago" , 0x03B89B }, - { "Pacific/Palau" , 0x03B924 }, - { "Pacific/Pitcairn" , 0x03B968 }, - { "Pacific/Pohnpei" , 0x03B9BD }, - { "Pacific/Ponape" , 0x03BA12 }, - { "Pacific/Port_Moresby" , 0x03BA57 }, - { "Pacific/Rarotonga" , 0x03BA9B }, - { "Pacific/Saipan" , 0x03BB77 }, - { "Pacific/Samoa" , 0x03BBDA }, - { "Pacific/Tahiti" , 0x03BC63 }, - { "Pacific/Tarawa" , 0x03BCC8 }, - { "Pacific/Tongatapu" , 0x03BD1C }, - { "Pacific/Truk" , 0x03BDA8 }, - { "Pacific/Wake" , 0x03BDED }, - { "Pacific/Wallis" , 0x03BE3D }, - { "Pacific/Yap" , 0x03BE81 }, - { "Poland" , 0x03BEC6 }, - { "Portugal" , 0x03C2A7 }, - { "PRC" , 0x03C7A3 }, - { "PST8PDT" , 0x03C854 }, - { "ROC" , 0x03CBA5 }, - { "ROK" , 0x03CCBD }, - { "Singapore" , 0x03CD61 }, - { "Turkey" , 0x03CE18 }, - { "UCT" , 0x03D205 }, - { "Universal" , 0x03D249 }, - { "US/Alaska" , 0x03D28D }, - { "US/Aleutian" , 0x03D5F6 }, - { "US/Arizona" , 0x03D95C }, - { "US/Central" , 0x03D9EA }, - { "US/East-Indiana" , 0x03E3F4 }, - { "US/Eastern" , 0x03DEF5 }, - { "US/Hawaii" , 0x03E65E }, - { "US/Indiana-Starke" , 0x03E6CF }, - { "US/Michigan" , 0x03EA40 }, - { "US/Mountain" , 0x03ED77 }, - { "US/Pacific" , 0x03F0F0 }, - { "US/Pacific-New" , 0x03F4F5 }, - { "US/Samoa" , 0x03F8FA }, - { "UTC" , 0x03F983 }, - { "W-SU" , 0x03FC7A }, - { "WET" , 0x03F9C7 }, - { "Zulu" , 0x03FEB4 }, + { "Africa/Casablanca" , 0x0009A4 }, + { "Africa/Ceuta" , 0x000C06 }, + { "Africa/Conakry" , 0x000F0D }, + { "Africa/Dakar" , 0x000F78 }, + { "Africa/Dar_es_Salaam" , 0x000FDE }, + { "Africa/Djibouti" , 0x00104B }, + { "Africa/Douala" , 0x0010A0 }, + { "Africa/El_Aaiun" , 0x0010F5 }, + { "Africa/Freetown" , 0x001320 }, + { "Africa/Gaborone" , 0x00142F }, + { "Africa/Harare" , 0x00149C }, + { "Africa/Johannesburg" , 0x0014F1 }, + { "Africa/Juba" , 0x00155F }, + { "Africa/Kampala" , 0x001672 }, + { "Africa/Khartoum" , 0x0016F1 }, + { "Africa/Kigali" , 0x001804 }, + { "Africa/Kinshasa" , 0x001859 }, + { "Africa/Lagos" , 0x0018B4 }, + { "Africa/Libreville" , 0x001909 }, + { "Africa/Lome" , 0x00195E }, + { "Africa/Luanda" , 0x0019A2 }, + { "Africa/Lubumbashi" , 0x0019F7 }, + { "Africa/Lusaka" , 0x001A52 }, + { "Africa/Malabo" , 0x001AA7 }, + { "Africa/Maputo" , 0x001B0D }, + { "Africa/Maseru" , 0x001B62 }, + { "Africa/Mbabane" , 0x001BCA }, + { "Africa/Mogadishu" , 0x001C20 }, + { "Africa/Monrovia" , 0x001C7B }, + { "Africa/Nairobi" , 0x001CE1 }, + { "Africa/Ndjamena" , 0x001D60 }, + { "Africa/Niamey" , 0x001DCC }, + { "Africa/Nouakchott" , 0x001E3F }, + { "Africa/Ouagadougou" , 0x001EAA }, + { "Africa/Porto-Novo" , 0x001EFF }, + { "Africa/Sao_Tome" , 0x001F65 }, + { "Africa/Timbuktu" , 0x001FBA }, + { "Africa/Tripoli" , 0x002025 }, + { "Africa/Tunis" , 0x00212E }, + { "Africa/Windhoek" , 0x002240 }, + { "America/Adak" , 0x002487 }, + { "America/Anchorage" , 0x0027FD }, + { "America/Anguilla" , 0x002B71 }, + { "America/Antigua" , 0x002BC6 }, + { "America/Araguaina" , 0x002C2C }, + { "America/Argentina/Buenos_Aires" , 0x002D91 }, + { "America/Argentina/Catamarca" , 0x002F3F }, + { "America/Argentina/ComodRivadavia" , 0x003100 }, + { "America/Argentina/Cordoba" , 0x0032A6 }, + { "America/Argentina/Jujuy" , 0x00347B }, + { "America/Argentina/La_Rioja" , 0x00362F }, + { "America/Argentina/Mendoza" , 0x0037E7 }, + { "America/Argentina/Rio_Gallegos" , 0x0039A7 }, + { "America/Argentina/Salta" , 0x003B5C }, + { "America/Argentina/San_Juan" , 0x003D08 }, + { "America/Argentina/San_Luis" , 0x003EC0 }, + { "America/Argentina/Tucuman" , 0x004086 }, + { "America/Argentina/Ushuaia" , 0x004242 }, + { "America/Aruba" , 0x0043FD }, + { "America/Asuncion" , 0x004463 }, + { "America/Atikokan" , 0x004748 }, + { "America/Atka" , 0x00481E }, + { "America/Bahia" , 0x004B84 }, + { "America/Bahia_Banderas" , 0x004D17 }, + { "America/Barbados" , 0x004F90 }, + { "America/Belem" , 0x00502A }, + { "America/Belize" , 0x005125 }, + { "America/Blanc-Sablon" , 0x0052A1 }, + { "America/Boa_Vista" , 0x005355 }, + { "America/Bogota" , 0x00545E }, + { "America/Boise" , 0x0054CA }, + { "America/Buenos_Aires" , 0x005861 }, + { "America/Cambridge_Bay" , 0x0059FA }, + { "America/Campo_Grande" , 0x005D22 }, + { "America/Cancun" , 0x006011 }, + { "America/Caracas" , 0x006253 }, + { "America/Catamarca" , 0x0062BA }, + { "America/Cayenne" , 0x006460 }, + { "America/Cayman" , 0x0064C2 }, + { "America/Chicago" , 0x006517 }, + { "America/Chihuahua" , 0x006A2E }, + { "America/Coral_Harbour" , 0x006C99 }, + { "America/Cordoba" , 0x006D2B }, + { "America/Costa_Rica" , 0x006ED1 }, + { "America/Creston" , 0x006F5B }, + { "America/Cuiaba" , 0x006FE7 }, + { "America/Curacao" , 0x0072C5 }, + { "America/Danmarkshavn" , 0x00732B }, + { "America/Dawson" , 0x00746F }, + { "America/Dawson_Creek" , 0x00778C }, + { "America/Denver" , 0x007966 }, + { "America/Detroit" , 0x007CEC }, + { "America/Dominica" , 0x00804B }, + { "America/Edmonton" , 0x0080A0 }, + { "America/Eirunepe" , 0x008458 }, + { "America/El_Salvador" , 0x008570 }, + { "America/Ensenada" , 0x0085E5 }, + { "America/Fort_Wayne" , 0x008A8C }, + { "America/Fortaleza" , 0x00894E }, + { "America/Glace_Bay" , 0x008CF6 }, + { "America/Godthab" , 0x00906D }, + { "America/Goose_Bay" , 0x009331 }, + { "America/Grand_Turk" , 0x0097EE }, + { "America/Grenada" , 0x009A9D }, + { "America/Guadeloupe" , 0x009AF2 }, + { "America/Guatemala" , 0x009B47 }, + { "America/Guayaquil" , 0x009BD0 }, + { "America/Guyana" , 0x009C2D }, + { "America/Halifax" , 0x009CAE }, + { "America/Havana" , 0x00A1C4 }, + { "America/Hermosillo" , 0x00A537 }, + { "America/Indiana/Indianapolis" , 0x00A615 }, + { "America/Indiana/Knox" , 0x00A8A6 }, + { "America/Indiana/Marengo" , 0x00AC3D }, + { "America/Indiana/Petersburg" , 0x00AEE3 }, + { "America/Indiana/Tell_City" , 0x00B430 }, + { "America/Indiana/Vevay" , 0x00B6C9 }, + { "America/Indiana/Vincennes" , 0x00B904 }, + { "America/Indiana/Winamac" , 0x00BBB8 }, + { "America/Indianapolis" , 0x00B1C6 }, + { "America/Inuvik" , 0x00BE71 }, + { "America/Iqaluit" , 0x00C168 }, + { "America/Jamaica" , 0x00C48A }, + { "America/Jujuy" , 0x00C54F }, + { "America/Juneau" , 0x00C6F9 }, + { "America/Kentucky/Louisville" , 0x00CA77 }, + { "America/Kentucky/Monticello" , 0x00CE95 }, + { "America/Knox_IN" , 0x00D21A }, + { "America/Kralendijk" , 0x00D58B }, + { "America/La_Paz" , 0x00D5F1 }, + { "America/Lima" , 0x00D658 }, + { "America/Los_Angeles" , 0x00D700 }, + { "America/Louisville" , 0x00DB11 }, + { "America/Lower_Princes" , 0x00DF06 }, + { "America/Maceio" , 0x00DF6C }, + { "America/Managua" , 0x00E0A6 }, + { "America/Manaus" , 0x00E159 }, + { "America/Marigot" , 0x00E25B }, + { "America/Martinique" , 0x00E2B0 }, + { "America/Matamoros" , 0x00E31C }, + { "America/Mazatlan" , 0x00E575 }, + { "America/Mendoza" , 0x00E7E2 }, + { "America/Menominee" , 0x00E996 }, + { "America/Merida" , 0x00ED17 }, + { "America/Metlakatla" , 0x00EF52 }, + { "America/Mexico_City" , 0x00F08C }, + { "America/Miquelon" , 0x00F307 }, + { "America/Moncton" , 0x00F579 }, + { "America/Monterrey" , 0x00FA10 }, + { "America/Montevideo" , 0x00FC73 }, + { "America/Montreal" , 0x00FF85 }, + { "America/Montserrat" , 0x010475 }, + { "America/Nassau" , 0x0104CA }, + { "America/New_York" , 0x01080F }, + { "America/Nipigon" , 0x010D1A }, + { "America/Nome" , 0x01106B }, + { "America/Noronha" , 0x0113E9 }, + { "America/North_Dakota/Beulah" , 0x011519 }, + { "America/North_Dakota/Center" , 0x0118AD }, + { "America/North_Dakota/New_Salem" , 0x011C41 }, + { "America/Ojinaga" , 0x011FEA }, + { "America/Panama" , 0x01224B }, + { "America/Pangnirtung" , 0x0122A0 }, + { "America/Paramaribo" , 0x0125D6 }, + { "America/Phoenix" , 0x012668 }, + { "America/Port-au-Prince" , 0x012726 }, + { "America/Port_of_Spain" , 0x012A4A }, + { "America/Porto_Acre" , 0x012946 }, + { "America/Porto_Velho" , 0x012A9F }, + { "America/Puerto_Rico" , 0x012B95 }, + { "America/Rainy_River" , 0x012C00 }, + { "America/Rankin_Inlet" , 0x012F38 }, + { "America/Recife" , 0x01321E }, + { "America/Regina" , 0x013348 }, + { "America/Resolute" , 0x013506 }, + { "America/Rio_Branco" , 0x0137F7 }, + { "America/Rosario" , 0x0138FF }, + { "America/Santa_Isabel" , 0x013AA5 }, + { "America/Santarem" , 0x013E48 }, + { "America/Santiago" , 0x013F4D }, + { "America/Santo_Domingo" , 0x0142F6 }, + { "America/Sao_Paulo" , 0x0143BC }, + { "America/Scoresbysund" , 0x0146CB }, + { "America/Shiprock" , 0x0149B9 }, + { "America/Sitka" , 0x014D32 }, + { "America/St_Barthelemy" , 0x0150BA }, + { "America/St_Johns" , 0x01510F }, + { "America/St_Kitts" , 0x015662 }, + { "America/St_Lucia" , 0x0156B7 }, + { "America/St_Thomas" , 0x01570C }, + { "America/St_Vincent" , 0x015761 }, + { "America/Swift_Current" , 0x0157B6 }, + { "America/Tegucigalpa" , 0x0158D7 }, + { "America/Thule" , 0x015956 }, + { "America/Thunder_Bay" , 0x015B9D }, + { "America/Tijuana" , 0x015EE6 }, + { "America/Toronto" , 0x01627F }, + { "America/Tortola" , 0x01679F }, + { "America/Vancouver" , 0x0167F4 }, + { "America/Virgin" , 0x016C31 }, + { "America/Whitehorse" , 0x016C86 }, + { "America/Winnipeg" , 0x016FA3 }, + { "America/Yakutat" , 0x0173E3 }, + { "America/Yellowknife" , 0x01774E }, + { "Antarctica/Casey" , 0x017A5E }, + { "Antarctica/Davis" , 0x017AFB }, + { "Antarctica/DumontDUrville" , 0x017B9C }, + { "Antarctica/Macquarie" , 0x017C2E }, + { "Antarctica/Mawson" , 0x017E75 }, + { "Antarctica/McMurdo" , 0x017EF1 }, + { "Antarctica/Palmer" , 0x01829C }, + { "Antarctica/Rothera" , 0x0185B8 }, + { "Antarctica/South_Pole" , 0x01862E }, + { "Antarctica/Syowa" , 0x0189AC }, + { "Antarctica/Troll" , 0x018A1A }, + { "Antarctica/Vostok" , 0x018BEC }, + { "Arctic/Longyearbyen" , 0x018C5D }, + { "Asia/Aden" , 0x018F8F }, + { "Asia/Almaty" , 0x018FE4 }, + { "Asia/Amman" , 0x019163 }, + { "Asia/Anadyr" , 0x019419 }, + { "Asia/Aqtau" , 0x0195FE }, + { "Asia/Aqtobe" , 0x0197FD }, + { "Asia/Ashgabat" , 0x0199B5 }, + { "Asia/Ashkhabad" , 0x019AD2 }, + { "Asia/Baghdad" , 0x019BEF }, + { "Asia/Bahrain" , 0x019D64 }, + { "Asia/Baku" , 0x019DCA }, + { "Asia/Bangkok" , 0x01A0B2 }, + { "Asia/Beirut" , 0x01A107 }, + { "Asia/Bishkek" , 0x01A414 }, + { "Asia/Brunei" , 0x01A5C0 }, + { "Asia/Calcutta" , 0x01A622 }, + { "Asia/Choibalsan" , 0x01A69B }, + { "Asia/Chongqing" , 0x01A814 }, + { "Asia/Chungking" , 0x01A903 }, + { "Asia/Colombo" , 0x01A9B2 }, + { "Asia/Dacca" , 0x01AA4E }, + { "Asia/Damascus" , 0x01AAF4 }, + { "Asia/Dhaka" , 0x01AE44 }, + { "Asia/Dili" , 0x01AEEA }, + { "Asia/Dubai" , 0x01AF74 }, + { "Asia/Dushanbe" , 0x01AFC9 }, + { "Asia/Gaza" , 0x01B0CC }, + { "Asia/Harbin" , 0x01B41F }, + { "Asia/Hebron" , 0x01B506 }, + { "Asia/Ho_Chi_Minh" , 0x01B862 }, + { "Asia/Hong_Kong" , 0x01B8DA }, + { "Asia/Hovd" , 0x01BA9C }, + { "Asia/Irkutsk" , 0x01BC14 }, + { "Asia/Istanbul" , 0x01BDFA }, + { "Asia/Jakarta" , 0x01C1E7 }, + { "Asia/Jayapura" , 0x01C291 }, + { "Asia/Jerusalem" , 0x01C32D }, + { "Asia/Kabul" , 0x01C65C }, + { "Asia/Kamchatka" , 0x01C6AD }, + { "Asia/Karachi" , 0x01C889 }, + { "Asia/Kashgar" , 0x01C93E }, + { "Asia/Kathmandu" , 0x01CA0F }, + { "Asia/Katmandu" , 0x01CA75 }, + { "Asia/Khandyga" , 0x01CADB }, + { "Asia/Kolkata" , 0x01CD00 }, + { "Asia/Krasnoyarsk" , 0x01CD79 }, + { "Asia/Kuala_Lumpur" , 0x01CF61 }, + { "Asia/Kuching" , 0x01D01E }, + { "Asia/Kuwait" , 0x01D10C }, + { "Asia/Macao" , 0x01D161 }, + { "Asia/Macau" , 0x01D29C }, + { "Asia/Magadan" , 0x01D3D7 }, + { "Asia/Makassar" , 0x01D5B9 }, + { "Asia/Manila" , 0x01D67E }, + { "Asia/Muscat" , 0x01D703 }, + { "Asia/Nicosia" , 0x01D758 }, + { "Asia/Novokuznetsk" , 0x01DA40 }, + { "Asia/Novosibirsk" , 0x01DC42 }, + { "Asia/Omsk" , 0x01DE2D }, + { "Asia/Oral" , 0x01E014 }, + { "Asia/Phnom_Penh" , 0x01E1E4 }, + { "Asia/Pontianak" , 0x01E25C }, + { "Asia/Pyongyang" , 0x01E31E }, + { "Asia/Qatar" , 0x01E38B }, + { "Asia/Qyzylorda" , 0x01E3F1 }, + { "Asia/Rangoon" , 0x01E5C7 }, + { "Asia/Riyadh" , 0x01E63F }, + { "Asia/Saigon" , 0x01E694 }, + { "Asia/Sakhalin" , 0x01E70C }, + { "Asia/Samarkand" , 0x01E903 }, + { "Asia/Seoul" , 0x01EA39 }, + { "Asia/Shanghai" , 0x01EADD }, + { "Asia/Singapore" , 0x01EBBD }, + { "Asia/Taipei" , 0x01EC74 }, + { "Asia/Tashkent" , 0x01ED8C }, + { "Asia/Tbilisi" , 0x01EEBD }, + { "Asia/Tehran" , 0x01F077 }, + { "Asia/Tel_Aviv" , 0x01F2E5 }, + { "Asia/Thimbu" , 0x01F614 }, + { "Asia/Thimphu" , 0x01F67A }, + { "Asia/Tokyo" , 0x01F6E0 }, + { "Asia/Ujung_Pandang" , 0x01F769 }, + { "Asia/Ulaanbaatar" , 0x01F7E6 }, + { "Asia/Ulan_Bator" , 0x01F941 }, + { "Asia/Urumqi" , 0x01FA8E }, + { "Asia/Ust-Nera" , 0x01FB55 }, + { "Asia/Vientiane" , 0x01FD5A }, + { "Asia/Vladivostok" , 0x01FDD2 }, + { "Asia/Yakutsk" , 0x01FFBE }, + { "Asia/Yekaterinburg" , 0x0201A3 }, + { "Asia/Yerevan" , 0x0203AE }, + { "Atlantic/Azores" , 0x0205AE }, + { "Atlantic/Bermuda" , 0x020AB1 }, + { "Atlantic/Canary" , 0x020D92 }, + { "Atlantic/Cape_Verde" , 0x021068 }, + { "Atlantic/Faeroe" , 0x0210E1 }, + { "Atlantic/Faroe" , 0x021385 }, + { "Atlantic/Jan_Mayen" , 0x021629 }, + { "Atlantic/Madeira" , 0x02195B }, + { "Atlantic/Reykjavik" , 0x021E64 }, + { "Atlantic/South_Georgia" , 0x02201D }, + { "Atlantic/St_Helena" , 0x02222F }, + { "Atlantic/Stanley" , 0x022061 }, + { "Australia/ACT" , 0x022284 }, + { "Australia/Adelaide" , 0x0225A1 }, + { "Australia/Brisbane" , 0x0228CD }, + { "Australia/Broken_Hill" , 0x022994 }, + { "Australia/Canberra" , 0x022CD2 }, + { "Australia/Currie" , 0x022FEF }, + { "Australia/Darwin" , 0x023322 }, + { "Australia/Eucla" , 0x0233A8 }, + { "Australia/Hobart" , 0x02347D }, + { "Australia/LHI" , 0x0237DB }, + { "Australia/Lindeman" , 0x023A76 }, + { "Australia/Lord_Howe" , 0x023B57 }, + { "Australia/Melbourne" , 0x023E02 }, + { "Australia/North" , 0x024127 }, + { "Australia/NSW" , 0x02419B }, + { "Australia/Perth" , 0x0244B8 }, + { "Australia/Queensland" , 0x024590 }, + { "Australia/South" , 0x02463C }, + { "Australia/Sydney" , 0x024959 }, + { "Australia/Tasmania" , 0x024C96 }, + { "Australia/Victoria" , 0x024FDB }, + { "Australia/West" , 0x0252F8 }, + { "Australia/Yancowinna" , 0x0253AE }, + { "Brazil/Acre" , 0x0256D0 }, + { "Brazil/DeNoronha" , 0x0257D4 }, + { "Brazil/East" , 0x0258F4 }, + { "Brazil/West" , 0x025BD1 }, + { "Canada/Atlantic" , 0x025CC9 }, + { "Canada/Central" , 0x0261B1 }, + { "Canada/East-Saskatchewan" , 0x026ABB }, + { "Canada/Eastern" , 0x0265CB }, + { "Canada/Mountain" , 0x026C44 }, + { "Canada/Newfoundland" , 0x026FBA }, + { "Canada/Pacific" , 0x0274E5 }, + { "Canada/Saskatchewan" , 0x0278FE }, + { "Canada/Yukon" , 0x027A87 }, + { "CET" , 0x027D8A }, + { "Chile/Continental" , 0x028093 }, + { "Chile/EasterIsland" , 0x02842E }, + { "CST6CDT" , 0x028770 }, + { "Cuba" , 0x028AC1 }, + { "EET" , 0x028E34 }, + { "Egypt" , 0x0290E7 }, + { "Eire" , 0x0294D6 }, + { "EST" , 0x0299E7 }, + { "EST5EDT" , 0x029A2B }, + { "Etc/GMT" , 0x029D7C }, + { "Etc/GMT+0" , 0x029E48 }, + { "Etc/GMT+1" , 0x029ED2 }, + { "Etc/GMT+10" , 0x029F5F }, + { "Etc/GMT+11" , 0x029FED }, + { "Etc/GMT+12" , 0x02A07B }, + { "Etc/GMT+2" , 0x02A196 }, + { "Etc/GMT+3" , 0x02A222 }, + { "Etc/GMT+4" , 0x02A2AE }, + { "Etc/GMT+5" , 0x02A33A }, + { "Etc/GMT+6" , 0x02A3C6 }, + { "Etc/GMT+7" , 0x02A452 }, + { "Etc/GMT+8" , 0x02A4DE }, + { "Etc/GMT+9" , 0x02A56A }, + { "Etc/GMT-0" , 0x029E04 }, + { "Etc/GMT-1" , 0x029E8C }, + { "Etc/GMT-10" , 0x029F18 }, + { "Etc/GMT-11" , 0x029FA6 }, + { "Etc/GMT-12" , 0x02A034 }, + { "Etc/GMT-13" , 0x02A0C2 }, + { "Etc/GMT-14" , 0x02A109 }, + { "Etc/GMT-2" , 0x02A150 }, + { "Etc/GMT-3" , 0x02A1DC }, + { "Etc/GMT-4" , 0x02A268 }, + { "Etc/GMT-5" , 0x02A2F4 }, + { "Etc/GMT-6" , 0x02A380 }, + { "Etc/GMT-7" , 0x02A40C }, + { "Etc/GMT-8" , 0x02A498 }, + { "Etc/GMT-9" , 0x02A524 }, + { "Etc/GMT0" , 0x029DC0 }, + { "Etc/Greenwich" , 0x02A5B0 }, + { "Etc/UCT" , 0x02A5F4 }, + { "Etc/Universal" , 0x02A638 }, + { "Etc/UTC" , 0x02A67C }, + { "Etc/Zulu" , 0x02A6C0 }, + { "Europe/Amsterdam" , 0x02A704 }, + { "Europe/Andorra" , 0x02AB42 }, + { "Europe/Athens" , 0x02ADBE }, + { "Europe/Belfast" , 0x02B101 }, + { "Europe/Belgrade" , 0x02B638 }, + { "Europe/Berlin" , 0x02B901 }, + { "Europe/Bratislava" , 0x02BC65 }, + { "Europe/Brussels" , 0x02BF97 }, + { "Europe/Bucharest" , 0x02C3CE }, + { "Europe/Budapest" , 0x02C6F8 }, + { "Europe/Busingen" , 0x02CA6B }, + { "Europe/Chisinau" , 0x02CD22 }, + { "Europe/Copenhagen" , 0x02D0B0 }, + { "Europe/Dublin" , 0x02D3BA }, + { "Europe/Gibraltar" , 0x02D8CB }, + { "Europe/Guernsey" , 0x02DD22 }, + { "Europe/Helsinki" , 0x02E259 }, + { "Europe/Isle_of_Man" , 0x02E50F }, + { "Europe/Istanbul" , 0x02EA46 }, + { "Europe/Jersey" , 0x02EE33 }, + { "Europe/Kaliningrad" , 0x02F36A }, + { "Europe/Kiev" , 0x02F5D0 }, + { "Europe/Lisbon" , 0x02F8EC }, + { "Europe/Ljubljana" , 0x02FDF0 }, + { "Europe/London" , 0x0300B9 }, + { "Europe/Luxembourg" , 0x0305F0 }, + { "Europe/Madrid" , 0x030A46 }, + { "Europe/Malta" , 0x030E0C }, + { "Europe/Mariehamn" , 0x0311C5 }, + { "Europe/Minsk" , 0x03147B }, + { "Europe/Monaco" , 0x031689 }, + { "Europe/Moscow" , 0x031AC4 }, + { "Europe/Nicosia" , 0x031D15 }, + { "Europe/Oslo" , 0x031FFD }, + { "Europe/Paris" , 0x03232F }, + { "Europe/Podgorica" , 0x032775 }, + { "Europe/Prague" , 0x032A3E }, + { "Europe/Riga" , 0x032D70 }, + { "Europe/Rome" , 0x0330B5 }, + { "Europe/Samara" , 0x033478 }, + { "Europe/San_Marino" , 0x0336AB }, + { "Europe/Sarajevo" , 0x033A6E }, + { "Europe/Simferopol" , 0x033D37 }, + { "Europe/Skopje" , 0x033F83 }, + { "Europe/Sofia" , 0x03424C }, + { "Europe/Stockholm" , 0x034554 }, + { "Europe/Tallinn" , 0x034803 }, + { "Europe/Tirane" , 0x034B3D }, + { "Europe/Tiraspol" , 0x034E43 }, + { "Europe/Uzhgorod" , 0x0351D1 }, + { "Europe/Vaduz" , 0x0354E8 }, + { "Europe/Vatican" , 0x035797 }, + { "Europe/Vienna" , 0x035B5A }, + { "Europe/Vilnius" , 0x035E87 }, + { "Europe/Volgograd" , 0x0361C6 }, + { "Europe/Warsaw" , 0x0363C6 }, + { "Europe/Zagreb" , 0x0367A7 }, + { "Europe/Zaporozhye" , 0x036A70 }, + { "Europe/Zurich" , 0x036DB1 }, + { "Factory" , 0x037060 }, + { "GB" , 0x0370D1 }, + { "GB-Eire" , 0x037608 }, + { "GMT" , 0x037B3F }, + { "GMT+0" , 0x037C0B }, + { "GMT-0" , 0x037BC7 }, + { "GMT0" , 0x037B83 }, + { "Greenwich" , 0x037C4F }, + { "Hongkong" , 0x037C93 }, + { "HST" , 0x037E55 }, + { "Iceland" , 0x037E99 }, + { "Indian/Antananarivo" , 0x038052 }, + { "Indian/Chagos" , 0x0380C6 }, + { "Indian/Christmas" , 0x038128 }, + { "Indian/Cocos" , 0x03816C }, + { "Indian/Comoro" , 0x0381B0 }, + { "Indian/Kerguelen" , 0x038205 }, + { "Indian/Mahe" , 0x03825A }, + { "Indian/Maldives" , 0x0382AF }, + { "Indian/Mauritius" , 0x038304 }, + { "Indian/Mayotte" , 0x03837A }, + { "Indian/Reunion" , 0x0383CF }, + { "Iran" , 0x038424 }, + { "Israel" , 0x038692 }, + { "Jamaica" , 0x0389C1 }, + { "Japan" , 0x038A86 }, + { "Kwajalein" , 0x038B0F }, + { "Libya" , 0x038B72 }, + { "MET" , 0x038C7B }, + { "Mexico/BajaNorte" , 0x038F84 }, + { "Mexico/BajaSur" , 0x0392ED }, + { "Mexico/General" , 0x039532 }, + { "MST" , 0x039790 }, + { "MST7MDT" , 0x0397D4 }, + { "Navajo" , 0x039B25 }, + { "NZ" , 0x039E9E }, + { "NZ-CHAT" , 0x03A21C }, + { "Pacific/Apia" , 0x03A504 }, + { "Pacific/Auckland" , 0x03A6A0 }, + { "Pacific/Chatham" , 0x03AA2C }, + { "Pacific/Chuuk" , 0x03AD23 }, + { "Pacific/Easter" , 0x03AD7C }, + { "Pacific/Efate" , 0x03B0DA }, + { "Pacific/Enderbury" , 0x03B1A0 }, + { "Pacific/Fakaofo" , 0x03B20E }, + { "Pacific/Fiji" , 0x03B25F }, + { "Pacific/Funafuti" , 0x03B3F2 }, + { "Pacific/Galapagos" , 0x03B436 }, + { "Pacific/Gambier" , 0x03B4AE }, + { "Pacific/Guadalcanal" , 0x03B513 }, + { "Pacific/Guam" , 0x03B568 }, + { "Pacific/Honolulu" , 0x03B5BE }, + { "Pacific/Johnston" , 0x03B635 }, + { "Pacific/Kiritimati" , 0x03B6B4 }, + { "Pacific/Kosrae" , 0x03B71F }, + { "Pacific/Kwajalein" , 0x03B77C }, + { "Pacific/Majuro" , 0x03B7E8 }, + { "Pacific/Marquesas" , 0x03B847 }, + { "Pacific/Midway" , 0x03B8AE }, + { "Pacific/Nauru" , 0x03B938 }, + { "Pacific/Niue" , 0x03B9B0 }, + { "Pacific/Norfolk" , 0x03BA0E }, + { "Pacific/Noumea" , 0x03BA63 }, + { "Pacific/Pago_Pago" , 0x03BAF3 }, + { "Pacific/Palau" , 0x03BB7C }, + { "Pacific/Pitcairn" , 0x03BBC0 }, + { "Pacific/Pohnpei" , 0x03BC15 }, + { "Pacific/Ponape" , 0x03BC6A }, + { "Pacific/Port_Moresby" , 0x03BCAF }, + { "Pacific/Rarotonga" , 0x03BCF3 }, + { "Pacific/Saipan" , 0x03BDCF }, + { "Pacific/Samoa" , 0x03BE32 }, + { "Pacific/Tahiti" , 0x03BEBB }, + { "Pacific/Tarawa" , 0x03BF20 }, + { "Pacific/Tongatapu" , 0x03BF74 }, + { "Pacific/Truk" , 0x03C000 }, + { "Pacific/Wake" , 0x03C045 }, + { "Pacific/Wallis" , 0x03C095 }, + { "Pacific/Yap" , 0x03C0D9 }, + { "Poland" , 0x03C11E }, + { "Portugal" , 0x03C4FF }, + { "PRC" , 0x03C9FB }, + { "PST8PDT" , 0x03CAAC }, + { "ROC" , 0x03CDFD }, + { "ROK" , 0x03CF15 }, + { "Singapore" , 0x03CFB9 }, + { "Turkey" , 0x03D070 }, + { "UCT" , 0x03D45D }, + { "Universal" , 0x03D4A1 }, + { "US/Alaska" , 0x03D4E5 }, + { "US/Aleutian" , 0x03D84E }, + { "US/Arizona" , 0x03DBB4 }, + { "US/Central" , 0x03DC42 }, + { "US/East-Indiana" , 0x03E64C }, + { "US/Eastern" , 0x03E14D }, + { "US/Hawaii" , 0x03E8B6 }, + { "US/Indiana-Starke" , 0x03E927 }, + { "US/Michigan" , 0x03EC98 }, + { "US/Mountain" , 0x03EFCF }, + { "US/Pacific" , 0x03F348 }, + { "US/Pacific-New" , 0x03F74D }, + { "US/Samoa" , 0x03FB52 }, + { "UTC" , 0x03FBDB }, + { "W-SU" , 0x03FED2 }, + { "WET" , 0x03FC1F }, + { "Zulu" , 0x04010C }, }; /* This is a generated file, do not modify */ -const unsigned char timelib_timezone_db_data_builtin[261880] = { +const unsigned char timelib_timezone_db_data_builtin[262480] = { /* Africa/Abidjan */ @@ -712,7 +712,7 @@ const unsigned char timelib_timezone_db_data_builtin[261880] = { /* Africa/Cairo */ 0x50, 0x48, 0x50, 0x31, 0x01, 0x45, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x7A, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0xC8, 0x93, 0xB4, 0xE0, +0x00, 0x00, 0x00, 0xB6, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0xC8, 0x93, 0xB4, 0xE0, 0xC8, 0xFA, 0x7B, 0xD0, 0xC9, 0xFC, 0xEF, 0xE0, 0xCA, 0xC7, 0xE8, 0xD0, 0xCB, 0xCB, 0xAE, 0x60, 0xCC, 0xDF, 0x29, 0xD0, 0xCD, 0xAC, 0xE1, 0xE0, 0xCE, 0xC6, 0xF4, 0xD0, 0xCF, 0x8F, 0x66, 0xE0, 0xD0, 0xA9, 0x79, 0xD0, 0xD1, 0x84, 0x60, 0xE0, 0xD2, 0x8A, 0xAD, 0x50, 0xE8, 0x36, 0x63, 0x60, @@ -743,18 +743,36 @@ const unsigned char timelib_timezone_db_data_builtin[261880] = { 0x43, 0x3C, 0x55, 0xD0, 0x44, 0x51, 0x3E, 0xE0, 0x45, 0x12, 0xFD, 0x50, 0x46, 0x31, 0x20, 0xE0, 0x46, 0xE0, 0x6A, 0x50, 0x48, 0x11, 0x02, 0xE0, 0x48, 0xB7, 0x11, 0xD0, 0x49, 0xF0, 0xE4, 0xE0, 0x4A, 0x8D, 0xB9, 0x50, 0x4B, 0xDA, 0x01, 0x60, 0x4C, 0x61, 0xBD, 0xD0, 0x4C, 0x89, 0x58, 0xE0, -0x4C, 0xA4, 0xFA, 0x50, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, +0x4C, 0xA4, 0xFA, 0x50, 0x53, 0x75, 0x38, 0xE0, 0x53, 0xAF, 0x3A, 0xE0, 0x53, 0xD6, 0xC7, 0xE0, +0x54, 0x24, 0x82, 0x50, 0x55, 0x39, 0x6B, 0x60, 0x55, 0x81, 0xED, 0xE0, 0x55, 0xA9, 0x7A, 0xE0, +0x56, 0x04, 0x64, 0x50, 0x57, 0x22, 0x87, 0xE0, 0x57, 0x55, 0xF2, 0x60, 0x57, 0x7D, 0x7F, 0x60, +0x57, 0xED, 0x80, 0xD0, 0x59, 0x02, 0x69, 0xE0, 0x59, 0x28, 0xA5, 0x60, 0x59, 0x50, 0x32, 0x60, +0x59, 0xCD, 0x62, 0xD0, 0x5A, 0xE2, 0x4B, 0xE0, 0x5A, 0xFB, 0x58, 0x60, 0x5B, 0x22, 0xE5, 0x60, +0x5B, 0xAD, 0x44, 0xD0, 0x5C, 0xC2, 0x2D, 0xE0, 0x5C, 0xCF, 0x5C, 0xE0, 0x5C, 0xF6, 0xE9, 0xE0, +0x5D, 0x8D, 0x26, 0xD0, 0x5E, 0xC9, 0x9C, 0xE0, 0x5F, 0x6D, 0x08, 0xD0, 0x60, 0x9C, 0x4F, 0xE0, +0x61, 0x56, 0x25, 0x50, 0x62, 0x70, 0x54, 0x60, 0x63, 0x36, 0x07, 0x50, 0x64, 0x4A, 0xF0, 0x60, +0x65, 0x15, 0xE9, 0x50, 0x66, 0x2A, 0xD2, 0x60, 0x66, 0xF5, 0xCB, 0x50, 0x68, 0x0A, 0xB4, 0x60, +0x68, 0xD5, 0xAD, 0x50, 0x69, 0xEA, 0x96, 0x60, 0x6A, 0xB5, 0x8F, 0x50, 0x6B, 0xD3, 0xB2, 0xE0, +0x6C, 0x9E, 0xAB, 0xD0, 0x6D, 0xB3, 0x94, 0xE0, 0x6E, 0x7E, 0x8D, 0xD0, 0x6F, 0x93, 0x76, 0xE0, +0x70, 0x5E, 0x6F, 0xD0, 0x71, 0x73, 0x58, 0xE0, 0x72, 0x3E, 0x51, 0xD0, 0x73, 0x53, 0x3A, 0xE0, +0x74, 0x1E, 0x33, 0xD0, 0x75, 0x3C, 0x57, 0x60, 0x76, 0x07, 0x50, 0x50, 0x77, 0x1C, 0x39, 0x60, +0x77, 0xE7, 0x32, 0x50, 0x78, 0xFC, 0x1B, 0x60, 0x79, 0xC7, 0x14, 0x50, 0x7A, 0xDB, 0xFD, 0x60, +0x7B, 0xA6, 0xF6, 0x50, 0x7C, 0xBB, 0xDF, 0x60, 0x7D, 0x86, 0xD8, 0x50, 0x7E, 0x9B, 0xC1, 0x60, +0x7F, 0x66, 0xBA, 0x50, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x01, 0x00, 0x03, 0x00, 0x00, -0x2A, 0x30, 0x01, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x05, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x00, -0x00, 0x00, 0x1C, 0x20, 0x00, 0x05, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x00, -0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB7, 0x2E, 0x88, 0x01, 0x42, 0x57, 0x88, 0x00, -0x00, 0x00, 0x00, +0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x01, 0x00, 0x03, 0x00, 0x03, +0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, +0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, +0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, +0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x00, +0x00, 0x00, 0x1C, 0x20, 0x00, 0x05, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x00, 0x00, 0x00, 0x1C, 0x20, +0x00, 0x05, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, +0x00, 0x00, 0x00, 0x00, 0xB7, 0x2E, 0x88, 0x01, 0x42, 0x57, 0x88, 0x00, 0x00, 0x00, 0x00, /* Africa/Casablanca */ 0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -12036,7 +12054,7 @@ const unsigned char timelib_timezone_db_data_builtin[261880] = { /* Egypt */ 0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x7A, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0xC8, 0x93, 0xB4, 0xE0, +0x00, 0x00, 0x00, 0xB6, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0xC8, 0x93, 0xB4, 0xE0, 0xC8, 0xFA, 0x7B, 0xD0, 0xC9, 0xFC, 0xEF, 0xE0, 0xCA, 0xC7, 0xE8, 0xD0, 0xCB, 0xCB, 0xAE, 0x60, 0xCC, 0xDF, 0x29, 0xD0, 0xCD, 0xAC, 0xE1, 0xE0, 0xCE, 0xC6, 0xF4, 0xD0, 0xCF, 0x8F, 0x66, 0xE0, 0xD0, 0xA9, 0x79, 0xD0, 0xD1, 0x84, 0x60, 0xE0, 0xD2, 0x8A, 0xAD, 0x50, 0xE8, 0x36, 0x63, 0x60, @@ -12067,18 +12085,36 @@ const unsigned char timelib_timezone_db_data_builtin[261880] = { 0x43, 0x3C, 0x55, 0xD0, 0x44, 0x51, 0x3E, 0xE0, 0x45, 0x12, 0xFD, 0x50, 0x46, 0x31, 0x20, 0xE0, 0x46, 0xE0, 0x6A, 0x50, 0x48, 0x11, 0x02, 0xE0, 0x48, 0xB7, 0x11, 0xD0, 0x49, 0xF0, 0xE4, 0xE0, 0x4A, 0x8D, 0xB9, 0x50, 0x4B, 0xDA, 0x01, 0x60, 0x4C, 0x61, 0xBD, 0xD0, 0x4C, 0x89, 0x58, 0xE0, -0x4C, 0xA4, 0xFA, 0x50, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, +0x4C, 0xA4, 0xFA, 0x50, 0x53, 0x75, 0x38, 0xE0, 0x53, 0xAF, 0x3A, 0xE0, 0x53, 0xD6, 0xC7, 0xE0, +0x54, 0x24, 0x82, 0x50, 0x55, 0x39, 0x6B, 0x60, 0x55, 0x81, 0xED, 0xE0, 0x55, 0xA9, 0x7A, 0xE0, +0x56, 0x04, 0x64, 0x50, 0x57, 0x22, 0x87, 0xE0, 0x57, 0x55, 0xF2, 0x60, 0x57, 0x7D, 0x7F, 0x60, +0x57, 0xED, 0x80, 0xD0, 0x59, 0x02, 0x69, 0xE0, 0x59, 0x28, 0xA5, 0x60, 0x59, 0x50, 0x32, 0x60, +0x59, 0xCD, 0x62, 0xD0, 0x5A, 0xE2, 0x4B, 0xE0, 0x5A, 0xFB, 0x58, 0x60, 0x5B, 0x22, 0xE5, 0x60, +0x5B, 0xAD, 0x44, 0xD0, 0x5C, 0xC2, 0x2D, 0xE0, 0x5C, 0xCF, 0x5C, 0xE0, 0x5C, 0xF6, 0xE9, 0xE0, +0x5D, 0x8D, 0x26, 0xD0, 0x5E, 0xC9, 0x9C, 0xE0, 0x5F, 0x6D, 0x08, 0xD0, 0x60, 0x9C, 0x4F, 0xE0, +0x61, 0x56, 0x25, 0x50, 0x62, 0x70, 0x54, 0x60, 0x63, 0x36, 0x07, 0x50, 0x64, 0x4A, 0xF0, 0x60, +0x65, 0x15, 0xE9, 0x50, 0x66, 0x2A, 0xD2, 0x60, 0x66, 0xF5, 0xCB, 0x50, 0x68, 0x0A, 0xB4, 0x60, +0x68, 0xD5, 0xAD, 0x50, 0x69, 0xEA, 0x96, 0x60, 0x6A, 0xB5, 0x8F, 0x50, 0x6B, 0xD3, 0xB2, 0xE0, +0x6C, 0x9E, 0xAB, 0xD0, 0x6D, 0xB3, 0x94, 0xE0, 0x6E, 0x7E, 0x8D, 0xD0, 0x6F, 0x93, 0x76, 0xE0, +0x70, 0x5E, 0x6F, 0xD0, 0x71, 0x73, 0x58, 0xE0, 0x72, 0x3E, 0x51, 0xD0, 0x73, 0x53, 0x3A, 0xE0, +0x74, 0x1E, 0x33, 0xD0, 0x75, 0x3C, 0x57, 0x60, 0x76, 0x07, 0x50, 0x50, 0x77, 0x1C, 0x39, 0x60, +0x77, 0xE7, 0x32, 0x50, 0x78, 0xFC, 0x1B, 0x60, 0x79, 0xC7, 0x14, 0x50, 0x7A, 0xDB, 0xFD, 0x60, +0x7B, 0xA6, 0xF6, 0x50, 0x7C, 0xBB, 0xDF, 0x60, 0x7D, 0x86, 0xD8, 0x50, 0x7E, 0x9B, 0xC1, 0x60, +0x7F, 0x66, 0xBA, 0x50, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x01, 0x00, 0x03, 0x00, 0x00, -0x2A, 0x30, 0x01, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x05, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x00, -0x00, 0x00, 0x1C, 0x20, 0x00, 0x05, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x00, -0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, -0x00, 0x00, 0x00, +0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x01, 0x00, 0x03, 0x00, 0x03, +0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, +0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, +0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, +0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x00, +0x00, 0x00, 0x1C, 0x20, 0x00, 0x05, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x00, 0x00, 0x00, 0x1C, 0x20, +0x00, 0x05, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, +0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, /* Eire */ 0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -18435,4 +18471,4 @@ const unsigned char timelib_timezone_db_data_builtin[261880] = { 0x00, 0x00, 0x55, 0x54, 0x43, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, }; -const timelib_tzdb timezonedb_builtin = { "2014.2", 580, timezonedb_idx_builtin, timelib_timezone_db_data_builtin }; +const timelib_tzdb timezonedb_builtin = { "2014.3", 580, timezonedb_idx_builtin, timelib_timezone_db_data_builtin }; diff --git a/ext/date/tests/bug67251.phpt b/ext/date/tests/bug67251.phpt new file mode 100644 index 000000000..68c56a161 --- /dev/null +++ b/ext/date/tests/bug67251.phpt @@ -0,0 +1,38 @@ +--TEST-- +Bug #67251 (date_parse_from_format out-of-bounds read) +--INI-- +date.timezone=Europe/Berlin +--FILE-- +<?php +var_dump(date_parse_from_format("\\","AAAABBBB")); +--EXPECT-- +array(12) { + ["year"]=> + bool(false) + ["month"]=> + bool(false) + ["day"]=> + bool(false) + ["hour"]=> + bool(false) + ["minute"]=> + bool(false) + ["second"]=> + bool(false) + ["fraction"]=> + bool(false) + ["warning_count"]=> + int(0) + ["warnings"]=> + array(0) { + } + ["error_count"]=> + int(2) + ["errors"]=> + array(1) { + [0]=> + string(13) "Trailing data" + } + ["is_localtime"]=> + bool(false) +} diff --git a/ext/date/tests/bug67253.phpt b/ext/date/tests/bug67253.phpt new file mode 100644 index 000000000..b28cbe63c --- /dev/null +++ b/ext/date/tests/bug67253.phpt @@ -0,0 +1,44 @@ +--TEST-- +Bug #67253 (timelib_meridian_with_check out-of-bounds read) +--INI-- +date.timezone=Europe/Berlin +--FILE-- +<?php +$z = ''; +var_dump(date_parse_from_format("aHa0", "0=G{$z}9UCNnF")); +--EXPECT-- +array(12) { + ["year"]=> + bool(false) + ["month"]=> + bool(false) + ["day"]=> + bool(false) + ["hour"]=> + int(0) + ["minute"]=> + int(0) + ["second"]=> + int(0) + ["fraction"]=> + bool(false) + ["warning_count"]=> + int(0) + ["warnings"]=> + array(0) { + } + ["error_count"]=> + int(3) + ["errors"]=> + array(3) { + [0]=> + string(51) "Meridian can only come after an hour has been found" + [1]=> + string(29) "A meridian could not be found" + [9]=> + string(12) "Data missing" + } + ["is_localtime"]=> + bool(false) +} + diff --git a/ext/ext_skel b/ext/ext_skel index 061e78d64..e6b01fd4f 100755 --- a/ext/ext_skel +++ b/ext/ext_skel @@ -320,7 +320,7 @@ To use your new extension, you will have to execute the following steps: 3. $ ./buildconf 4. $ ./configure --[with|enable]-$extname 5. $ make -6. $ ./php -f ext/$extname/$extname.php +6. $ ./sapi/cli/php -f ext/$extname/$extname.php 7. $ vi ext/$extname/$extname.c 8. $ make diff --git a/ext/fileinfo/libmagic.patch b/ext/fileinfo/libmagic.patch index fa708b6c8..662537bf7 100644 --- a/ext/fileinfo/libmagic.patch +++ b/ext/fileinfo/libmagic.patch @@ -3286,4 +3286,16 @@ diff -u libmagic.orig/softmagic.c libmagic/softmagic.c break; } case FILE_INDIRECT: +diff -u libmagic.orig/strcasestr.c libmagic/strcasestr.c +--- libmagic.orig/strcasestr.c Thu Dec 5 17:57:50 2013 ++++ libmagic/strcasestr.c Sun May 4 21:29:20 2014 +@@ -37,6 +37,8 @@ + __RCSID("$NetBSD: strncasecmp.c,v 1.2 2007/06/04 18:19:27 christos Exp $"); + #endif /* LIBC_SCCS and not lint */ + ++#include "php_stdint.h" ++ + #include <assert.h> + #include <ctype.h> + #include <string.h> diff --git a/ext/fileinfo/libmagic/strcasestr.c b/ext/fileinfo/libmagic/strcasestr.c index 546ed3f96..e1434e69e 100644 --- a/ext/fileinfo/libmagic/strcasestr.c +++ b/ext/fileinfo/libmagic/strcasestr.c @@ -37,6 +37,8 @@ __RCSID("$NetBSD: strcasestr.c,v 1.3 2005/11/29 03:12:00 christos Exp $"); __RCSID("$NetBSD: strncasecmp.c,v 1.2 2007/06/04 18:19:27 christos Exp $"); #endif /* LIBC_SCCS and not lint */ +#include "php_stdint.h" + #include <assert.h> #include <ctype.h> #include <string.h> diff --git a/ext/gd/gd.c b/ext/gd/gd.c index f54fb9ff8..f67e80bf8 100644 --- a/ext/gd/gd.c +++ b/ext/gd/gd.c @@ -5274,7 +5274,7 @@ PHP_FUNCTION(imageaffinematrixget) { double affine[6]; long type; - zval *options; + zval *options = NULL; zval **tmp; int res = GD_FALSE, i; @@ -5286,7 +5286,7 @@ PHP_FUNCTION(imageaffinematrixget) case GD_AFFINE_TRANSLATE: case GD_AFFINE_SCALE: { double x, y; - if (Z_TYPE_P(options) != IS_ARRAY) { + if (!options || Z_TYPE_P(options) != IS_ARRAY) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Array expected as options"); RETURN_FALSE; } @@ -5333,6 +5333,10 @@ PHP_FUNCTION(imageaffinematrixget) case GD_AFFINE_SHEAR_VERTICAL: { double angle; + if (!options) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Number is expected as option"); + RETURN_FALSE; + } convert_to_double_ex(&options); angle = Z_DVAL_P(options); diff --git a/ext/gd/tests/bug67248.phpt b/ext/gd/tests/bug67248.phpt new file mode 100644 index 000000000..9c83966a6 --- /dev/null +++ b/ext/gd/tests/bug67248.phpt @@ -0,0 +1,27 @@ +--TEST-- +Bug #67248 (imageaffinematrixget missing check of parameters) +--SKIPIF-- +<?php + if(!extension_loaded('gd')){ die('skip gd extension not available')} + if(!function_exists('imageaffinematrixget')) die('skip imageaffinematrixget() not available'); +?> +--FILE-- +<?php +for($i=0;$i<7;$i++) { + imageaffinematrixget($i); +} +?> +--EXPECTF-- +Warning: imageaffinematrixget(): Array expected as options in %s on line %d + +Warning: imageaffinematrixget(): Array expected as options in %s on line %d + +Warning: imageaffinematrixget(): Number is expected as option in %s on line %d + +Warning: imageaffinematrixget(): Number is expected as option in %s on line %d + +Warning: imageaffinematrixget(): Number is expected as option in %s on line %d + +Warning: imageaffinematrixget(): Invalid type for element 5 in %s on line %d + +Warning: imageaffinematrixget(): Invalid type for element 6 in %s on line %d diff --git a/ext/interbase/php_ibase_includes.h b/ext/interbase/php_ibase_includes.h index c994a92da..6671c9162 100644 --- a/ext/interbase/php_ibase_includes.h +++ b/ext/interbase/php_ibase_includes.h @@ -35,6 +35,7 @@ #define IB_STATUS (IBG(status)) +/* XXX ZEND_DEBUG_ is misleading, it should be something like IBASE_DEBUG. */ #ifdef ZEND_DEBUG_ #define IBDEBUG(a) php_printf("::: %s (%d)\n", a, __LINE__); #endif diff --git a/ext/mbstring/php_mbregex.c b/ext/mbstring/php_mbregex.c index 4b1b924d0..9ea297039 100644 --- a/ext/mbstring/php_mbregex.c +++ b/ext/mbstring/php_mbregex.c @@ -64,8 +64,8 @@ static void php_mb_regex_free_cache(php_mb_regex_t **pre) /* {{{ _php_mb_regex_globals_ctor */ static int _php_mb_regex_globals_ctor(zend_mb_regex_globals *pglobals TSRMLS_DC) { - pglobals->default_mbctype = ONIG_ENCODING_EUC_JP; - pglobals->current_mbctype = ONIG_ENCODING_EUC_JP; + pglobals->default_mbctype = ONIG_ENCODING_UTF8; + pglobals->current_mbctype = ONIG_ENCODING_UTF8; zend_hash_init(&(pglobals->ht_rc), 0, NULL, (void (*)(void *)) php_mb_regex_free_cache, 1); pglobals->search_str = (zval*) NULL; pglobals->search_re = (php_mb_regex_t*)NULL; diff --git a/ext/mbstring/tests/mb_eregi_replace.phpt b/ext/mbstring/tests/mb_eregi_replace.phpt index 22ba0af13..0405d8984 100644 --- a/ext/mbstring/tests/mb_eregi_replace.phpt +++ b/ext/mbstring/tests/mb_eregi_replace.phpt @@ -27,8 +27,9 @@ function do_translit($st) { $st = mb_eregi_replace($i,$u,$st); } return $st; -} +} +mb_regex_encoding('ISO-8859-1'); echo do_translit("Пеар"); ?> --EXPECT-- diff --git a/ext/mysqli/mysqli_nonapi.c b/ext/mysqli/mysqli_nonapi.c index 00cbcf204..de5cd567b 100644 --- a/ext/mysqli/mysqli_nonapi.c +++ b/ext/mysqli/mysqli_nonapi.c @@ -575,7 +575,11 @@ PHP_FUNCTION(mysqli_query) php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty query"); RETURN_FALSE; } +#ifdef MYSQLI_USE_MYSQLND if ((resultmode & ~MYSQLI_ASYNC) != MYSQLI_USE_RESULT && (resultmode & ~(MYSQLI_ASYNC | MYSQLI_STORE_RESULT_COPY_DATA)) != MYSQLI_STORE_RESULT) { +#else + if ((resultmode & ~MYSQLI_ASYNC) != MYSQLI_USE_RESULT && (resultmode & ~MYSQLI_ASYNC) != MYSQLI_STORE_RESULT) { +#endif php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid value for resultmode"); RETURN_FALSE; } @@ -609,7 +613,11 @@ PHP_FUNCTION(mysqli_query) RETURN_TRUE; } +#ifdef MYSQLI_USE_MYSQLND switch (resultmode & ~(MYSQLI_ASYNC | MYSQLI_STORE_RESULT_COPY_DATA)) { +#else + switch (resultmode & ~MYSQLI_ASYNC) { +#endif case MYSQLI_STORE_RESULT: #ifdef MYSQLI_USE_MYSQLND if (resultmode & MYSQLI_STORE_RESULT_COPY_DATA) { diff --git a/ext/mysqli/mysqli_priv.h b/ext/mysqli/mysqli_priv.h index e28caebf9..b1bfb56a8 100644 --- a/ext/mysqli/mysqli_priv.h +++ b/ext/mysqli/mysqli_priv.h @@ -118,7 +118,7 @@ PHP_MYSQLI_EXPORT(zend_object_value) mysqli_objects_new(zend_class_entry * TSRML #else /* libmysql */ #define MYSQLI_ASYNC 0 -#define MYSQLI_STORE_RESULT_OFS 0 +#define MYSQLI_STORE_RESULT_COPY_DATA 0 #endif /* for mysqli_fetch_assoc */ diff --git a/ext/pcre/pcrelib/pcre_compile.c b/ext/pcre/pcrelib/pcre_compile.c index c170c47a0..853fb2479 100644 --- a/ext/pcre/pcrelib/pcre_compile.c +++ b/ext/pcre/pcrelib/pcre_compile.c @@ -3623,7 +3623,7 @@ for (;;) break; case OP_MINUPTO: - *code += OP_MINUPTO - OP_UPTO; + *code += OP_POSUPTO - OP_MINUPTO; break; } } diff --git a/ext/pcre/tests/bug67238.phpt b/ext/pcre/tests/bug67238.phpt new file mode 100644 index 000000000..117662af6 --- /dev/null +++ b/ext/pcre/tests/bug67238.phpt @@ -0,0 +1,10 @@ +--TEST-- +Bug #67238 Ungreedy and min/max quantifier bug in PCRE 8.34 upstream +--FILE-- +<?php + +echo preg_match('/a{1,3}b/U', 'ab'); + +?> +--EXPECTF-- +1 diff --git a/ext/phar/phar_object.c b/ext/phar/phar_object.c index 407edda0f..75aadfbc5 100644 --- a/ext/phar/phar_object.c +++ b/ext/phar/phar_object.c @@ -1477,7 +1477,7 @@ static int phar_build(zend_object_iterator *iter, void *puser TSRMLS_DC) /* {{{ } close_fp = 0; - opened = (char *) estrndup(str, sizeof("[stream]") + 1); + opened = (char *) estrndup(str, sizeof("[stream]") - 1); goto after_open_fp; case IS_OBJECT: if (instanceof_function(Z_OBJCE_PP(value), spl_ce_SplFileInfo TSRMLS_CC)) { diff --git a/ext/session/tests/031.phpt b/ext/session/tests/031.phpt index e8deb3dac..7486c4b86 100644 --- a/ext/session/tests/031.phpt +++ b/ext/session/tests/031.phpt @@ -2,6 +2,7 @@ setting hash_function to sha512 and hash_bits_per_character > 4 should not crash --SKIPIF-- <?php include('skipif.inc'); ?> +<?php if (!extension_loaded('hash')) die('skip hash extension not available'); ?> --INI-- session.use_cookies=0 session.cache_limiter= diff --git a/ext/session/tests/session_set_save_handler_class_005.phpt b/ext/session/tests/session_set_save_handler_class_005.phpt index a996eb8d2..c74c81de1 100644 --- a/ext/session/tests/session_set_save_handler_class_005.phpt +++ b/ext/session/tests/session_set_save_handler_class_005.phpt @@ -3,6 +3,7 @@ Test session_set_save_handler() : incomplete implementation --INI-- session.save_handler=files session.name=PHPSESSID +session.gc_probability=0 --SKIPIF-- <?php include('skipif.inc'); ?> --FILE-- diff --git a/ext/session/tests/session_set_save_handler_class_012.phpt b/ext/session/tests/session_set_save_handler_class_012.phpt index 706ef793e..3899d2881 100644 --- a/ext/session/tests/session_set_save_handler_class_012.phpt +++ b/ext/session/tests/session_set_save_handler_class_012.phpt @@ -3,6 +3,7 @@ Test session_set_save_handler() : incorrect arguments for existing handler open --INI-- session.save_handler=files session.name=PHPSESSID +session.gc_probability=0 --SKIPIF-- <?php include('skipif.inc'); ?> --FILE-- diff --git a/ext/simplexml/simplexml.c b/ext/simplexml/simplexml.c index f84e1e014..a915862ec 100644 --- a/ext/simplexml/simplexml.c +++ b/ext/simplexml/simplexml.c @@ -1269,6 +1269,9 @@ SXE_METHOD(xpath) } if (!sxe->node) { php_libxml_increment_node_ptr((php_libxml_node_object *)sxe, xmlDocGetRootElement((xmlDocPtr) sxe->document->ptr), NULL TSRMLS_CC); + if (!sxe->node) { + RETURN_FALSE; + } } nodeptr = php_sxe_get_first_node(sxe, sxe->node->node TSRMLS_CC); @@ -1533,15 +1536,18 @@ SXE_METHOD(getDocNamespaces) return; } - array_init(return_value); - sxe = php_sxe_fetch_object(getThis() TSRMLS_CC); if(from_root){ node = xmlDocGetRootElement((xmlDocPtr)sxe->document->ptr); }else{ GET_NODE(sxe, node); } - + + if (node == NULL) { + RETURN_FALSE; + } + + array_init(return_value); sxe_add_registered_namespaces(sxe, node, recursive, return_value TSRMLS_CC); } /* }}} */ diff --git a/ext/simplexml/tests/SimpleXMLElement_getDocNamespaces.phpt b/ext/simplexml/tests/SimpleXMLElement_getDocNamespaces.phpt new file mode 100644 index 000000000..9df759100 --- /dev/null +++ b/ext/simplexml/tests/SimpleXMLElement_getDocNamespaces.phpt @@ -0,0 +1,9 @@ +--TEST-- +Testing getDocNamespaces() with invalid XML +--FILE-- +<?php +$xml = @new SimpleXMLElement("X",1); +var_dump($xml->getDocNamespaces()); +?> +--EXPECTF-- +bool(false) diff --git a/ext/simplexml/tests/SimpleXMLElement_xpath.phpt b/ext/simplexml/tests/SimpleXMLElement_xpath.phpt new file mode 100644 index 000000000..4a613c2e5 --- /dev/null +++ b/ext/simplexml/tests/SimpleXMLElement_xpath.phpt @@ -0,0 +1,8 @@ +--TEST-- +Testing xpath() with invalid XML +--FILE-- +<?php +$xml = @simplexml_load_string("XXXXXXX^",$x,0x6000000000000001); +var_dump($xml->xpath("BBBB")); +--EXPECT-- +bool(false) diff --git a/ext/spl/spl_fixedarray.c b/ext/spl/spl_fixedarray.c index 0519edaa2..2ad50359f 100644 --- a/ext/spl/spl_fixedarray.c +++ b/ext/spl/spl_fixedarray.c @@ -116,7 +116,7 @@ static void spl_fixedarray_resize(spl_fixedarray *array, long size TSRMLS_DC) /* array->elements = NULL; } } else if (size > array->size) { - array->elements = erealloc(array->elements, sizeof(zval *) * size); + array->elements = safe_erealloc(array->elements, size, sizeof(zval *), 0); memset(array->elements + array->size, '\0', sizeof(zval *) * (size - array->size)); } else { /* size < array->size */ long i; diff --git a/ext/spl/tests/bug67247.phpt b/ext/spl/tests/bug67247.phpt new file mode 100644 index 000000000..cb71445d7 --- /dev/null +++ b/ext/spl/tests/bug67247.phpt @@ -0,0 +1,13 @@ +--TEST-- +Bug #67247 (spl_fixedarray_resize integer overflow) +--FILE-- +<?php +$ar = new SplFixedArray(1); +echo "size: ".$ar->getSize()."\n"; +$ar->setSize((PHP_INT_SIZE==8)?0x2000000000000001:0x40000001); +echo "size: ".$ar->getSize()."\n"; +?> +--EXPECTF-- +size: 1 + +Fatal error: Possible integer overflow in memory allocation (%d * %d + 0) in %s on line %d diff --git a/ext/standard/html.c b/ext/standard/html.c index 5bbe39ccb..fd210c808 100644 --- a/ext/standard/html.c +++ b/ext/standard/html.c @@ -901,7 +901,7 @@ static inline size_t write_octet_sequence(unsigned char *buf, enum entity_charse #if 0 return php_mb2_int_to_char(buf, code); #else -#ifdef ZEND_DEBUG +#if ZEND_DEBUG assert(code <= 0xFFU); #endif *buf = code; @@ -912,7 +912,7 @@ static inline size_t write_octet_sequence(unsigned char *buf, enum entity_charse #if 0 /* idem */ return php_mb2_int_to_char(buf, code); #else -#ifdef ZEND_DEBUG +#if ZEND_DEBUG assert(code <= 0xFFU); #endif *buf = code; diff --git a/ext/standard/iptc.c b/ext/standard/iptc.c index 325733910..ad4fa6502 100644 --- a/ext/standard/iptc.c +++ b/ext/standard/iptc.c @@ -329,6 +329,9 @@ PHP_FUNCTION(iptcparse) recnum = buffer[ inx++ ]; if (buffer[ inx ] & (unsigned char) 0x80) { /* long tag */ + if((inx+6) >= str_len) { + break; + } len = (((long) buffer[ inx + 2 ]) << 24) + (((long) buffer[ inx + 3 ]) << 16) + (((long) buffer[ inx + 4 ]) << 8) + (((long) buffer[ inx + 5 ])); inx += 6; diff --git a/ext/standard/php_fopen_wrapper.c b/ext/standard/php_fopen_wrapper.c index 3deb330a8..7e21e95d1 100644 --- a/ext/standard/php_fopen_wrapper.c +++ b/ext/standard/php_fopen_wrapper.c @@ -64,7 +64,7 @@ php_stream_ops php_stream_output_ops = { }; typedef struct php_stream_input { /* {{{ */ - php_stream **body_ptr; + php_stream *body; off_t position; } php_stream_input_t; /* }}} */ @@ -85,13 +85,13 @@ static size_t php_stream_input_read(php_stream *stream, char *buf, size_t count int read_bytes = sapi_read_post_block(buf, count TSRMLS_CC); if (read_bytes > 0) { - php_stream_seek(*input->body_ptr, 0, SEEK_END); - php_stream_write(*input->body_ptr, buf, read_bytes); + php_stream_seek(input->body, 0, SEEK_END); + php_stream_write(input->body, buf, read_bytes); } } - php_stream_seek(*input->body_ptr, input->position, SEEK_SET); - read = php_stream_read(*input->body_ptr, buf, count); + php_stream_seek(input->body, input->position, SEEK_SET); + read = php_stream_read(input->body, buf, count); if (!read || read == (size_t) -1) { stream->eof = 1; @@ -122,9 +122,9 @@ static int php_stream_input_seek(php_stream *stream, off_t offset, int whence, o { php_stream_input_t *input = stream->abstract; - if (*input->body_ptr) { - int sought = php_stream_seek(*input->body_ptr, offset, whence); - *newoffset = (*input->body_ptr)->position; + if (input->body) { + int sought = php_stream_seek(input->body, offset, whence); + *newoffset = (input->body)->position; return sought; } @@ -228,10 +228,11 @@ php_stream * php_stream_url_wrap_php(php_stream_wrapper *wrapper, const char *pa } input = ecalloc(1, sizeof(*input)); - if (*(input->body_ptr = &SG(request_info).request_body)) { - php_stream_rewind(*input->body_ptr); + if ((input->body = SG(request_info).request_body)) { + php_stream_rewind(input->body); } else { - *input->body_ptr = php_stream_temp_create(TEMP_STREAM_DEFAULT, SAPI_POST_BLOCK_SIZE); + input->body = php_stream_temp_create(TEMP_STREAM_DEFAULT, SAPI_POST_BLOCK_SIZE); + SG(request_info).request_body = input->body; } return php_stream_alloc(&php_stream_input_ops, input, 0, "rb"); diff --git a/ext/standard/streamsfuncs.c b/ext/standard/streamsfuncs.c index 8d42a51af..68b4cceaa 100644 --- a/ext/standard/streamsfuncs.c +++ b/ext/standard/streamsfuncs.c @@ -40,6 +40,8 @@ typedef unsigned long long php_timeout_ull; typedef unsigned __int64 php_timeout_ull; #endif +#define GET_CTX_OPT(stream, wrapper, name, val) (stream->context && SUCCESS == php_stream_context_get_option(stream->context, wrapper, name, &val)) + static php_stream_context *decode_context_param(zval *contextresource TSRMLS_DC); /* Streams based network functions */ @@ -1491,16 +1493,27 @@ PHP_FUNCTION(stream_socket_enable_crypto) long cryptokind = 0; zval *zstream, *zsessstream = NULL; php_stream *stream, *sessstream = NULL; - zend_bool enable; + zend_bool enable, cryptokindnull; int ret; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rb|lr", &zstream, &enable, &cryptokind, &zsessstream) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rb|l!r", &zstream, &enable, &cryptokind, &cryptokindnull, &zsessstream) == FAILURE) { RETURN_FALSE; } php_stream_from_zval(stream, &zstream); - if (ZEND_NUM_ARGS() >= 3) { + if (enable) { + if (ZEND_NUM_ARGS() < 3 || cryptokindnull) { + zval **val; + + if (!GET_CTX_OPT(stream, "ssl", "crypto_method", val)) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "When enabling encryption you must specify the crypto type"); + RETURN_FALSE; + } + + cryptokind = Z_LVAL_PP(val); + } + if (zsessstream) { php_stream_from_zval(sessstream, &zsessstream); } @@ -1508,9 +1521,6 @@ PHP_FUNCTION(stream_socket_enable_crypto) if (php_stream_xport_crypto_setup(stream, cryptokind, sessstream TSRMLS_CC) < 0) { RETURN_FALSE; } - } else if (enable) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "When enabling encryption you must specify the crypto type"); - RETURN_FALSE; } ret = php_stream_xport_crypto_enable(stream, enable TSRMLS_CC); diff --git a/ext/standard/tests/image/bug67250.phpt b/ext/standard/tests/image/bug67250.phpt new file mode 100644 index 000000000..607de9f3b --- /dev/null +++ b/ext/standard/tests/image/bug67250.phpt @@ -0,0 +1,8 @@ +--TEST-- +Bug #67250 (iptcparse out-of-bounds read) +--FILE-- +<?php +var_dump(iptcparse("\x1C\x02_\x80___")); +?> +--EXPECT-- +bool(false) diff --git a/ext/standard/tests/strings/bug67252.phpt b/ext/standard/tests/strings/bug67252.phpt new file mode 100644 index 000000000..80a6ebcf1 --- /dev/null +++ b/ext/standard/tests/strings/bug67252.phpt @@ -0,0 +1,13 @@ +--TEST-- +Bug #67252 (convert_uudecode out-of-bounds read) +--FILE-- +<?php + +$a = "M86%A86%A86%A86%A86%A86%A86%A86%A86%A86%A86%A86%A86%A86%A86%A"."\n"."a."; +var_dump(convert_uudecode($a)); + +?> +--EXPECTF-- + +Warning: convert_uudecode(): The given parameter is not a valid uuencoded string in %s on line %d +bool(false) diff --git a/ext/standard/uuencode.c b/ext/standard/uuencode.c index 52e892ed9..8544aef9f 100644 --- a/ext/standard/uuencode.c +++ b/ext/standard/uuencode.c @@ -151,6 +151,9 @@ PHPAPI int php_uudecode(char *src, int src_len, char **dest) /* {{{ */ } while (s < ee) { + if(s+4 > e) { + goto err; + } *p++ = PHP_UU_DEC(*s) << 2 | PHP_UU_DEC(*(s + 1)) >> 4; *p++ = PHP_UU_DEC(*(s + 1)) << 4 | PHP_UU_DEC(*(s + 2)) >> 2; *p++ = PHP_UU_DEC(*(s + 2)) << 6 | PHP_UU_DEC(*(s + 3)); diff --git a/main/SAPI.c b/main/SAPI.c index 7858779a6..975dd618b 100644 --- a/main/SAPI.c +++ b/main/SAPI.c @@ -462,7 +462,7 @@ SAPI_API void sapi_activate(TSRMLS_D) SG(request_info).post_entry = NULL; SG(request_info).proto_num = 1000; /* Default to HTTP 1.0 */ SG(global_request_time) = 0; - + SG(post_read) = 0; /* It's possible to override this general case in the activate() callback, if necessary. */ if (SG(request_info).request_method && !strcmp(SG(request_info).request_method, "HEAD")) { SG(request_info).headers_only = 1; diff --git a/main/php_version.h b/main/php_version.h index 55e7eede0..84bcafd3e 100644 --- a/main/php_version.h +++ b/main/php_version.h @@ -3,6 +3,6 @@ #define PHP_MAJOR_VERSION 5 #define PHP_MINOR_VERSION 6 #define PHP_RELEASE_VERSION 0 -#define PHP_EXTRA_VERSION "beta2" -#define PHP_VERSION "5.6.0beta2" +#define PHP_EXTRA_VERSION "beta3" +#define PHP_VERSION "5.6.0beta3" #define PHP_VERSION_ID 50600 diff --git a/sapi/phpdbg/config.m4 b/sapi/phpdbg/config.m4 index 3534d9012..a1b2f9faa 100644 --- a/sapi/phpdbg/config.m4 +++ b/sapi/phpdbg/config.m4 @@ -21,7 +21,7 @@ if test "$PHP_PHPDBG" != "no"; then PHP_PHPDBG_FILES="phpdbg.c phpdbg_parser.c phpdbg_lexer.c phpdbg_prompt.c phpdbg_help.c phpdbg_break.c phpdbg_print.c phpdbg_bp.c phpdbg_opcode.c phpdbg_list.c phpdbg_utils.c phpdbg_info.c phpdbg_cmd.c phpdbg_set.c phpdbg_frame.c phpdbg_watch.c phpdbg_btree.c" if test "$PHP_READLINE" != "no"; then - PHPDBG_EXTRA_LIBS="-lreadline" + PHPDBG_EXTRA_LIBS="$PHP_READLINE_LIBS" fi PHP_SUBST(PHP_PHPDBG_CFLAGS) diff --git a/tests/basic/bug67198.phpt b/tests/basic/bug67198.phpt new file mode 100644 index 000000000..9e2e22450 --- /dev/null +++ b/tests/basic/bug67198.phpt @@ -0,0 +1,42 @@ +--TEST-- +php://input is empty when enable_post_data_reading=Off +--INI-- +allow_url_fopen=1 +--SKIPIF-- +<?php +include __DIR__."/../../sapi/cli/tests/skipif.inc"; +?> +--FILE-- +<?php +require __DIR__."/../../sapi/cli/tests/php_cli_server.inc"; + +$code = +<<<'FL' + if(!ini_get('enable_post_data_reading')){ + if($_SERVER['REQUEST_METHOD']=='POST'){ + exit(file_get_contents('php://input')); + } + }else{ + exit('Please SET php.ini: enable_post_data_reading = Off'); + } +FL; + +$postdata = "PASS"; + +$opts = array('http' => + array( + 'method' => 'POST', + 'header' => 'Content-type: application/x-www-form-urlencoded', + 'content' => $postdata + ) +); + +$context = stream_context_create($opts); + +php_cli_server_start("exit(file_get_contents('php://input'));", false, "-d enable_post_data_reading=Off"); + +var_dump(file_get_contents("http://" . PHP_CLI_SERVER_ADDRESS, false, $context)); +var_dump(file_get_contents("http://" . PHP_CLI_SERVER_ADDRESS, false, $context)); +--EXPECT-- +string(4) "PASS" +string(4) "PASS" diff --git a/travis/compile.sh b/travis/compile.sh index 8b54b714a..899fb5a33 100755 --- a/travis/compile.sh +++ b/travis/compile.sh @@ -9,7 +9,7 @@ if [[ "$ENABLE_DEBUG" == 1 ]]; then else DEBUG=""; fi -./buildconf +./buildconf --force ./configure --quiet \ $DEBUG \ $TS \ |