summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRasmus Lerdorf <rasmus@php.net>2013-11-07 07:55:26 -0800
committerRasmus Lerdorf <rasmus@php.net>2013-11-07 07:55:26 -0800
commit8cb128159d07d80aaf751b252a94ff63d7f6ae06 (patch)
tree1d8ebb09facf44bbf6a406ab681e537f6643e089
parentf0c926564c5f7de9462d9ca7bd75014b14a63f56 (diff)
parent8b6b39fdcffc8486fedd391b8d8aa7700f0c7f93 (diff)
downloadphp-git-8cb128159d07d80aaf751b252a94ff63d7f6ae06.tar.gz
Merge branch 'PHP-5.4' of git.php.net:php-src into PHP-5.4
* 'PHP-5.4' of git.php.net:php-src: (65 commits) Add a couple more test cases to parse_url() tests fix missing change from 'tcp_socket' to the more common 'server' fix many parallel test issues Cleanup temp test file Fixed Bug #66034 (Segmentation Fault when constructor of PDO statement throws an exception) Typo fix: umknown -> unknown Fix bug #66008 5.4.23-dev Update NEWS Fixed Bug 64760 var_export() does not use full precision for floating-point numbers add bundled libzip LICENSE, as required by BSD License terms - Updated to version 2013.8 (2013h) remove "PHP 6" staff Fixed bug #65950 Field name truncation if the field name is bigger than 32 characters - Updated to version 2013.7 (2013g) Fix Coverity issue reporting wrong sizeof() exif NEWS add tests for bug #62523 Merged PR #293 (Exif crash on unknown encoding was fixed) By: Draal Conflicts: configure.in main/php_version.h Just SKIP that test on travis ...
-rw-r--r--CODING_STANDARDS2
-rw-r--r--NEWS50
-rw-r--r--README.EXTENSIONS2
-rw-r--r--README.EXT_SKEL5
-rw-r--r--README.SELF-CONTAINED-EXTENSIONS15
-rw-r--r--Zend/acinclude.m42
-rw-r--r--Zend/tests/bug65911.phpt20
-rw-r--r--Zend/zend_compile.c1
-rw-r--r--configure.in2
-rw-r--r--ext/bz2/bz2_filter.c1
-rw-r--r--ext/date/lib/timezonedb.h1318
-rw-r--r--ext/date/php_date.c1
-rw-r--r--ext/dba/dba.c9
-rw-r--r--ext/exif/exif.c12
-rw-r--r--ext/exif/tests/bug62523_1.jpg9
-rw-r--r--ext/exif/tests/bug62523_1.phpt18
-rw-r--r--ext/exif/tests/bug62523_2.jpgbin0 -> 516533 bytes
-rw-r--r--ext/exif/tests/bug62523_2.phpt16
-rw-r--r--ext/exif/tests/bug62523_3.jpg12
-rw-r--r--ext/exif/tests/bug62523_3.phpt18
-rw-r--r--ext/exif/tests/exif_encoding_crash.jpgbin0 -> 7599 bytes
-rw-r--r--ext/exif/tests/exif_encoding_crash.phpt14
-rw-r--r--ext/filter/logical_filters.c2
-rw-r--r--ext/filter/tests/018.phpt2
-rw-r--r--ext/ftp/ftp.c8
-rw-r--r--ext/ftp/php_ftp.c4
-rw-r--r--ext/ftp/tests/ftp_fget_basic1.phpt4
-rw-r--r--ext/ftp/tests/ftp_fget_basic2.phpt4
-rw-r--r--ext/ftp/tests/ftp_fget_basic3.phpt4
-rw-r--r--ext/ftp/tests/ftp_nb_continue.phpt182
-rw-r--r--ext/ftp/tests/ftp_nb_fget_basic1.phpt4
-rw-r--r--ext/ftp/tests/ftp_nb_fget_basic2.phpt4
-rw-r--r--ext/ftp/tests/ftp_nb_fget_basic3.phpt4
-rw-r--r--ext/ftp/tests/ftp_nb_get_large.phpt4
-rw-r--r--ext/ftp/tests/server.inc7
-rw-r--r--ext/gd/php_gd.h2
-rw-r--r--ext/intl/locale/locale_methods.c3
-rw-r--r--ext/ldap/ldap.c1
-rw-r--r--ext/ldap/tests/ldap_search_variation6.phpt20
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_mobile.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.c2
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfilter.c2
-rw-r--r--ext/mysqlnd/mysqlnd.c4
-rw-r--r--ext/odbc/php_odbc_includes.h2
-rw-r--r--ext/openssl/openssl.c29
-rw-r--r--ext/pdo/pdo_dbh.c4
-rw-r--r--ext/pdo_dblib/dblib_driver.c30
-rw-r--r--ext/pdo_sqlite/tests/bug66033.phpt33
-rw-r--r--ext/pgsql/pgsql.c2
-rw-r--r--ext/phar/dirstream.c4
-rw-r--r--ext/phar/util.c6
-rw-r--r--ext/skeleton/php_skeleton.h2
-rw-r--r--ext/skeleton/skeleton.c2
-rw-r--r--ext/soap/php_sdl.c19
-rw-r--r--ext/sockets/sockets.c59
-rw-r--r--ext/spl/tests/SplFileObject_getflags_basic.phpt6
-rw-r--r--ext/spl/tests/SplFileObject_getflags_error001.phpt6
-rw-r--r--ext/spl/tests/SplFileObject_getflags_error002.phpt6
-rw-r--r--ext/spl/tests/SplFileObject_rewind_error001.phpt8
-rw-r--r--ext/standard/http_fopen_wrapper.c61
-rw-r--r--ext/standard/tests/file/disk_free_space_basic.phpt4
-rw-r--r--ext/standard/tests/file/fgets_socket_variation1.phpt12
-rw-r--r--ext/standard/tests/file/fgets_socket_variation2.phpt12
-rw-r--r--ext/standard/tests/file/file_put_contents_variation9.phpt8
-rw-r--r--ext/standard/tests/file/fread_socket_variation1.phpt15
-rw-r--r--ext/standard/tests/general_functions/bug41445_1.phpt2
-rw-r--r--ext/standard/tests/general_functions/var_export-locale.phpt8
-rw-r--r--ext/standard/tests/general_functions/var_export_basic3.phpt36
-rw-r--r--ext/standard/tests/general_functions/var_export_basic5.phpt10
-rw-r--r--ext/standard/tests/http/bug61548.phpt118
-rw-r--r--ext/standard/tests/network/fsockopen_basic.phpt10
-rw-r--r--ext/standard/tests/network/fsockopen_variation1.phpt10
-rw-r--r--ext/standard/tests/network/shutdown.phpt18
-rw-r--r--ext/standard/tests/network/socket_get_status_basic.phpt14
-rw-r--r--ext/standard/tests/network/tcp4loop.phpt13
-rw-r--r--ext/standard/tests/network/tcp6loop.phpt14
-rw-r--r--ext/standard/tests/network/udp6loop.phpt14
-rw-r--r--ext/standard/tests/serialize/bug64146.phpt60
-rw-r--r--ext/standard/tests/serialize/bug65806.phpt83
-rw-r--r--ext/standard/tests/streams/stream_set_timeout_error.phpt12
-rw-r--r--ext/standard/tests/strings/vfprintf_basic1.phpt2
-rw-r--r--ext/standard/tests/strings/vfprintf_basic2.phpt2
-rw-r--r--ext/standard/tests/strings/vfprintf_basic3.phpt2
-rw-r--r--ext/standard/tests/strings/vfprintf_basic4.phpt2
-rw-r--r--ext/standard/tests/strings/vfprintf_basic5.phpt2
-rw-r--r--ext/standard/tests/strings/vfprintf_basic6.phpt2
-rw-r--r--ext/standard/tests/strings/vfprintf_basic7.phpt2
-rw-r--r--ext/standard/tests/strings/vfprintf_basic7_64bit.phpt2
-rw-r--r--ext/standard/tests/strings/vfprintf_basic8.phpt2
-rw-r--r--ext/standard/tests/strings/vfprintf_basic9.phpt2
-rw-r--r--ext/standard/tests/strings/vfprintf_variation10.phptbin2963 -> 2979 bytes
-rw-r--r--ext/standard/tests/strings/vfprintf_variation11.phpt2
-rw-r--r--ext/standard/tests/strings/vfprintf_variation11_64bit.phpt2
-rw-r--r--ext/standard/tests/strings/vfprintf_variation12.phpt2
-rw-r--r--ext/standard/tests/strings/vfprintf_variation12_64bit.phpt2
-rw-r--r--ext/standard/tests/strings/vfprintf_variation13.phpt2
-rw-r--r--ext/standard/tests/strings/vfprintf_variation13_64bit.phpt2
-rw-r--r--ext/standard/tests/strings/vfprintf_variation14.phpt2
-rw-r--r--ext/standard/tests/strings/vfprintf_variation14_64bit.phpt2
-rw-r--r--ext/standard/tests/strings/vfprintf_variation15.phpt2
-rw-r--r--ext/standard/tests/strings/vfprintf_variation15_64bit.phpt2
-rw-r--r--ext/standard/tests/strings/vfprintf_variation16.phpt2
-rw-r--r--ext/standard/tests/strings/vfprintf_variation16_64bit.phpt2
-rw-r--r--ext/standard/tests/strings/vfprintf_variation17.phpt2
-rw-r--r--ext/standard/tests/strings/vfprintf_variation18.phpt2
-rw-r--r--ext/standard/tests/strings/vfprintf_variation19.phpt2
-rw-r--r--ext/standard/tests/strings/vfprintf_variation19_64bit.phpt2
-rw-r--r--ext/standard/tests/strings/vfprintf_variation20.phpt2
-rw-r--r--ext/standard/tests/strings/vfprintf_variation21.phpt2
-rw-r--r--ext/standard/tests/strings/vfprintf_variation3.phpt2
-rw-r--r--ext/standard/tests/strings/vfprintf_variation4.phpt2
-rw-r--r--ext/standard/tests/strings/vfprintf_variation4_64bit.phpt2
-rw-r--r--ext/standard/tests/strings/vfprintf_variation5.phpt2
-rw-r--r--ext/standard/tests/strings/vfprintf_variation6.phpt2
-rw-r--r--ext/standard/tests/strings/vfprintf_variation7.phptbin2391 -> 2406 bytes
-rw-r--r--ext/standard/tests/strings/vfprintf_variation8.phpt2
-rw-r--r--ext/standard/tests/strings/vfprintf_variation9.phptbin1857 -> 1872 bytes
-rw-r--r--ext/standard/tests/url/parse_url_basic_001.phpt11
-rw-r--r--ext/standard/tests/url/parse_url_basic_002.phpt4
-rw-r--r--ext/standard/tests/url/parse_url_basic_003.phpt4
-rw-r--r--ext/standard/tests/url/parse_url_basic_004.phpt4
-rw-r--r--ext/standard/tests/url/parse_url_basic_005.phpt4
-rw-r--r--ext/standard/tests/url/parse_url_basic_006.phpt4
-rw-r--r--ext/standard/tests/url/parse_url_basic_007.phpt4
-rw-r--r--ext/standard/tests/url/parse_url_basic_008.phpt4
-rw-r--r--ext/standard/tests/url/parse_url_basic_009.phpt4
-rw-r--r--ext/standard/tests/url/urls.inc4
-rw-r--r--ext/standard/var.c8
-rw-r--r--ext/xmlreader/php_xmlreader.c3
-rw-r--r--ext/xmlreader/tests/bug51936.phpt22
-rw-r--r--ext/xmlreader/tests/bug64230.phpt50
-rw-r--r--ext/zip/LICENSE_libzip27
-rw-r--r--ext/zip/lib/zip_source_error.c2
-rw-r--r--ext/zip/php_zip.c17
-rw-r--r--ext/zlib/tests/gzeof_variation1.phpt2
-rw-r--r--ext/zlib/tests/gzfile_basic.phpt2
-rw-r--r--ext/zlib/tests/gzfile_basic2.phpt2
-rw-r--r--ext/zlib/tests/gzopen_basic2.phpt2
-rw-r--r--ext/zlib/tests/gzputs_basic.phpt2
-rw-r--r--ext/zlib/tests/gzread_variation1.phpt2
-rw-r--r--ext/zlib/tests/gzwrite_basic.phpt2
-rw-r--r--ext/zlib/tests/gzwrite_error.phpt2
-rw-r--r--ext/zlib/tests/gzwrite_error2.phpt2
-rw-r--r--ext/zlib/tests/readgzfile_basic.phpt2
-rw-r--r--ext/zlib/tests/readgzfile_basic2.phpt2
-rw-r--r--ext/zlib/tests/zlib_wrapper_fflush_basic.phpt2
-rw-r--r--ext/zlib/tests/zlib_wrapper_ftruncate_basic.phpt2
-rw-r--r--main/php_version.h6
-rwxr-xr-xrun-tests.php12
-rw-r--r--sapi/cli/php_cli_server.c1
-rw-r--r--sapi/fpm/fpm/fastcgi.c5
-rw-r--r--sapi/fpm/fpm/fpm_children.c2
-rw-r--r--sapi/fpm/fpm/fpm_sockets.c1
-rw-r--r--sapi/fpm/php-fpm.8.in2
-rw-r--r--tests/lang/bug24640.phpt16
-rw-r--r--win32/readdir.c1
157 files changed, 1899 insertions, 967 deletions
diff --git a/CODING_STANDARDS b/CODING_STANDARDS
index 7413be453c..5ceacdc4dc 100644
--- a/CODING_STANDARDS
+++ b/CODING_STANDARDS
@@ -151,7 +151,7 @@ Naming Conventions
7. Classes should be given descriptive names. Avoid using abbreviations where
possible. Each word in the class name should start with a capital letter,
- without underscore delimiters (CampelCaps starting with a capital letter).
+ without underscore delimiters (CamelCaps starting with a capital letter).
The class name should be prefixed with the name of the 'parent set' (e.g.
the name of the extension)::
diff --git a/NEWS b/NEWS
index 4dc7ef7c18..c3e70d94a3 100644
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,45 @@
PHP NEWS
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-?? ??? 2013, PHP 5.4.21
+?? ??? 2013, PHP 5.4.23
+
+?? ??? 2013, PHP 5.4.22
+
+- Core:
+ . Fixed bug #65911 (scope resolution operator - strange behavior with $this).
+ (Bob Weinand)
+
+- CLI server:
+ . Fixed bug #65818 (Segfault with built-in webserver and chunked transfer
+ encoding). (Felipe)
+
+- Exif:
+ . Fixed crash on unknown encoding. (Draal)
+
+- FTP:
+ . Fixed bug #65667 (ftp_nb_continue produces segfault). (Philip Hofstetter)
+
+- ODBC:
+ . Fixed bug #65950 (Field name truncation if the field name is bigger than
+ 32 characters). (patch submitted by: michael dot y at zend dot com, Yasuo)
+
+- PDO:
+ . Fixed bug #66033 (Segmentation Fault when constructor of PDO statement
+ throws an exception). (Laruence)
+
+- Sockets:
+ . Fixed bug #65808 (the socket_connect() won't work with IPv6 address).
+ (Mike)
+
+- Standard:
+ . Fixed bug #64760 (var_export() does not use full precision for floating-point
+ numbers) (Yasuo)
+
+- XMLReader:
+ . Fixed bug #51936 (Crash with clone XMLReader). (Mike)
+ . Fixed bug #64230 (XMLReader does not suppress errors). (Mike)
+
+
+17 Oct 2013, PHP 5.4.21
- Core:
. Fixed bug #65322 (compile time errors won't trigger auto loading). (Nikita)
@@ -26,6 +65,15 @@ PHP NEWS
. Fixed bug #65721 (configure script broken in 5.5.4 and 5.4.20 when enabling
imap). (ryotakatsuki at gmail dot com)
+- Standard:
+ . Fixed bug #61548 (content-type must appear at the end of headers for 201
+ Location to work in http). (Mike)
+
+- Build system:
+ . Fixed bug #62396 ('make test' crashes starting with 5.3.14 (missing
+ gzencode())). (Mike)
+
+
19 Sep 2013, PHP 5.4.20
- Core:
diff --git a/README.EXTENSIONS b/README.EXTENSIONS
index 51e3b730e7..06d6cdd85f 100644
--- a/README.EXTENSIONS
+++ b/README.EXTENSIONS
@@ -30,7 +30,7 @@ zend_module_entry foo_module_entry = {
PHP_RSHUTDOWN(foo), /* per-request shutdown function */
PHP_MINFO(foo), /* information function */
#if ZEND_MODULE_API_NO >= 20010901
- FOO_VERSION, /* extension version number (string) */
+ PHP_FOO_VERSION, /* extension version number (string) */
#endif
STANDARD_MODULE_PROPERTIES
};
diff --git a/README.EXT_SKEL b/README.EXT_SKEL
index b0db843a42..d44fcc5c6a 100644
--- a/README.EXT_SKEL
+++ b/README.EXT_SKEL
@@ -31,6 +31,11 @@ HOW TO USE IT
./buildconf; ./configure --enable-module_name; make
+ The definition of PHP_MODULE_NAME_VERSION will be present in the
+ php_module_name.h and injected into the zend_module_entry definition. This
+ is required by the PECL website for the version string conformity checks
+ against package.xml
+
But if you already have planned the overall scheme of your module, what
functions it will contain, their return types and the arguments they take
(a very good idea) and don't want to bother yourself with creating function
diff --git a/README.SELF-CONTAINED-EXTENSIONS b/README.SELF-CONTAINED-EXTENSIONS
index e6a375331b..5287230e1a 100644
--- a/README.SELF-CONTAINED-EXTENSIONS
+++ b/README.SELF-CONTAINED-EXTENSIONS
@@ -153,3 +153,18 @@ ADDING SHARED MODULE SUPPORT TO A MODULE
#ifdef COMPILE_DL_FOO
ZEND_GET_MODULE(foo)
#endif
+
+PECL SITE CONFORMITY
+
+ If you plan to release an extension to the PECL website, there are several
+ points to be regarded.
+
+ 1. Add LICENSE or COPYING to the package.xml
+
+ 2. The following should be defined in one of the extension header files
+
+ #define PHP_FOO_VERSION "1.2.3"
+
+ This macros has to be used within your foo_module_entry to indicate the
+ extension version.
+
diff --git a/Zend/acinclude.m4 b/Zend/acinclude.m4
index 77430aba79..95b5bf2061 100644
--- a/Zend/acinclude.m4
+++ b/Zend/acinclude.m4
@@ -12,7 +12,7 @@ AC_DEFUN([LIBZEND_BISON_CHECK],[
bison_version=none
if test "$YACC"; then
AC_CACHE_CHECK([for bison version], php_cv_bison_version, [
- bison_version_vars=`bison --version 2> /dev/null | grep 'GNU Bison' | cut -d ' ' -f 4 | $SED -e 's/\./ /' | tr -d a-z`
+ bison_version_vars=`$YACC --version 2> /dev/null | grep 'GNU Bison' | cut -d ' ' -f 4 | $SED -e 's/\./ /g' | tr -d a-z`
php_cv_bison_version=invalid
if test -n "$bison_version_vars"; then
set $bison_version_vars
diff --git a/Zend/tests/bug65911.phpt b/Zend/tests/bug65911.phpt
new file mode 100644
index 0000000000..b9f37b7bd6
--- /dev/null
+++ b/Zend/tests/bug65911.phpt
@@ -0,0 +1,20 @@
+--TEST--
+Bug #65911 (scope resolution operator - strange behavior with $this)
+--FILE--
+<?php
+class A {}
+
+class B
+{
+ public function go()
+ {
+ $this->foo = 'bar';
+ echo A::$this->foo; // should not output 'bar'
+ }
+}
+
+$obj = new B();
+$obj->go();
+?>
+--EXPECTF--
+Fatal error: Access to undeclared static property: A::$this in %s on line %d
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index 326d4ef976..10390b04a8 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -905,6 +905,7 @@ static zend_bool opline_is_fetch_this(const zend_op *opline TSRMLS_DC) /* {{{ */
{
if ((opline->opcode == ZEND_FETCH_W) && (opline->op1_type == IS_CONST)
&& (Z_TYPE(CONSTANT(opline->op1.constant)) == IS_STRING)
+ && ((opline->extended_value & ZEND_FETCH_STATIC_MEMBER) != ZEND_FETCH_STATIC_MEMBER)
&& (Z_HASH_P(&CONSTANT(opline->op1.constant)) == THIS_HASHVAL)
&& (Z_STRLEN(CONSTANT(opline->op1.constant)) == (sizeof("this")-1))
&& !memcmp(Z_STRVAL(CONSTANT(opline->op1.constant)), "this", sizeof("this"))) {
diff --git a/configure.in b/configure.in
index 30de2c3aaa..af2de7fce9 100644
--- a/configure.in
+++ b/configure.in
@@ -119,7 +119,7 @@ int zend_sprintf(char *buffer, const char *format, ...);
PHP_MAJOR_VERSION=5
PHP_MINOR_VERSION=4
-PHP_RELEASE_VERSION=21
+PHP_RELEASE_VERSION=23
PHP_EXTRA_VERSION="-dev"
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_filter.c b/ext/bz2/bz2_filter.c
index 5ed7921c17..868acec870 100644
--- a/ext/bz2/bz2_filter.c
+++ b/ext/bz2/bz2_filter.c
@@ -97,6 +97,7 @@ static php_stream_filter_status_t php_bz2_decompress_filter(
status = BZ2_bzDecompressInit(streamp, 0, data->small_footprint);
if (BZ_OK != status) {
+ php_stream_bucket_delref(bucket TSRMLS_CC);
return PSFS_ERR_FATAL;
}
diff --git a/ext/date/lib/timezonedb.h b/ext/date/lib/timezonedb.h
index 8142aab565..91884a935f 100644
--- a/ext/date/lib/timezonedb.h
+++ b/ext/date/lib/timezonedb.h
@@ -14,573 +14,573 @@ const timelib_tzdb_index_entry timezonedb_idx_builtin[579] = {
{ "Africa/Bujumbura" , 0x000571 },
{ "Africa/Cairo" , 0x0005B5 },
{ "Africa/Casablanca" , 0x000878 },
- { "Africa/Ceuta" , 0x000ABC },
- { "Africa/Conakry" , 0x000DC3 },
- { "Africa/Dakar" , 0x000E2E },
- { "Africa/Dar_es_Salaam" , 0x000E94 },
- { "Africa/Djibouti" , 0x000F01 },
- { "Africa/Douala" , 0x000F56 },
- { "Africa/El_Aaiun" , 0x000FAB },
- { "Africa/Freetown" , 0x001011 },
- { "Africa/Gaborone" , 0x001120 },
- { "Africa/Harare" , 0x00118D },
- { "Africa/Johannesburg" , 0x0011E2 },
- { "Africa/Juba" , 0x001250 },
- { "Africa/Kampala" , 0x001363 },
- { "Africa/Khartoum" , 0x0013E2 },
- { "Africa/Kigali" , 0x0014F5 },
- { "Africa/Kinshasa" , 0x00154A },
- { "Africa/Lagos" , 0x0015A5 },
- { "Africa/Libreville" , 0x0015FA },
- { "Africa/Lome" , 0x00164F },
- { "Africa/Luanda" , 0x001693 },
- { "Africa/Lubumbashi" , 0x0016E8 },
- { "Africa/Lusaka" , 0x001743 },
- { "Africa/Malabo" , 0x001798 },
- { "Africa/Maputo" , 0x0017FE },
- { "Africa/Maseru" , 0x001853 },
- { "Africa/Mbabane" , 0x0018BB },
- { "Africa/Mogadishu" , 0x001911 },
- { "Africa/Monrovia" , 0x00196C },
- { "Africa/Nairobi" , 0x0019D2 },
- { "Africa/Ndjamena" , 0x001A51 },
- { "Africa/Niamey" , 0x001ABD },
- { "Africa/Nouakchott" , 0x001B30 },
- { "Africa/Ouagadougou" , 0x001B9B },
- { "Africa/Porto-Novo" , 0x001BF0 },
- { "Africa/Sao_Tome" , 0x001C56 },
- { "Africa/Timbuktu" , 0x001CAB },
- { "Africa/Tripoli" , 0x001D16 },
- { "Africa/Tunis" , 0x001F0F },
- { "Africa/Windhoek" , 0x002021 },
- { "America/Adak" , 0x002268 },
- { "America/Anchorage" , 0x0025DE },
- { "America/Anguilla" , 0x002952 },
- { "America/Antigua" , 0x0029A7 },
- { "America/Araguaina" , 0x002A0D },
- { "America/Argentina/Buenos_Aires" , 0x002B72 },
- { "America/Argentina/Catamarca" , 0x002D20 },
- { "America/Argentina/ComodRivadavia" , 0x002EE1 },
- { "America/Argentina/Cordoba" , 0x003087 },
- { "America/Argentina/Jujuy" , 0x00325C },
- { "America/Argentina/La_Rioja" , 0x003410 },
- { "America/Argentina/Mendoza" , 0x0035C8 },
- { "America/Argentina/Rio_Gallegos" , 0x003788 },
- { "America/Argentina/Salta" , 0x00393D },
- { "America/Argentina/San_Juan" , 0x003AE9 },
- { "America/Argentina/San_Luis" , 0x003CA1 },
- { "America/Argentina/Tucuman" , 0x003E67 },
- { "America/Argentina/Ushuaia" , 0x004023 },
- { "America/Aruba" , 0x0041DE },
- { "America/Asuncion" , 0x004244 },
- { "America/Atikokan" , 0x004529 },
- { "America/Atka" , 0x0045FF },
- { "America/Bahia" , 0x004965 },
- { "America/Bahia_Banderas" , 0x004AF8 },
- { "America/Barbados" , 0x004D71 },
- { "America/Belem" , 0x004E0B },
- { "America/Belize" , 0x004F06 },
- { "America/Blanc-Sablon" , 0x005082 },
- { "America/Boa_Vista" , 0x005136 },
- { "America/Bogota" , 0x00523F },
- { "America/Boise" , 0x0052AB },
- { "America/Buenos_Aires" , 0x005642 },
- { "America/Cambridge_Bay" , 0x0057DB },
- { "America/Campo_Grande" , 0x005B03 },
- { "America/Cancun" , 0x005DF2 },
- { "America/Caracas" , 0x006034 },
- { "America/Catamarca" , 0x00609B },
- { "America/Cayenne" , 0x006241 },
- { "America/Cayman" , 0x0062A3 },
- { "America/Chicago" , 0x0062F8 },
- { "America/Chihuahua" , 0x00680F },
- { "America/Coral_Harbour" , 0x006A7A },
- { "America/Cordoba" , 0x006B0C },
- { "America/Costa_Rica" , 0x006CB2 },
- { "America/Creston" , 0x006D3C },
- { "America/Cuiaba" , 0x006DC8 },
- { "America/Curacao" , 0x0070A6 },
- { "America/Danmarkshavn" , 0x00710C },
- { "America/Dawson" , 0x007250 },
- { "America/Dawson_Creek" , 0x00756D },
- { "America/Denver" , 0x007747 },
- { "America/Detroit" , 0x007ACD },
- { "America/Dominica" , 0x007E2C },
- { "America/Edmonton" , 0x007E81 },
- { "America/Eirunepe" , 0x008239 },
- { "America/El_Salvador" , 0x00834C },
- { "America/Ensenada" , 0x0083C1 },
- { "America/Fort_Wayne" , 0x008868 },
- { "America/Fortaleza" , 0x00872A },
- { "America/Glace_Bay" , 0x008AD2 },
- { "America/Godthab" , 0x008E49 },
- { "America/Goose_Bay" , 0x00910D },
- { "America/Grand_Turk" , 0x0095CA },
- { "America/Grenada" , 0x009879 },
- { "America/Guadeloupe" , 0x0098CE },
- { "America/Guatemala" , 0x009923 },
- { "America/Guayaquil" , 0x0099AC },
- { "America/Guyana" , 0x009A09 },
- { "America/Halifax" , 0x009A8A },
- { "America/Havana" , 0x009FA0 },
- { "America/Hermosillo" , 0x00A313 },
- { "America/Indiana/Indianapolis" , 0x00A3F1 },
- { "America/Indiana/Knox" , 0x00A682 },
- { "America/Indiana/Marengo" , 0x00AA19 },
- { "America/Indiana/Petersburg" , 0x00ACBF },
- { "America/Indiana/Tell_City" , 0x00B20C },
- { "America/Indiana/Vevay" , 0x00B4A5 },
- { "America/Indiana/Vincennes" , 0x00B6E0 },
- { "America/Indiana/Winamac" , 0x00B994 },
- { "America/Indianapolis" , 0x00AFA2 },
- { "America/Inuvik" , 0x00BC4D },
- { "America/Iqaluit" , 0x00BF44 },
- { "America/Jamaica" , 0x00C266 },
- { "America/Jujuy" , 0x00C32B },
- { "America/Juneau" , 0x00C4D5 },
- { "America/Kentucky/Louisville" , 0x00C853 },
- { "America/Kentucky/Monticello" , 0x00CC71 },
- { "America/Knox_IN" , 0x00CFF6 },
- { "America/Kralendijk" , 0x00D367 },
- { "America/La_Paz" , 0x00D3CD },
- { "America/Lima" , 0x00D434 },
- { "America/Los_Angeles" , 0x00D4DC },
- { "America/Louisville" , 0x00D8ED },
- { "America/Lower_Princes" , 0x00DCE2 },
- { "America/Maceio" , 0x00DD48 },
- { "America/Managua" , 0x00DE82 },
- { "America/Manaus" , 0x00DF35 },
- { "America/Marigot" , 0x00E037 },
- { "America/Martinique" , 0x00E08C },
- { "America/Matamoros" , 0x00E0F8 },
- { "America/Mazatlan" , 0x00E351 },
- { "America/Mendoza" , 0x00E5BE },
- { "America/Menominee" , 0x00E772 },
- { "America/Merida" , 0x00EAF3 },
- { "America/Metlakatla" , 0x00ED2E },
- { "America/Mexico_City" , 0x00EE68 },
- { "America/Miquelon" , 0x00F0E3 },
- { "America/Moncton" , 0x00F355 },
- { "America/Monterrey" , 0x00F7EC },
- { "America/Montevideo" , 0x00FA4F },
- { "America/Montreal" , 0x00FD61 },
- { "America/Montserrat" , 0x010251 },
- { "America/Nassau" , 0x0102A6 },
- { "America/New_York" , 0x0105EB },
- { "America/Nipigon" , 0x010AF6 },
- { "America/Nome" , 0x010E47 },
- { "America/Noronha" , 0x0111C5 },
- { "America/North_Dakota/Beulah" , 0x0112F5 },
- { "America/North_Dakota/Center" , 0x011689 },
- { "America/North_Dakota/New_Salem" , 0x011A1D },
- { "America/Ojinaga" , 0x011DC6 },
- { "America/Panama" , 0x012027 },
- { "America/Pangnirtung" , 0x01207C },
- { "America/Paramaribo" , 0x0123B2 },
- { "America/Phoenix" , 0x012444 },
- { "America/Port-au-Prince" , 0x012502 },
- { "America/Port_of_Spain" , 0x012821 },
- { "America/Porto_Acre" , 0x012722 },
- { "America/Porto_Velho" , 0x012876 },
- { "America/Puerto_Rico" , 0x01296C },
- { "America/Rainy_River" , 0x0129D7 },
- { "America/Rankin_Inlet" , 0x012D0F },
- { "America/Recife" , 0x012FF5 },
- { "America/Regina" , 0x01311F },
- { "America/Resolute" , 0x0132DD },
- { "America/Rio_Branco" , 0x0135CE },
- { "America/Rosario" , 0x0136D1 },
- { "America/Santa_Isabel" , 0x013877 },
- { "America/Santarem" , 0x013C1A },
- { "America/Santiago" , 0x013D1F },
- { "America/Santo_Domingo" , 0x0140C8 },
- { "America/Sao_Paulo" , 0x01418E },
- { "America/Scoresbysund" , 0x01449D },
- { "America/Shiprock" , 0x01478B },
- { "America/Sitka" , 0x014B04 },
- { "America/St_Barthelemy" , 0x014E8C },
- { "America/St_Johns" , 0x014EE1 },
- { "America/St_Kitts" , 0x015434 },
- { "America/St_Lucia" , 0x015489 },
- { "America/St_Thomas" , 0x0154DE },
- { "America/St_Vincent" , 0x015533 },
- { "America/Swift_Current" , 0x015588 },
- { "America/Tegucigalpa" , 0x0156A9 },
- { "America/Thule" , 0x015728 },
- { "America/Thunder_Bay" , 0x01596F },
- { "America/Tijuana" , 0x015CB8 },
- { "America/Toronto" , 0x016051 },
- { "America/Tortola" , 0x016571 },
- { "America/Vancouver" , 0x0165C6 },
- { "America/Virgin" , 0x016A03 },
- { "America/Whitehorse" , 0x016A58 },
- { "America/Winnipeg" , 0x016D75 },
- { "America/Yakutat" , 0x0171B5 },
- { "America/Yellowknife" , 0x017520 },
- { "Antarctica/Casey" , 0x017830 },
- { "Antarctica/Davis" , 0x0178CD },
- { "Antarctica/DumontDUrville" , 0x01796E },
- { "Antarctica/Macquarie" , 0x017A00 },
- { "Antarctica/Mawson" , 0x017C47 },
- { "Antarctica/McMurdo" , 0x017CC3 },
- { "Antarctica/Palmer" , 0x01806E },
- { "Antarctica/Rothera" , 0x01838A },
- { "Antarctica/South_Pole" , 0x018400 },
- { "Antarctica/Syowa" , 0x01877E },
- { "Antarctica/Vostok" , 0x0187EC },
- { "Arctic/Longyearbyen" , 0x01885D },
- { "Asia/Aden" , 0x018B8F },
- { "Asia/Almaty" , 0x018BE4 },
- { "Asia/Amman" , 0x018D63 },
- { "Asia/Anadyr" , 0x018F35 },
- { "Asia/Aqtau" , 0x01911A },
- { "Asia/Aqtobe" , 0x019319 },
- { "Asia/Ashgabat" , 0x0194D1 },
- { "Asia/Ashkhabad" , 0x0195EE },
- { "Asia/Baghdad" , 0x01970B },
- { "Asia/Bahrain" , 0x019880 },
- { "Asia/Baku" , 0x0198E6 },
- { "Asia/Bangkok" , 0x019BCE },
- { "Asia/Beirut" , 0x019C23 },
- { "Asia/Bishkek" , 0x019F30 },
- { "Asia/Brunei" , 0x01A0DC },
- { "Asia/Calcutta" , 0x01A13E },
- { "Asia/Choibalsan" , 0x01A1B7 },
- { "Asia/Chongqing" , 0x01A330 },
- { "Asia/Chungking" , 0x01A41F },
- { "Asia/Colombo" , 0x01A4CE },
- { "Asia/Dacca" , 0x01A56A },
- { "Asia/Damascus" , 0x01A610 },
- { "Asia/Dhaka" , 0x01A960 },
- { "Asia/Dili" , 0x01AA06 },
- { "Asia/Dubai" , 0x01AA90 },
- { "Asia/Dushanbe" , 0x01AAE5 },
- { "Asia/Gaza" , 0x01ABE8 },
- { "Asia/Harbin" , 0x01AF3B },
- { "Asia/Hebron" , 0x01B022 },
- { "Asia/Ho_Chi_Minh" , 0x01B37E },
- { "Asia/Hong_Kong" , 0x01B3F6 },
- { "Asia/Hovd" , 0x01B5B8 },
- { "Asia/Irkutsk" , 0x01B730 },
- { "Asia/Istanbul" , 0x01B916 },
- { "Asia/Jakarta" , 0x01BD03 },
- { "Asia/Jayapura" , 0x01BDAD },
- { "Asia/Jerusalem" , 0x01BE49 },
- { "Asia/Kabul" , 0x01C178 },
- { "Asia/Kamchatka" , 0x01C1C9 },
- { "Asia/Karachi" , 0x01C3A5 },
- { "Asia/Kashgar" , 0x01C45A },
- { "Asia/Kathmandu" , 0x01C52B },
- { "Asia/Katmandu" , 0x01C591 },
- { "Asia/Khandyga" , 0x01C5F7 },
- { "Asia/Kolkata" , 0x01C81C },
- { "Asia/Krasnoyarsk" , 0x01C895 },
- { "Asia/Kuala_Lumpur" , 0x01CA7D },
- { "Asia/Kuching" , 0x01CB3A },
- { "Asia/Kuwait" , 0x01CC28 },
- { "Asia/Macao" , 0x01CC7D },
- { "Asia/Macau" , 0x01CDB8 },
- { "Asia/Magadan" , 0x01CEF3 },
- { "Asia/Makassar" , 0x01D0D5 },
- { "Asia/Manila" , 0x01D19A },
- { "Asia/Muscat" , 0x01D21F },
- { "Asia/Nicosia" , 0x01D274 },
- { "Asia/Novokuznetsk" , 0x01D55C },
- { "Asia/Novosibirsk" , 0x01D75E },
- { "Asia/Omsk" , 0x01D949 },
- { "Asia/Oral" , 0x01DB30 },
- { "Asia/Phnom_Penh" , 0x01DD00 },
- { "Asia/Pontianak" , 0x01DD78 },
- { "Asia/Pyongyang" , 0x01DE3A },
- { "Asia/Qatar" , 0x01DEA7 },
- { "Asia/Qyzylorda" , 0x01DF0D },
- { "Asia/Rangoon" , 0x01E0E3 },
- { "Asia/Riyadh" , 0x01E15B },
- { "Asia/Saigon" , 0x01E1B0 },
- { "Asia/Sakhalin" , 0x01E228 },
- { "Asia/Samarkand" , 0x01E41F },
- { "Asia/Seoul" , 0x01E555 },
- { "Asia/Shanghai" , 0x01E5F9 },
- { "Asia/Singapore" , 0x01E6D9 },
- { "Asia/Taipei" , 0x01E790 },
- { "Asia/Tashkent" , 0x01E8A8 },
- { "Asia/Tbilisi" , 0x01E9D9 },
- { "Asia/Tehran" , 0x01EB93 },
- { "Asia/Tel_Aviv" , 0x01EE01 },
- { "Asia/Thimbu" , 0x01F130 },
- { "Asia/Thimphu" , 0x01F196 },
- { "Asia/Tokyo" , 0x01F1FC },
- { "Asia/Ujung_Pandang" , 0x01F285 },
- { "Asia/Ulaanbaatar" , 0x01F302 },
- { "Asia/Ulan_Bator" , 0x01F45D },
- { "Asia/Urumqi" , 0x01F5AA },
- { "Asia/Ust-Nera" , 0x01F671 },
- { "Asia/Vientiane" , 0x01F876 },
- { "Asia/Vladivostok" , 0x01F8EE },
- { "Asia/Yakutsk" , 0x01FADA },
- { "Asia/Yekaterinburg" , 0x01FCBF },
- { "Asia/Yerevan" , 0x01FECA },
- { "Atlantic/Azores" , 0x0200CA },
- { "Atlantic/Bermuda" , 0x0205CD },
- { "Atlantic/Canary" , 0x0208AE },
- { "Atlantic/Cape_Verde" , 0x020B84 },
- { "Atlantic/Faeroe" , 0x020BFD },
- { "Atlantic/Faroe" , 0x020EA1 },
- { "Atlantic/Jan_Mayen" , 0x021145 },
- { "Atlantic/Madeira" , 0x021477 },
- { "Atlantic/Reykjavik" , 0x021980 },
- { "Atlantic/South_Georgia" , 0x021B39 },
- { "Atlantic/St_Helena" , 0x021D4B },
- { "Atlantic/Stanley" , 0x021B7D },
- { "Australia/ACT" , 0x021DA0 },
- { "Australia/Adelaide" , 0x0220BD },
- { "Australia/Brisbane" , 0x0223E9 },
- { "Australia/Broken_Hill" , 0x0224B0 },
- { "Australia/Canberra" , 0x0227EE },
- { "Australia/Currie" , 0x022B0B },
- { "Australia/Darwin" , 0x022E3E },
- { "Australia/Eucla" , 0x022EC4 },
- { "Australia/Hobart" , 0x022F99 },
- { "Australia/LHI" , 0x0232F7 },
- { "Australia/Lindeman" , 0x023592 },
- { "Australia/Lord_Howe" , 0x023673 },
- { "Australia/Melbourne" , 0x02391E },
- { "Australia/North" , 0x023C43 },
- { "Australia/NSW" , 0x023CB7 },
- { "Australia/Perth" , 0x023FD4 },
- { "Australia/Queensland" , 0x0240AC },
- { "Australia/South" , 0x024158 },
- { "Australia/Sydney" , 0x024475 },
- { "Australia/Tasmania" , 0x0247B2 },
- { "Australia/Victoria" , 0x024AF7 },
- { "Australia/West" , 0x024E14 },
- { "Australia/Yancowinna" , 0x024ECA },
- { "Brazil/Acre" , 0x0251EC },
- { "Brazil/DeNoronha" , 0x0252EB },
- { "Brazil/East" , 0x02540B },
- { "Brazil/West" , 0x0256E8 },
- { "Canada/Atlantic" , 0x0257E0 },
- { "Canada/Central" , 0x025CC8 },
- { "Canada/East-Saskatchewan" , 0x0265D2 },
- { "Canada/Eastern" , 0x0260E2 },
- { "Canada/Mountain" , 0x02675B },
- { "Canada/Newfoundland" , 0x026AD1 },
- { "Canada/Pacific" , 0x026FFC },
- { "Canada/Saskatchewan" , 0x027415 },
- { "Canada/Yukon" , 0x02759E },
- { "CET" , 0x0278A1 },
- { "Chile/Continental" , 0x027BAA },
- { "Chile/EasterIsland" , 0x027F45 },
- { "CST6CDT" , 0x028287 },
- { "Cuba" , 0x0285D8 },
- { "EET" , 0x02894B },
- { "Egypt" , 0x028BFE },
- { "Eire" , 0x028EC1 },
- { "EST" , 0x0293D2 },
- { "EST5EDT" , 0x029416 },
- { "Etc/GMT" , 0x029767 },
- { "Etc/GMT+0" , 0x029833 },
- { "Etc/GMT+1" , 0x0298BD },
- { "Etc/GMT+10" , 0x02994A },
- { "Etc/GMT+11" , 0x0299D8 },
- { "Etc/GMT+12" , 0x029A66 },
- { "Etc/GMT+2" , 0x029B81 },
- { "Etc/GMT+3" , 0x029C0D },
- { "Etc/GMT+4" , 0x029C99 },
- { "Etc/GMT+5" , 0x029D25 },
- { "Etc/GMT+6" , 0x029DB1 },
- { "Etc/GMT+7" , 0x029E3D },
- { "Etc/GMT+8" , 0x029EC9 },
- { "Etc/GMT+9" , 0x029F55 },
- { "Etc/GMT-0" , 0x0297EF },
- { "Etc/GMT-1" , 0x029877 },
- { "Etc/GMT-10" , 0x029903 },
- { "Etc/GMT-11" , 0x029991 },
- { "Etc/GMT-12" , 0x029A1F },
- { "Etc/GMT-13" , 0x029AAD },
- { "Etc/GMT-14" , 0x029AF4 },
- { "Etc/GMT-2" , 0x029B3B },
- { "Etc/GMT-3" , 0x029BC7 },
- { "Etc/GMT-4" , 0x029C53 },
- { "Etc/GMT-5" , 0x029CDF },
- { "Etc/GMT-6" , 0x029D6B },
- { "Etc/GMT-7" , 0x029DF7 },
- { "Etc/GMT-8" , 0x029E83 },
- { "Etc/GMT-9" , 0x029F0F },
- { "Etc/GMT0" , 0x0297AB },
- { "Etc/Greenwich" , 0x029F9B },
- { "Etc/UCT" , 0x029FDF },
- { "Etc/Universal" , 0x02A023 },
- { "Etc/UTC" , 0x02A067 },
- { "Etc/Zulu" , 0x02A0AB },
- { "Europe/Amsterdam" , 0x02A0EF },
- { "Europe/Andorra" , 0x02A52D },
- { "Europe/Athens" , 0x02A7A9 },
- { "Europe/Belfast" , 0x02AAEC },
- { "Europe/Belgrade" , 0x02B023 },
- { "Europe/Berlin" , 0x02B2EC },
- { "Europe/Bratislava" , 0x02B650 },
- { "Europe/Brussels" , 0x02B982 },
- { "Europe/Bucharest" , 0x02BDB9 },
- { "Europe/Budapest" , 0x02C0E3 },
- { "Europe/Busingen" , 0x02C456 },
- { "Europe/Chisinau" , 0x02C70D },
- { "Europe/Copenhagen" , 0x02CA9B },
- { "Europe/Dublin" , 0x02CDA5 },
- { "Europe/Gibraltar" , 0x02D2B6 },
- { "Europe/Guernsey" , 0x02D70D },
- { "Europe/Helsinki" , 0x02DC44 },
- { "Europe/Isle_of_Man" , 0x02DEFA },
- { "Europe/Istanbul" , 0x02E431 },
- { "Europe/Jersey" , 0x02E81E },
- { "Europe/Kaliningrad" , 0x02ED55 },
- { "Europe/Kiev" , 0x02EFBB },
- { "Europe/Lisbon" , 0x02F2D2 },
- { "Europe/Ljubljana" , 0x02F7D6 },
- { "Europe/London" , 0x02FA9F },
- { "Europe/Luxembourg" , 0x02FFD6 },
- { "Europe/Madrid" , 0x03042C },
- { "Europe/Malta" , 0x0307F2 },
- { "Europe/Mariehamn" , 0x030BAB },
- { "Europe/Minsk" , 0x030E61 },
- { "Europe/Monaco" , 0x03106F },
- { "Europe/Moscow" , 0x0314AA },
- { "Europe/Nicosia" , 0x0316FB },
- { "Europe/Oslo" , 0x0319E3 },
- { "Europe/Paris" , 0x031D15 },
- { "Europe/Podgorica" , 0x03215B },
- { "Europe/Prague" , 0x032424 },
- { "Europe/Riga" , 0x032756 },
- { "Europe/Rome" , 0x032A9B },
- { "Europe/Samara" , 0x032E5E },
- { "Europe/San_Marino" , 0x033091 },
- { "Europe/Sarajevo" , 0x033454 },
- { "Europe/Simferopol" , 0x03371D },
- { "Europe/Skopje" , 0x033A48 },
- { "Europe/Sofia" , 0x033D11 },
- { "Europe/Stockholm" , 0x034019 },
- { "Europe/Tallinn" , 0x0342C8 },
- { "Europe/Tirane" , 0x034602 },
- { "Europe/Tiraspol" , 0x034908 },
- { "Europe/Uzhgorod" , 0x034C96 },
- { "Europe/Vaduz" , 0x034FAD },
- { "Europe/Vatican" , 0x03525C },
- { "Europe/Vienna" , 0x03561F },
- { "Europe/Vilnius" , 0x03594C },
- { "Europe/Volgograd" , 0x035C8B },
- { "Europe/Warsaw" , 0x035E8B },
- { "Europe/Zagreb" , 0x03626C },
- { "Europe/Zaporozhye" , 0x036535 },
- { "Europe/Zurich" , 0x036876 },
- { "Factory" , 0x036B25 },
- { "GB" , 0x036B96 },
- { "GB-Eire" , 0x0370CD },
- { "GMT" , 0x037604 },
- { "GMT+0" , 0x0376D0 },
- { "GMT-0" , 0x03768C },
- { "GMT0" , 0x037648 },
- { "Greenwich" , 0x037714 },
- { "Hongkong" , 0x037758 },
- { "HST" , 0x03791A },
- { "Iceland" , 0x03795E },
- { "Indian/Antananarivo" , 0x037B17 },
- { "Indian/Chagos" , 0x037B8B },
- { "Indian/Christmas" , 0x037BED },
- { "Indian/Cocos" , 0x037C31 },
- { "Indian/Comoro" , 0x037C75 },
- { "Indian/Kerguelen" , 0x037CCA },
- { "Indian/Mahe" , 0x037D1F },
- { "Indian/Maldives" , 0x037D74 },
- { "Indian/Mauritius" , 0x037DC9 },
- { "Indian/Mayotte" , 0x037E3F },
- { "Indian/Reunion" , 0x037E94 },
- { "Iran" , 0x037EE9 },
- { "Israel" , 0x038157 },
- { "Jamaica" , 0x038486 },
- { "Japan" , 0x03854B },
- { "Kwajalein" , 0x0385D4 },
- { "Libya" , 0x038637 },
- { "MET" , 0x038830 },
- { "Mexico/BajaNorte" , 0x038B39 },
- { "Mexico/BajaSur" , 0x038EA2 },
- { "Mexico/General" , 0x0390E7 },
- { "MST" , 0x039345 },
- { "MST7MDT" , 0x039389 },
- { "Navajo" , 0x0396DA },
- { "NZ" , 0x039A53 },
- { "NZ-CHAT" , 0x039DD1 },
- { "Pacific/Apia" , 0x03A0B9 },
- { "Pacific/Auckland" , 0x03A255 },
- { "Pacific/Chatham" , 0x03A5E1 },
- { "Pacific/Chuuk" , 0x03A8D8 },
- { "Pacific/Easter" , 0x03A931 },
- { "Pacific/Efate" , 0x03AC8F },
- { "Pacific/Enderbury" , 0x03AD55 },
- { "Pacific/Fakaofo" , 0x03ADC3 },
- { "Pacific/Fiji" , 0x03AE14 },
- { "Pacific/Funafuti" , 0x03AFA7 },
- { "Pacific/Galapagos" , 0x03AFEB },
- { "Pacific/Gambier" , 0x03B063 },
- { "Pacific/Guadalcanal" , 0x03B0C8 },
- { "Pacific/Guam" , 0x03B11D },
- { "Pacific/Honolulu" , 0x03B173 },
- { "Pacific/Johnston" , 0x03B1EA },
- { "Pacific/Kiritimati" , 0x03B269 },
- { "Pacific/Kosrae" , 0x03B2D4 },
- { "Pacific/Kwajalein" , 0x03B331 },
- { "Pacific/Majuro" , 0x03B39D },
- { "Pacific/Marquesas" , 0x03B3FC },
- { "Pacific/Midway" , 0x03B463 },
- { "Pacific/Nauru" , 0x03B4ED },
- { "Pacific/Niue" , 0x03B565 },
- { "Pacific/Norfolk" , 0x03B5C3 },
- { "Pacific/Noumea" , 0x03B618 },
- { "Pacific/Pago_Pago" , 0x03B6A8 },
- { "Pacific/Palau" , 0x03B731 },
- { "Pacific/Pitcairn" , 0x03B775 },
- { "Pacific/Pohnpei" , 0x03B7CA },
- { "Pacific/Ponape" , 0x03B81F },
- { "Pacific/Port_Moresby" , 0x03B864 },
- { "Pacific/Rarotonga" , 0x03B8A8 },
- { "Pacific/Saipan" , 0x03B984 },
- { "Pacific/Samoa" , 0x03B9E7 },
- { "Pacific/Tahiti" , 0x03BA70 },
- { "Pacific/Tarawa" , 0x03BAD5 },
- { "Pacific/Tongatapu" , 0x03BB29 },
- { "Pacific/Truk" , 0x03BBB5 },
- { "Pacific/Wake" , 0x03BBFA },
- { "Pacific/Wallis" , 0x03BC4A },
- { "Pacific/Yap" , 0x03BC8E },
- { "Poland" , 0x03BCD3 },
- { "Portugal" , 0x03C0B4 },
- { "PRC" , 0x03C5B0 },
- { "PST8PDT" , 0x03C661 },
- { "ROC" , 0x03C9B2 },
- { "ROK" , 0x03CACA },
- { "Singapore" , 0x03CB6E },
- { "Turkey" , 0x03CC25 },
- { "UCT" , 0x03D012 },
- { "Universal" , 0x03D056 },
- { "US/Alaska" , 0x03D09A },
- { "US/Aleutian" , 0x03D403 },
- { "US/Arizona" , 0x03D769 },
- { "US/Central" , 0x03D7F7 },
- { "US/East-Indiana" , 0x03E201 },
- { "US/Eastern" , 0x03DD02 },
- { "US/Hawaii" , 0x03E46B },
- { "US/Indiana-Starke" , 0x03E4DC },
- { "US/Michigan" , 0x03E84D },
- { "US/Mountain" , 0x03EB84 },
- { "US/Pacific" , 0x03EEFD },
- { "US/Pacific-New" , 0x03F302 },
- { "US/Samoa" , 0x03F707 },
- { "UTC" , 0x03F790 },
- { "W-SU" , 0x03FA87 },
- { "WET" , 0x03F7D4 },
- { "Zulu" , 0x03FCC1 },
+ { "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/Vostok" , 0x0188EE },
+ { "Arctic/Longyearbyen" , 0x01895F },
+ { "Asia/Aden" , 0x018C91 },
+ { "Asia/Almaty" , 0x018CE6 },
+ { "Asia/Amman" , 0x018E65 },
+ { "Asia/Anadyr" , 0x019037 },
+ { "Asia/Aqtau" , 0x01921C },
+ { "Asia/Aqtobe" , 0x01941B },
+ { "Asia/Ashgabat" , 0x0195D3 },
+ { "Asia/Ashkhabad" , 0x0196F0 },
+ { "Asia/Baghdad" , 0x01980D },
+ { "Asia/Bahrain" , 0x019982 },
+ { "Asia/Baku" , 0x0199E8 },
+ { "Asia/Bangkok" , 0x019CD0 },
+ { "Asia/Beirut" , 0x019D25 },
+ { "Asia/Bishkek" , 0x01A032 },
+ { "Asia/Brunei" , 0x01A1DE },
+ { "Asia/Calcutta" , 0x01A240 },
+ { "Asia/Choibalsan" , 0x01A2B9 },
+ { "Asia/Chongqing" , 0x01A432 },
+ { "Asia/Chungking" , 0x01A521 },
+ { "Asia/Colombo" , 0x01A5D0 },
+ { "Asia/Dacca" , 0x01A66C },
+ { "Asia/Damascus" , 0x01A712 },
+ { "Asia/Dhaka" , 0x01AA62 },
+ { "Asia/Dili" , 0x01AB08 },
+ { "Asia/Dubai" , 0x01AB92 },
+ { "Asia/Dushanbe" , 0x01ABE7 },
+ { "Asia/Gaza" , 0x01ACEA },
+ { "Asia/Harbin" , 0x01B03D },
+ { "Asia/Hebron" , 0x01B124 },
+ { "Asia/Ho_Chi_Minh" , 0x01B480 },
+ { "Asia/Hong_Kong" , 0x01B4F8 },
+ { "Asia/Hovd" , 0x01B6BA },
+ { "Asia/Irkutsk" , 0x01B832 },
+ { "Asia/Istanbul" , 0x01BA18 },
+ { "Asia/Jakarta" , 0x01BE05 },
+ { "Asia/Jayapura" , 0x01BEAF },
+ { "Asia/Jerusalem" , 0x01BF4B },
+ { "Asia/Kabul" , 0x01C27A },
+ { "Asia/Kamchatka" , 0x01C2CB },
+ { "Asia/Karachi" , 0x01C4A7 },
+ { "Asia/Kashgar" , 0x01C55C },
+ { "Asia/Kathmandu" , 0x01C62D },
+ { "Asia/Katmandu" , 0x01C693 },
+ { "Asia/Khandyga" , 0x01C6F9 },
+ { "Asia/Kolkata" , 0x01C91E },
+ { "Asia/Krasnoyarsk" , 0x01C997 },
+ { "Asia/Kuala_Lumpur" , 0x01CB7F },
+ { "Asia/Kuching" , 0x01CC3C },
+ { "Asia/Kuwait" , 0x01CD2A },
+ { "Asia/Macao" , 0x01CD7F },
+ { "Asia/Macau" , 0x01CEBA },
+ { "Asia/Magadan" , 0x01CFF5 },
+ { "Asia/Makassar" , 0x01D1D7 },
+ { "Asia/Manila" , 0x01D29C },
+ { "Asia/Muscat" , 0x01D321 },
+ { "Asia/Nicosia" , 0x01D376 },
+ { "Asia/Novokuznetsk" , 0x01D65E },
+ { "Asia/Novosibirsk" , 0x01D860 },
+ { "Asia/Omsk" , 0x01DA4B },
+ { "Asia/Oral" , 0x01DC32 },
+ { "Asia/Phnom_Penh" , 0x01DE02 },
+ { "Asia/Pontianak" , 0x01DE7A },
+ { "Asia/Pyongyang" , 0x01DF3C },
+ { "Asia/Qatar" , 0x01DFA9 },
+ { "Asia/Qyzylorda" , 0x01E00F },
+ { "Asia/Rangoon" , 0x01E1E5 },
+ { "Asia/Riyadh" , 0x01E25D },
+ { "Asia/Saigon" , 0x01E2B2 },
+ { "Asia/Sakhalin" , 0x01E32A },
+ { "Asia/Samarkand" , 0x01E521 },
+ { "Asia/Seoul" , 0x01E657 },
+ { "Asia/Shanghai" , 0x01E6FB },
+ { "Asia/Singapore" , 0x01E7DB },
+ { "Asia/Taipei" , 0x01E892 },
+ { "Asia/Tashkent" , 0x01E9AA },
+ { "Asia/Tbilisi" , 0x01EADB },
+ { "Asia/Tehran" , 0x01EC95 },
+ { "Asia/Tel_Aviv" , 0x01EF03 },
+ { "Asia/Thimbu" , 0x01F232 },
+ { "Asia/Thimphu" , 0x01F298 },
+ { "Asia/Tokyo" , 0x01F2FE },
+ { "Asia/Ujung_Pandang" , 0x01F387 },
+ { "Asia/Ulaanbaatar" , 0x01F404 },
+ { "Asia/Ulan_Bator" , 0x01F55F },
+ { "Asia/Urumqi" , 0x01F6AC },
+ { "Asia/Ust-Nera" , 0x01F773 },
+ { "Asia/Vientiane" , 0x01F978 },
+ { "Asia/Vladivostok" , 0x01F9F0 },
+ { "Asia/Yakutsk" , 0x01FBDC },
+ { "Asia/Yekaterinburg" , 0x01FDC1 },
+ { "Asia/Yerevan" , 0x01FFCC },
+ { "Atlantic/Azores" , 0x0201CC },
+ { "Atlantic/Bermuda" , 0x0206CF },
+ { "Atlantic/Canary" , 0x0209B0 },
+ { "Atlantic/Cape_Verde" , 0x020C86 },
+ { "Atlantic/Faeroe" , 0x020CFF },
+ { "Atlantic/Faroe" , 0x020FA3 },
+ { "Atlantic/Jan_Mayen" , 0x021247 },
+ { "Atlantic/Madeira" , 0x021579 },
+ { "Atlantic/Reykjavik" , 0x021A82 },
+ { "Atlantic/South_Georgia" , 0x021C3B },
+ { "Atlantic/St_Helena" , 0x021E4D },
+ { "Atlantic/Stanley" , 0x021C7F },
+ { "Australia/ACT" , 0x021EA2 },
+ { "Australia/Adelaide" , 0x0221BF },
+ { "Australia/Brisbane" , 0x0224EB },
+ { "Australia/Broken_Hill" , 0x0225B2 },
+ { "Australia/Canberra" , 0x0228F0 },
+ { "Australia/Currie" , 0x022C0D },
+ { "Australia/Darwin" , 0x022F40 },
+ { "Australia/Eucla" , 0x022FC6 },
+ { "Australia/Hobart" , 0x02309B },
+ { "Australia/LHI" , 0x0233F9 },
+ { "Australia/Lindeman" , 0x023694 },
+ { "Australia/Lord_Howe" , 0x023775 },
+ { "Australia/Melbourne" , 0x023A20 },
+ { "Australia/North" , 0x023D45 },
+ { "Australia/NSW" , 0x023DB9 },
+ { "Australia/Perth" , 0x0240D6 },
+ { "Australia/Queensland" , 0x0241AE },
+ { "Australia/South" , 0x02425A },
+ { "Australia/Sydney" , 0x024577 },
+ { "Australia/Tasmania" , 0x0248B4 },
+ { "Australia/Victoria" , 0x024BF9 },
+ { "Australia/West" , 0x024F16 },
+ { "Australia/Yancowinna" , 0x024FCC },
+ { "Brazil/Acre" , 0x0252EE },
+ { "Brazil/DeNoronha" , 0x0253F2 },
+ { "Brazil/East" , 0x025512 },
+ { "Brazil/West" , 0x0257EF },
+ { "Canada/Atlantic" , 0x0258E7 },
+ { "Canada/Central" , 0x025DCF },
+ { "Canada/East-Saskatchewan" , 0x0266D9 },
+ { "Canada/Eastern" , 0x0261E9 },
+ { "Canada/Mountain" , 0x026862 },
+ { "Canada/Newfoundland" , 0x026BD8 },
+ { "Canada/Pacific" , 0x027103 },
+ { "Canada/Saskatchewan" , 0x02751C },
+ { "Canada/Yukon" , 0x0276A5 },
+ { "CET" , 0x0279A8 },
+ { "Chile/Continental" , 0x027CB1 },
+ { "Chile/EasterIsland" , 0x02804C },
+ { "CST6CDT" , 0x02838E },
+ { "Cuba" , 0x0286DF },
+ { "EET" , 0x028A52 },
+ { "Egypt" , 0x028D05 },
+ { "Eire" , 0x028FC8 },
+ { "EST" , 0x0294D9 },
+ { "EST5EDT" , 0x02951D },
+ { "Etc/GMT" , 0x02986E },
+ { "Etc/GMT+0" , 0x02993A },
+ { "Etc/GMT+1" , 0x0299C4 },
+ { "Etc/GMT+10" , 0x029A51 },
+ { "Etc/GMT+11" , 0x029ADF },
+ { "Etc/GMT+12" , 0x029B6D },
+ { "Etc/GMT+2" , 0x029C88 },
+ { "Etc/GMT+3" , 0x029D14 },
+ { "Etc/GMT+4" , 0x029DA0 },
+ { "Etc/GMT+5" , 0x029E2C },
+ { "Etc/GMT+6" , 0x029EB8 },
+ { "Etc/GMT+7" , 0x029F44 },
+ { "Etc/GMT+8" , 0x029FD0 },
+ { "Etc/GMT+9" , 0x02A05C },
+ { "Etc/GMT-0" , 0x0298F6 },
+ { "Etc/GMT-1" , 0x02997E },
+ { "Etc/GMT-10" , 0x029A0A },
+ { "Etc/GMT-11" , 0x029A98 },
+ { "Etc/GMT-12" , 0x029B26 },
+ { "Etc/GMT-13" , 0x029BB4 },
+ { "Etc/GMT-14" , 0x029BFB },
+ { "Etc/GMT-2" , 0x029C42 },
+ { "Etc/GMT-3" , 0x029CCE },
+ { "Etc/GMT-4" , 0x029D5A },
+ { "Etc/GMT-5" , 0x029DE6 },
+ { "Etc/GMT-6" , 0x029E72 },
+ { "Etc/GMT-7" , 0x029EFE },
+ { "Etc/GMT-8" , 0x029F8A },
+ { "Etc/GMT-9" , 0x02A016 },
+ { "Etc/GMT0" , 0x0298B2 },
+ { "Etc/Greenwich" , 0x02A0A2 },
+ { "Etc/UCT" , 0x02A0E6 },
+ { "Etc/Universal" , 0x02A12A },
+ { "Etc/UTC" , 0x02A16E },
+ { "Etc/Zulu" , 0x02A1B2 },
+ { "Europe/Amsterdam" , 0x02A1F6 },
+ { "Europe/Andorra" , 0x02A634 },
+ { "Europe/Athens" , 0x02A8B0 },
+ { "Europe/Belfast" , 0x02ABF3 },
+ { "Europe/Belgrade" , 0x02B12A },
+ { "Europe/Berlin" , 0x02B3F3 },
+ { "Europe/Bratislava" , 0x02B757 },
+ { "Europe/Brussels" , 0x02BA89 },
+ { "Europe/Bucharest" , 0x02BEC0 },
+ { "Europe/Budapest" , 0x02C1EA },
+ { "Europe/Busingen" , 0x02C55D },
+ { "Europe/Chisinau" , 0x02C814 },
+ { "Europe/Copenhagen" , 0x02CBA2 },
+ { "Europe/Dublin" , 0x02CEAC },
+ { "Europe/Gibraltar" , 0x02D3BD },
+ { "Europe/Guernsey" , 0x02D814 },
+ { "Europe/Helsinki" , 0x02DD4B },
+ { "Europe/Isle_of_Man" , 0x02E001 },
+ { "Europe/Istanbul" , 0x02E538 },
+ { "Europe/Jersey" , 0x02E925 },
+ { "Europe/Kaliningrad" , 0x02EE5C },
+ { "Europe/Kiev" , 0x02F0C2 },
+ { "Europe/Lisbon" , 0x02F3D9 },
+ { "Europe/Ljubljana" , 0x02F8DD },
+ { "Europe/London" , 0x02FBA6 },
+ { "Europe/Luxembourg" , 0x0300DD },
+ { "Europe/Madrid" , 0x030533 },
+ { "Europe/Malta" , 0x0308F9 },
+ { "Europe/Mariehamn" , 0x030CB2 },
+ { "Europe/Minsk" , 0x030F68 },
+ { "Europe/Monaco" , 0x031176 },
+ { "Europe/Moscow" , 0x0315B1 },
+ { "Europe/Nicosia" , 0x031802 },
+ { "Europe/Oslo" , 0x031AEA },
+ { "Europe/Paris" , 0x031E1C },
+ { "Europe/Podgorica" , 0x032262 },
+ { "Europe/Prague" , 0x03252B },
+ { "Europe/Riga" , 0x03285D },
+ { "Europe/Rome" , 0x032BA2 },
+ { "Europe/Samara" , 0x032F65 },
+ { "Europe/San_Marino" , 0x033198 },
+ { "Europe/Sarajevo" , 0x03355B },
+ { "Europe/Simferopol" , 0x033824 },
+ { "Europe/Skopje" , 0x033B4F },
+ { "Europe/Sofia" , 0x033E18 },
+ { "Europe/Stockholm" , 0x034120 },
+ { "Europe/Tallinn" , 0x0343CF },
+ { "Europe/Tirane" , 0x034709 },
+ { "Europe/Tiraspol" , 0x034A0F },
+ { "Europe/Uzhgorod" , 0x034D9D },
+ { "Europe/Vaduz" , 0x0350B4 },
+ { "Europe/Vatican" , 0x035363 },
+ { "Europe/Vienna" , 0x035726 },
+ { "Europe/Vilnius" , 0x035A53 },
+ { "Europe/Volgograd" , 0x035D92 },
+ { "Europe/Warsaw" , 0x035F92 },
+ { "Europe/Zagreb" , 0x036373 },
+ { "Europe/Zaporozhye" , 0x03663C },
+ { "Europe/Zurich" , 0x03697D },
+ { "Factory" , 0x036C2C },
+ { "GB" , 0x036C9D },
+ { "GB-Eire" , 0x0371D4 },
+ { "GMT" , 0x03770B },
+ { "GMT+0" , 0x0377D7 },
+ { "GMT-0" , 0x037793 },
+ { "GMT0" , 0x03774F },
+ { "Greenwich" , 0x03781B },
+ { "Hongkong" , 0x03785F },
+ { "HST" , 0x037A21 },
+ { "Iceland" , 0x037A65 },
+ { "Indian/Antananarivo" , 0x037C1E },
+ { "Indian/Chagos" , 0x037C92 },
+ { "Indian/Christmas" , 0x037CF4 },
+ { "Indian/Cocos" , 0x037D38 },
+ { "Indian/Comoro" , 0x037D7C },
+ { "Indian/Kerguelen" , 0x037DD1 },
+ { "Indian/Mahe" , 0x037E26 },
+ { "Indian/Maldives" , 0x037E7B },
+ { "Indian/Mauritius" , 0x037ED0 },
+ { "Indian/Mayotte" , 0x037F46 },
+ { "Indian/Reunion" , 0x037F9B },
+ { "Iran" , 0x037FF0 },
+ { "Israel" , 0x03825E },
+ { "Jamaica" , 0x03858D },
+ { "Japan" , 0x038652 },
+ { "Kwajalein" , 0x0386DB },
+ { "Libya" , 0x03873E },
+ { "MET" , 0x038847 },
+ { "Mexico/BajaNorte" , 0x038B50 },
+ { "Mexico/BajaSur" , 0x038EB9 },
+ { "Mexico/General" , 0x0390FE },
+ { "MST" , 0x03935C },
+ { "MST7MDT" , 0x0393A0 },
+ { "Navajo" , 0x0396F1 },
+ { "NZ" , 0x039A6A },
+ { "NZ-CHAT" , 0x039DE8 },
+ { "Pacific/Apia" , 0x03A0D0 },
+ { "Pacific/Auckland" , 0x03A26C },
+ { "Pacific/Chatham" , 0x03A5F8 },
+ { "Pacific/Chuuk" , 0x03A8EF },
+ { "Pacific/Easter" , 0x03A948 },
+ { "Pacific/Efate" , 0x03ACA6 },
+ { "Pacific/Enderbury" , 0x03AD6C },
+ { "Pacific/Fakaofo" , 0x03ADDA },
+ { "Pacific/Fiji" , 0x03AE2B },
+ { "Pacific/Funafuti" , 0x03AFBE },
+ { "Pacific/Galapagos" , 0x03B002 },
+ { "Pacific/Gambier" , 0x03B07A },
+ { "Pacific/Guadalcanal" , 0x03B0DF },
+ { "Pacific/Guam" , 0x03B134 },
+ { "Pacific/Honolulu" , 0x03B18A },
+ { "Pacific/Johnston" , 0x03B201 },
+ { "Pacific/Kiritimati" , 0x03B280 },
+ { "Pacific/Kosrae" , 0x03B2EB },
+ { "Pacific/Kwajalein" , 0x03B348 },
+ { "Pacific/Majuro" , 0x03B3B4 },
+ { "Pacific/Marquesas" , 0x03B413 },
+ { "Pacific/Midway" , 0x03B47A },
+ { "Pacific/Nauru" , 0x03B504 },
+ { "Pacific/Niue" , 0x03B57C },
+ { "Pacific/Norfolk" , 0x03B5DA },
+ { "Pacific/Noumea" , 0x03B62F },
+ { "Pacific/Pago_Pago" , 0x03B6BF },
+ { "Pacific/Palau" , 0x03B748 },
+ { "Pacific/Pitcairn" , 0x03B78C },
+ { "Pacific/Pohnpei" , 0x03B7E1 },
+ { "Pacific/Ponape" , 0x03B836 },
+ { "Pacific/Port_Moresby" , 0x03B87B },
+ { "Pacific/Rarotonga" , 0x03B8BF },
+ { "Pacific/Saipan" , 0x03B99B },
+ { "Pacific/Samoa" , 0x03B9FE },
+ { "Pacific/Tahiti" , 0x03BA87 },
+ { "Pacific/Tarawa" , 0x03BAEC },
+ { "Pacific/Tongatapu" , 0x03BB40 },
+ { "Pacific/Truk" , 0x03BBCC },
+ { "Pacific/Wake" , 0x03BC11 },
+ { "Pacific/Wallis" , 0x03BC61 },
+ { "Pacific/Yap" , 0x03BCA5 },
+ { "Poland" , 0x03BCEA },
+ { "Portugal" , 0x03C0CB },
+ { "PRC" , 0x03C5C7 },
+ { "PST8PDT" , 0x03C678 },
+ { "ROC" , 0x03C9C9 },
+ { "ROK" , 0x03CAE1 },
+ { "Singapore" , 0x03CB85 },
+ { "Turkey" , 0x03CC3C },
+ { "UCT" , 0x03D029 },
+ { "Universal" , 0x03D06D },
+ { "US/Alaska" , 0x03D0B1 },
+ { "US/Aleutian" , 0x03D41A },
+ { "US/Arizona" , 0x03D780 },
+ { "US/Central" , 0x03D80E },
+ { "US/East-Indiana" , 0x03E218 },
+ { "US/Eastern" , 0x03DD19 },
+ { "US/Hawaii" , 0x03E482 },
+ { "US/Indiana-Starke" , 0x03E4F3 },
+ { "US/Michigan" , 0x03E864 },
+ { "US/Mountain" , 0x03EB9B },
+ { "US/Pacific" , 0x03EF14 },
+ { "US/Pacific-New" , 0x03F319 },
+ { "US/Samoa" , 0x03F71E },
+ { "UTC" , 0x03F7A7 },
+ { "W-SU" , 0x03FA9E },
+ { "WET" , 0x03F7EB },
+ { "Zulu" , 0x03FCD8 },
};
/* This is a generated file, do not modify */
-const unsigned char timelib_timezone_db_data_builtin[261381] = {
+const unsigned char timelib_timezone_db_data_builtin[261404] = {
/* Africa/Abidjan */
@@ -758,7 +758,7 @@ const unsigned char timelib_timezone_db_data_builtin[261381] = {
/* Africa/Casablanca */
0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x41, 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, 0x5F, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0x96, 0x51, 0xF9, 0x9C,
+0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0x96, 0x51, 0xF9, 0x9C,
0xC6, 0xFF, 0x14, 0x80, 0xC7, 0x58, 0xAC, 0x70, 0xC7, 0xD9, 0xED, 0x80, 0xD2, 0xA1, 0x32, 0xF0,
0xDB, 0x35, 0xA4, 0x00, 0xDB, 0xEE, 0x27, 0xF0, 0xFB, 0x25, 0x72, 0x40, 0xFB, 0xC2, 0xEF, 0x70,
0x08, 0x6B, 0x84, 0x80, 0x08, 0xC6, 0x6D, 0xF0, 0x0B, 0xE8, 0x0C, 0x00, 0x0C, 0x61, 0x47, 0xF0,
@@ -767,32 +767,34 @@ const unsigned char timelib_timezone_db_data_builtin[261381] = {
0x4A, 0x23, 0x1A, 0x00, 0x4A, 0x8D, 0xD5, 0x70, 0x4B, 0xDC, 0xC0, 0x80, 0x4C, 0x5D, 0xE5, 0x70,
0x4D, 0x97, 0xB8, 0x80, 0x4E, 0x34, 0x8C, 0xF0, 0x4F, 0x9C, 0xA0, 0xA0, 0x50, 0x08, 0xBB, 0xA0,
0x50, 0x31, 0x9A, 0x20, 0x50, 0x67, 0xA7, 0xA0, 0x51, 0x7C, 0x82, 0xA0, 0x51, 0xD8, 0xCB, 0xA0,
-0x52, 0x05, 0x9E, 0xA0, 0x52, 0x47, 0x89, 0xA0, 0x53, 0x5C, 0x64, 0xA0, 0x53, 0xAF, 0x73, 0x20,
-0x53, 0xD7, 0x00, 0x20, 0x54, 0x27, 0x6B, 0xA0, 0x55, 0x3C, 0x46, 0xA0, 0x55, 0x82, 0x26, 0x20,
-0x55, 0xA9, 0xB3, 0x20, 0x56, 0x07, 0x4D, 0xA0, 0x57, 0x1C, 0x28, 0xA0, 0x57, 0x56, 0x2A, 0xA0,
-0x57, 0x7D, 0xB7, 0xA0, 0x57, 0xE7, 0x2F, 0xA0, 0x59, 0x05, 0x45, 0x20, 0x59, 0x28, 0xDD, 0xA0,
-0x59, 0x50, 0x6A, 0xA0, 0x59, 0xC7, 0x11, 0xA0, 0x5A, 0xE5, 0x27, 0x20, 0x5A, 0xFB, 0x90, 0xA0,
-0x5B, 0x23, 0x1D, 0xA0, 0x5B, 0xB0, 0x2E, 0x20, 0x5C, 0xC5, 0x09, 0x20, 0x5C, 0xCF, 0x95, 0x20,
-0x5C, 0xF7, 0x22, 0x20, 0x5D, 0x90, 0x10, 0x20, 0x5E, 0xC9, 0xD5, 0x20, 0x5F, 0x6F, 0xF2, 0x20,
-0x60, 0x9C, 0x88, 0x20, 0x61, 0x4F, 0xD4, 0x20, 0x62, 0x70, 0x8C, 0xA0, 0x63, 0x2F, 0xB6, 0x20,
-0x64, 0x4D, 0xCB, 0xA0, 0x65, 0x0F, 0x98, 0x20, 0x66, 0x2D, 0xAD, 0xA0, 0x66, 0xF8, 0xB4, 0xA0,
-0x68, 0x0D, 0x8F, 0xA0, 0x68, 0xD8, 0x96, 0xA0, 0x69, 0xED, 0x71, 0xA0, 0x6A, 0xB8, 0x78, 0xA0,
-0x6B, 0xCD, 0x53, 0xA0, 0x6C, 0x98, 0x5A, 0xA0, 0x6D, 0xB6, 0x70, 0x20, 0x6E, 0x78, 0x3C, 0xA0,
-0x6F, 0x96, 0x52, 0x20, 0x70, 0x61, 0x59, 0x20, 0x71, 0x76, 0x34, 0x20, 0x72, 0x41, 0x3B, 0x20,
-0x73, 0x56, 0x16, 0x20, 0x74, 0x21, 0x1D, 0x20, 0x75, 0x35, 0xF8, 0x20, 0x76, 0x00, 0xFF, 0x20,
-0x77, 0x15, 0xDA, 0x20, 0x77, 0xE0, 0xE1, 0x20, 0x78, 0xFE, 0xF6, 0xA0, 0x79, 0xC0, 0xC3, 0x20,
-0x7A, 0xDE, 0xD8, 0xA0, 0x7B, 0xA9, 0xDF, 0xA0, 0x7C, 0xBE, 0xBA, 0xA0, 0x7D, 0x89, 0xC1, 0xA0,
-0x7E, 0x9E, 0x9C, 0xA0, 0x7F, 0x69, 0xA3, 0xA0, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
-0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
+0x52, 0x05, 0x9E, 0xA0, 0x52, 0x6C, 0x73, 0xA0, 0x53, 0x37, 0x7A, 0xA0, 0x53, 0xAF, 0x73, 0x20,
+0x53, 0xD7, 0x00, 0x20, 0x54, 0x4C, 0x55, 0xA0, 0x55, 0x17, 0x5C, 0xA0, 0x55, 0x82, 0x26, 0x20,
+0x55, 0xA9, 0xB3, 0x20, 0x56, 0x2C, 0x37, 0xA0, 0x56, 0xF7, 0x3E, 0xA0, 0x57, 0x56, 0x2A, 0xA0,
+0x57, 0x7D, 0xB7, 0xA0, 0x58, 0x15, 0x54, 0x20, 0x58, 0xD7, 0x20, 0xA0, 0x59, 0x28, 0xDD, 0xA0,
+0x59, 0x50, 0x6A, 0xA0, 0x59, 0xF5, 0x36, 0x20, 0x5A, 0xB7, 0x02, 0xA0, 0x5A, 0xFB, 0x90, 0xA0,
+0x5B, 0x23, 0x1D, 0xA0, 0x5B, 0xD5, 0x18, 0x20, 0x5C, 0xA0, 0x1F, 0x20, 0x5C, 0xCF, 0x95, 0x20,
+0x5C, 0xF7, 0x22, 0x20, 0x5D, 0xB4, 0xFA, 0x20, 0x5E, 0x80, 0x01, 0x20, 0x5E, 0xA2, 0x48, 0x20,
+0x5E, 0xC9, 0xD5, 0x20, 0x5F, 0x94, 0xDC, 0x20, 0x60, 0x5F, 0xE3, 0x20, 0x60, 0x74, 0xFB, 0x20,
+0x60, 0x9C, 0x88, 0x20, 0x61, 0x7D, 0xF8, 0xA0, 0x62, 0x3F, 0xC5, 0x20, 0x62, 0x48, 0xFF, 0xA0,
+0x62, 0x70, 0x8C, 0xA0, 0x63, 0x5D, 0xDA, 0xA0, 0x64, 0x43, 0x3F, 0xA0, 0x65, 0x3D, 0xBC, 0xA0,
+0x66, 0x15, 0xF2, 0xA0, 0x67, 0x1D, 0x9E, 0xA0, 0x67, 0xE9, 0xF7, 0x20, 0x68, 0xFD, 0x80, 0xA0,
+0x69, 0xC8, 0x87, 0xA0, 0x6A, 0xDD, 0x62, 0xA0, 0x6B, 0xA8, 0x69, 0xA0, 0x6C, 0xC6, 0x7F, 0x20,
+0x6D, 0x88, 0x4B, 0xA0, 0x6E, 0xA6, 0x61, 0x20, 0x6F, 0x68, 0x2D, 0xA0, 0x70, 0x86, 0x43, 0x20,
+0x71, 0x51, 0x4A, 0x20, 0x72, 0x66, 0x25, 0x20, 0x73, 0x31, 0x2C, 0x20, 0x74, 0x46, 0x07, 0x20,
+0x75, 0x11, 0x0E, 0x20, 0x76, 0x2F, 0x23, 0xA0, 0x76, 0xF0, 0xF0, 0x20, 0x78, 0x0F, 0x05, 0xA0,
+0x78, 0xD0, 0xD2, 0x20, 0x79, 0xEE, 0xE7, 0xA0, 0x7A, 0xB0, 0xB4, 0x20, 0x7B, 0xCE, 0xC9, 0xA0,
+0x7C, 0x99, 0xD0, 0xA0, 0x7D, 0xA8, 0x14, 0x20, 0x7E, 0x79, 0xB2, 0xA0, 0x7F, 0x7C, 0x18, 0xA0,
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
+0x02, 0x03, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
-0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xF8, 0xE4, 0x00, 0x00, 0x00, 0x00, 0x0E,
-0x10, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x0D, 0x4C,
-0x4D, 0x54, 0x00, 0x57, 0x45, 0x53, 0x54, 0x00, 0x57, 0x45, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBC, 0xAC, 0xC8, 0x01, 0x07, 0x16, 0x42,
-0x00, 0x00, 0x00, 0x00,
+0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
+0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xF8, 0xE4, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x01,
+0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x0D, 0x4C, 0x4D, 0x54,
+0x00, 0x57, 0x45, 0x53, 0x54, 0x00, 0x57, 0x45, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBC, 0xAC, 0xC8, 0x01, 0x07, 0x16, 0x42, 0x00, 0x00,
+0x00, 0x00,
/* Africa/Ceuta */
0x50, 0x48, 0x50, 0x31, 0x01, 0x45, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -890,12 +892,40 @@ const unsigned char timelib_timezone_db_data_builtin[261381] = {
/* Africa/El_Aaiun */
0x50, 0x48, 0x50, 0x31, 0x01, 0x45, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xBC, 0x48, 0xF0, 0xE0,
-0x0B, 0xD1, 0xB0, 0x90, 0x01, 0x02, 0xFF, 0xFF, 0xF3, 0xA0, 0x00, 0x00, 0xFF, 0xFF, 0xF1, 0xF0,
-0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x57, 0x41, 0x54, 0x00,
-0x57, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB2, 0xC1, 0xB8, 0x00, 0xFE,
-0x84, 0x40, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x5A, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0xBC, 0x48, 0xF0, 0xE0,
+0x0B, 0xD1, 0xB0, 0x90, 0x0B, 0xE8, 0x0C, 0x00, 0x0C, 0x61, 0x47, 0xF0, 0x0D, 0xC9, 0x3F, 0x80,
+0x0E, 0x8E, 0xF2, 0x70, 0x0F, 0xD3, 0x51, 0x80, 0x10, 0x27, 0xA3, 0x70, 0x48, 0x41, 0xE6, 0x80,
+0x48, 0xBB, 0x22, 0x70, 0x4A, 0x23, 0x1A, 0x00, 0x4A, 0x8D, 0xD5, 0x70, 0x4B, 0xDC, 0xC0, 0x80,
+0x4C, 0x5D, 0xE5, 0x70, 0x4D, 0x97, 0xB8, 0x80, 0x4E, 0x34, 0x8C, 0xF0, 0x4F, 0x9C, 0xA0, 0xA0,
+0x50, 0x08, 0xBB, 0xA0, 0x50, 0x31, 0x9A, 0x20, 0x50, 0x67, 0xA7, 0xA0, 0x51, 0x7C, 0x82, 0xA0,
+0x51, 0xD8, 0xCB, 0xA0, 0x52, 0x05, 0x9E, 0xA0, 0x52, 0x6C, 0x73, 0xA0, 0x53, 0x37, 0x7A, 0xA0,
+0x53, 0xAF, 0x73, 0x20, 0x53, 0xD7, 0x00, 0x20, 0x54, 0x4C, 0x55, 0xA0, 0x55, 0x17, 0x5C, 0xA0,
+0x55, 0x82, 0x26, 0x20, 0x55, 0xA9, 0xB3, 0x20, 0x56, 0x2C, 0x37, 0xA0, 0x56, 0xF7, 0x3E, 0xA0,
+0x57, 0x56, 0x2A, 0xA0, 0x57, 0x7D, 0xB7, 0xA0, 0x58, 0x15, 0x54, 0x20, 0x58, 0xD7, 0x20, 0xA0,
+0x59, 0x28, 0xDD, 0xA0, 0x59, 0x50, 0x6A, 0xA0, 0x59, 0xF5, 0x36, 0x20, 0x5A, 0xB7, 0x02, 0xA0,
+0x5A, 0xFB, 0x90, 0xA0, 0x5B, 0x23, 0x1D, 0xA0, 0x5B, 0xD5, 0x18, 0x20, 0x5C, 0xA0, 0x1F, 0x20,
+0x5C, 0xCF, 0x95, 0x20, 0x5C, 0xF7, 0x22, 0x20, 0x5D, 0xB4, 0xFA, 0x20, 0x5E, 0x80, 0x01, 0x20,
+0x5E, 0xA2, 0x48, 0x20, 0x5E, 0xC9, 0xD5, 0x20, 0x5F, 0x94, 0xDC, 0x20, 0x60, 0x5F, 0xE3, 0x20,
+0x60, 0x74, 0xFB, 0x20, 0x60, 0x9C, 0x88, 0x20, 0x61, 0x7D, 0xF8, 0xA0, 0x62, 0x3F, 0xC5, 0x20,
+0x62, 0x48, 0xFF, 0xA0, 0x62, 0x70, 0x8C, 0xA0, 0x63, 0x5D, 0xDA, 0xA0, 0x64, 0x43, 0x3F, 0xA0,
+0x65, 0x3D, 0xBC, 0xA0, 0x66, 0x15, 0xF2, 0xA0, 0x67, 0x1D, 0x9E, 0xA0, 0x67, 0xE9, 0xF7, 0x20,
+0x68, 0xFD, 0x80, 0xA0, 0x69, 0xC8, 0x87, 0xA0, 0x6A, 0xDD, 0x62, 0xA0, 0x6B, 0xA8, 0x69, 0xA0,
+0x6C, 0xC6, 0x7F, 0x20, 0x6D, 0x88, 0x4B, 0xA0, 0x6E, 0xA6, 0x61, 0x20, 0x6F, 0x68, 0x2D, 0xA0,
+0x70, 0x86, 0x43, 0x20, 0x71, 0x51, 0x4A, 0x20, 0x72, 0x66, 0x25, 0x20, 0x73, 0x31, 0x2C, 0x20,
+0x74, 0x46, 0x07, 0x20, 0x75, 0x11, 0x0E, 0x20, 0x76, 0x2F, 0x23, 0xA0, 0x76, 0xF0, 0xF0, 0x20,
+0x78, 0x0F, 0x05, 0xA0, 0x78, 0xD0, 0xD2, 0x20, 0x79, 0xEE, 0xE7, 0xA0, 0x7A, 0xB0, 0xB4, 0x20,
+0x7B, 0xCE, 0xC9, 0xA0, 0x7C, 0x99, 0xD0, 0xA0, 0x7D, 0xA8, 0x14, 0x20, 0x7E, 0x79, 0xB2, 0xA0,
+0x7F, 0x7C, 0x18, 0xA0, 0x01, 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,
+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, 0xFF, 0xFF,
+0xF3, 0xA0, 0x00, 0x00, 0xFF, 0xFF, 0xF1, 0xF0, 0x00, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x08,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x57, 0x41, 0x54, 0x00, 0x57, 0x45,
+0x53, 0x54, 0x00, 0x57, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xB2, 0xC1, 0xB8, 0x00, 0xFE, 0x84, 0x40, 0x00, 0x00, 0x00, 0x00,
/* Africa/Freetown */
0x50, 0x48, 0x50, 0x31, 0x01, 0x53, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -1181,7 +1211,7 @@ const unsigned char timelib_timezone_db_data_builtin[261381] = {
/* Africa/Tripoli */
0x50, 0x48, 0x50, 0x31, 0x01, 0x4C, 0x59, 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, 0x50, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0xA1, 0xF2, 0xC1, 0x24,
+0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0xA1, 0xF2, 0xC1, 0x24,
0xDD, 0xBB, 0xB1, 0x10, 0xDE, 0x23, 0xAD, 0x60, 0xE1, 0x78, 0xD2, 0x10, 0xE1, 0xE7, 0x65, 0xE0,
0xE5, 0x2F, 0x3F, 0x70, 0xE5, 0xA9, 0xCC, 0xE0, 0xEB, 0x4E, 0xC6, 0xF0, 0x16, 0x92, 0x42, 0x60,
0x17, 0x08, 0xF7, 0x70, 0x17, 0xFA, 0x2B, 0xE0, 0x18, 0xEA, 0x2A, 0xF0, 0x19, 0xDB, 0x5F, 0x60,
@@ -1189,24 +1219,9 @@ const unsigned char timelib_timezone_db_data_builtin[261381] = {
0x1E, 0x93, 0x0B, 0x70, 0x1F, 0x82, 0xEE, 0x60, 0x20, 0x70, 0x4A, 0x70, 0x21, 0x61, 0x7E, 0xE0,
0x22, 0x52, 0xCF, 0x70, 0x23, 0x44, 0x03, 0xE0, 0x24, 0x34, 0x02, 0xF0, 0x25, 0x25, 0x37, 0x60,
0x26, 0x40, 0xB7, 0xF0, 0x32, 0x4E, 0xF1, 0x60, 0x33, 0x44, 0x36, 0x70, 0x34, 0x35, 0x6A, 0xE0,
-0x50, 0x9D, 0x99, 0x00, 0x51, 0x54, 0xD9, 0x80, 0x52, 0x69, 0xB4, 0x80, 0x53, 0x34, 0xBB, 0x80,
-0x54, 0x52, 0xD1, 0x00, 0x55, 0x14, 0x9D, 0x80, 0x56, 0x32, 0xB3, 0x00, 0x56, 0xF4, 0x7F, 0x80,
-0x58, 0x12, 0x95, 0x00, 0x58, 0xDD, 0x9C, 0x00, 0x59, 0xF2, 0x77, 0x00, 0x5A, 0xBD, 0x7E, 0x00,
-0x5B, 0xD2, 0x59, 0x00, 0x5C, 0x9D, 0x60, 0x00, 0x5D, 0xB2, 0x3B, 0x00, 0x5E, 0x7D, 0x42, 0x00,
-0x5F, 0x9B, 0x57, 0x80, 0x60, 0x5D, 0x24, 0x00, 0x61, 0x7B, 0x39, 0x80, 0x62, 0x3D, 0x06, 0x00,
-0x63, 0x5B, 0x1B, 0x80, 0x64, 0x26, 0x22, 0x80, 0x65, 0x3A, 0xFD, 0x80, 0x66, 0x06, 0x04, 0x80,
-0x67, 0x1A, 0xDF, 0x80, 0x67, 0xE5, 0xE6, 0x80, 0x69, 0x03, 0xFC, 0x00, 0x69, 0xC5, 0xC8, 0x80,
-0x6A, 0xE3, 0xDE, 0x00, 0x6B, 0xA5, 0xAA, 0x80, 0x6C, 0xC3, 0xC0, 0x00, 0x6D, 0x8E, 0xC7, 0x00,
-0x6E, 0xA3, 0xA2, 0x00, 0x6F, 0x6E, 0xA9, 0x00, 0x70, 0x83, 0x84, 0x00, 0x71, 0x4E, 0x8B, 0x00,
-0x72, 0x63, 0x66, 0x00, 0x73, 0x2E, 0x6D, 0x00, 0x74, 0x4C, 0x82, 0x80, 0x75, 0x0E, 0x4F, 0x00,
-0x76, 0x2C, 0x64, 0x80, 0x76, 0xEE, 0x31, 0x00, 0x78, 0x0C, 0x46, 0x80, 0x78, 0xD7, 0x4D, 0x80,
-0x79, 0xEC, 0x28, 0x80, 0x7A, 0xB7, 0x2F, 0x80, 0x7B, 0xCC, 0x0A, 0x80, 0x7C, 0x97, 0x11, 0x80,
-0x7D, 0xB5, 0x27, 0x00, 0x7E, 0x76, 0xF3, 0x80, 0x7F, 0x95, 0x09, 0x00, 0x02, 0x01, 0x02, 0x01,
+0x50, 0x9D, 0x99, 0x00, 0x51, 0x54, 0xD9, 0x80, 0x52, 0x69, 0xB4, 0x80, 0x02, 0x01, 0x02, 0x01,
0x02, 0x01, 0x02, 0x03, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
-0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x02, 0x01, 0x03, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02,
-0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02,
-0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02,
-0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x0C, 0x5C,
+0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x02, 0x01, 0x03, 0x02, 0x01, 0x03, 0x00, 0x00, 0x0C, 0x5C,
0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x09, 0x00, 0x00,
0x1C, 0x20, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54,
0x00, 0x45, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBB, 0x87,
@@ -2944,7 +2959,7 @@ const unsigned char timelib_timezone_db_data_builtin[261381] = {
/* America/Eirunepe */
0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x52, 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, 0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0x96, 0xAA, 0x88, 0x80,
+0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0x96, 0xAA, 0x88, 0x80,
0xB8, 0x0F, 0x66, 0x00, 0xB8, 0xFD, 0x5C, 0xC0, 0xB9, 0xF1, 0x50, 0x50, 0xBA, 0xDE, 0x90, 0x40,
0xDA, 0x38, 0xCA, 0x50, 0xDA, 0xEC, 0x16, 0x50, 0xDC, 0x19, 0xFD, 0xD0, 0xDC, 0xB9, 0x75, 0x40,
0xDD, 0xFB, 0x31, 0x50, 0xDE, 0x9B, 0xFA, 0x40, 0xDF, 0xDD, 0xB6, 0x50, 0xE0, 0x54, 0x4F, 0x40,
@@ -2952,14 +2967,14 @@ const unsigned char timelib_timezone_db_data_builtin[261381] = {
0xF8, 0x51, 0x48, 0x50, 0xF8, 0xC7, 0xE1, 0x40, 0xFA, 0x0A, 0xEE, 0xD0, 0xFA, 0xA9, 0x14, 0xC0,
0xFB, 0xEC, 0x22, 0x50, 0xFC, 0x8B, 0x99, 0xC0, 0x1D, 0xC9, 0xAA, 0x50, 0x1E, 0x78, 0xF3, 0xC0,
0x1F, 0xA0, 0x51, 0xD0, 0x20, 0x33, 0xEB, 0xC0, 0x21, 0x81, 0x85, 0x50, 0x22, 0x0B, 0xE4, 0xC0,
-0x2C, 0xC0, 0xD1, 0x50, 0x2D, 0x66, 0xE0, 0x40, 0x48, 0x60, 0x7F, 0x50, 0x02, 0x01, 0x02, 0x01,
+0x2C, 0xC0, 0xD1, 0x50, 0x2D, 0x66, 0xE0, 0x40, 0x48, 0x60, 0x7F, 0x50, 0x52, 0x7F, 0x04, 0xC0,
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
-0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0xFF, 0xFF, 0xBE, 0x80,
-0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x09, 0xFF, 0xFF,
-0xC7, 0xC0, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x43, 0x53, 0x54, 0x00, 0x41, 0x43, 0x54,
-0x00, 0x41, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x28,
-0x15, 0x00, 0xA8, 0x0C, 0xD5, 0x00, 0x00, 0x00, 0x0A, 0x57, 0x20, 0x41, 0x6D, 0x61, 0x7A, 0x6F,
-0x6E, 0x61, 0x73,
+0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03,
+0x02, 0xFF, 0xFF, 0xBE, 0x80, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x04, 0xFF, 0xFF, 0xB9,
+0xB0, 0x00, 0x09, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x43, 0x53,
+0x54, 0x00, 0x41, 0x43, 0x54, 0x00, 0x41, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x7F, 0x28, 0x15, 0x00, 0xA8, 0x0C, 0xD5, 0x00, 0x00, 0x00, 0x0A, 0x57, 0x20,
+0x41, 0x6D, 0x61, 0x7A, 0x6F, 0x6E, 0x61, 0x73,
/* America/El_Salvador */
0x50, 0x48, 0x50, 0x31, 0x01, 0x53, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -5769,7 +5784,7 @@ const unsigned char timelib_timezone_db_data_builtin[261381] = {
/* America/Porto_Acre */
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, 0x1E, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0x96, 0xAA, 0x86, 0x90,
+0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0x96, 0xAA, 0x86, 0x90,
0xB8, 0x0F, 0x66, 0x00, 0xB8, 0xFD, 0x5C, 0xC0, 0xB9, 0xF1, 0x50, 0x50, 0xBA, 0xDE, 0x90, 0x40,
0xDA, 0x38, 0xCA, 0x50, 0xDA, 0xEC, 0x16, 0x50, 0xDC, 0x19, 0xFD, 0xD0, 0xDC, 0xB9, 0x75, 0x40,
0xDD, 0xFB, 0x31, 0x50, 0xDE, 0x9B, 0xFA, 0x40, 0xDF, 0xDD, 0xB6, 0x50, 0xE0, 0x54, 0x4F, 0x40,
@@ -5777,12 +5792,13 @@ const unsigned char timelib_timezone_db_data_builtin[261381] = {
0xF8, 0x51, 0x48, 0x50, 0xF8, 0xC7, 0xE1, 0x40, 0xFA, 0x0A, 0xEE, 0xD0, 0xFA, 0xA9, 0x14, 0xC0,
0xFB, 0xEC, 0x22, 0x50, 0xFC, 0x8B, 0x99, 0xC0, 0x1D, 0xC9, 0xAA, 0x50, 0x1E, 0x78, 0xF3, 0xC0,
0x1F, 0xA0, 0x51, 0xD0, 0x20, 0x33, 0xEB, 0xC0, 0x21, 0x81, 0x85, 0x50, 0x22, 0x0B, 0xE4, 0xC0,
-0x48, 0x60, 0x7F, 0x50, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
+0x48, 0x60, 0x7F, 0x50, 0x52, 0x7F, 0x04, 0xC0, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
-0x02, 0x03, 0xFF, 0xFF, 0xC0, 0x70, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x04, 0xFF, 0xFF,
-0xB9, 0xB0, 0x00, 0x09, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x43,
-0x53, 0x54, 0x00, 0x41, 0x43, 0x54, 0x00, 0x41, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
+0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x02, 0xFF, 0xFF, 0xC0, 0x70, 0x00, 0x00, 0xFF, 0xFF, 0xC7,
+0xC0, 0x01, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x09, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0D, 0x4C,
+0x4D, 0x54, 0x00, 0x41, 0x43, 0x53, 0x54, 0x00, 0x41, 0x43, 0x54, 0x00, 0x41, 0x4D, 0x54, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x00,
/* America/Port_of_Spain */
0x50, 0x48, 0x50, 0x31, 0x01, 0x54, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -6026,7 +6042,7 @@ const unsigned char timelib_timezone_db_data_builtin[261381] = {
/* America/Rio_Branco */
0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x52, 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, 0x1E, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0x96, 0xAA, 0x86, 0x90,
+0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0x96, 0xAA, 0x86, 0x90,
0xB8, 0x0F, 0x66, 0x00, 0xB8, 0xFD, 0x5C, 0xC0, 0xB9, 0xF1, 0x50, 0x50, 0xBA, 0xDE, 0x90, 0x40,
0xDA, 0x38, 0xCA, 0x50, 0xDA, 0xEC, 0x16, 0x50, 0xDC, 0x19, 0xFD, 0xD0, 0xDC, 0xB9, 0x75, 0x40,
0xDD, 0xFB, 0x31, 0x50, 0xDE, 0x9B, 0xFA, 0x40, 0xDF, 0xDD, 0xB6, 0x50, 0xE0, 0x54, 0x4F, 0x40,
@@ -6034,13 +6050,13 @@ const unsigned char timelib_timezone_db_data_builtin[261381] = {
0xF8, 0x51, 0x48, 0x50, 0xF8, 0xC7, 0xE1, 0x40, 0xFA, 0x0A, 0xEE, 0xD0, 0xFA, 0xA9, 0x14, 0xC0,
0xFB, 0xEC, 0x22, 0x50, 0xFC, 0x8B, 0x99, 0xC0, 0x1D, 0xC9, 0xAA, 0x50, 0x1E, 0x78, 0xF3, 0xC0,
0x1F, 0xA0, 0x51, 0xD0, 0x20, 0x33, 0xEB, 0xC0, 0x21, 0x81, 0x85, 0x50, 0x22, 0x0B, 0xE4, 0xC0,
-0x48, 0x60, 0x7F, 0x50, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
+0x48, 0x60, 0x7F, 0x50, 0x52, 0x7F, 0x04, 0xC0, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
-0x02, 0x03, 0xFF, 0xFF, 0xC0, 0x70, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x04, 0xFF, 0xFF,
-0xB9, 0xB0, 0x00, 0x09, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x43,
-0x53, 0x54, 0x00, 0x41, 0x43, 0x54, 0x00, 0x41, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x7A, 0x1F, 0x05, 0x00, 0xAB, 0x34, 0x20, 0x00, 0x00, 0x00, 0x04, 0x41,
-0x63, 0x72, 0x65,
+0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x02, 0xFF, 0xFF, 0xC0, 0x70, 0x00, 0x00, 0xFF, 0xFF, 0xC7,
+0xC0, 0x01, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x09, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0D, 0x4C,
+0x4D, 0x54, 0x00, 0x41, 0x43, 0x53, 0x54, 0x00, 0x41, 0x43, 0x54, 0x00, 0x41, 0x4D, 0x54, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7A, 0x1F, 0x05, 0x00, 0xAB, 0x34, 0x20,
+0x00, 0x00, 0x00, 0x04, 0x41, 0x63, 0x72, 0x65,
/* America/Rosario */
0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -10994,7 +11010,7 @@ const unsigned char timelib_timezone_db_data_builtin[261381] = {
/* Brazil/Acre */
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, 0x1E, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0x96, 0xAA, 0x86, 0x90,
+0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0x96, 0xAA, 0x86, 0x90,
0xB8, 0x0F, 0x66, 0x00, 0xB8, 0xFD, 0x5C, 0xC0, 0xB9, 0xF1, 0x50, 0x50, 0xBA, 0xDE, 0x90, 0x40,
0xDA, 0x38, 0xCA, 0x50, 0xDA, 0xEC, 0x16, 0x50, 0xDC, 0x19, 0xFD, 0xD0, 0xDC, 0xB9, 0x75, 0x40,
0xDD, 0xFB, 0x31, 0x50, 0xDE, 0x9B, 0xFA, 0x40, 0xDF, 0xDD, 0xB6, 0x50, 0xE0, 0x54, 0x4F, 0x40,
@@ -11002,12 +11018,13 @@ const unsigned char timelib_timezone_db_data_builtin[261381] = {
0xF8, 0x51, 0x48, 0x50, 0xF8, 0xC7, 0xE1, 0x40, 0xFA, 0x0A, 0xEE, 0xD0, 0xFA, 0xA9, 0x14, 0xC0,
0xFB, 0xEC, 0x22, 0x50, 0xFC, 0x8B, 0x99, 0xC0, 0x1D, 0xC9, 0xAA, 0x50, 0x1E, 0x78, 0xF3, 0xC0,
0x1F, 0xA0, 0x51, 0xD0, 0x20, 0x33, 0xEB, 0xC0, 0x21, 0x81, 0x85, 0x50, 0x22, 0x0B, 0xE4, 0xC0,
-0x48, 0x60, 0x7F, 0x50, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
+0x48, 0x60, 0x7F, 0x50, 0x52, 0x7F, 0x04, 0xC0, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
-0x02, 0x03, 0xFF, 0xFF, 0xC0, 0x70, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x04, 0xFF, 0xFF,
-0xB9, 0xB0, 0x00, 0x09, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x43,
-0x53, 0x54, 0x00, 0x41, 0x43, 0x54, 0x00, 0x41, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
+0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x02, 0xFF, 0xFF, 0xC0, 0x70, 0x00, 0x00, 0xFF, 0xFF, 0xC7,
+0xC0, 0x01, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x09, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0D, 0x4C,
+0x4D, 0x54, 0x00, 0x41, 0x43, 0x53, 0x54, 0x00, 0x41, 0x43, 0x54, 0x00, 0x41, 0x4D, 0x54, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x00,
/* Brazil/DeNoronha */
0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -16301,7 +16318,7 @@ const unsigned char timelib_timezone_db_data_builtin[261381] = {
/* Libya */
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, 0x50, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0xA1, 0xF2, 0xC1, 0x24,
+0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0xA1, 0xF2, 0xC1, 0x24,
0xDD, 0xBB, 0xB1, 0x10, 0xDE, 0x23, 0xAD, 0x60, 0xE1, 0x78, 0xD2, 0x10, 0xE1, 0xE7, 0x65, 0xE0,
0xE5, 0x2F, 0x3F, 0x70, 0xE5, 0xA9, 0xCC, 0xE0, 0xEB, 0x4E, 0xC6, 0xF0, 0x16, 0x92, 0x42, 0x60,
0x17, 0x08, 0xF7, 0x70, 0x17, 0xFA, 0x2B, 0xE0, 0x18, 0xEA, 0x2A, 0xF0, 0x19, 0xDB, 0x5F, 0x60,
@@ -16309,24 +16326,9 @@ const unsigned char timelib_timezone_db_data_builtin[261381] = {
0x1E, 0x93, 0x0B, 0x70, 0x1F, 0x82, 0xEE, 0x60, 0x20, 0x70, 0x4A, 0x70, 0x21, 0x61, 0x7E, 0xE0,
0x22, 0x52, 0xCF, 0x70, 0x23, 0x44, 0x03, 0xE0, 0x24, 0x34, 0x02, 0xF0, 0x25, 0x25, 0x37, 0x60,
0x26, 0x40, 0xB7, 0xF0, 0x32, 0x4E, 0xF1, 0x60, 0x33, 0x44, 0x36, 0x70, 0x34, 0x35, 0x6A, 0xE0,
-0x50, 0x9D, 0x99, 0x00, 0x51, 0x54, 0xD9, 0x80, 0x52, 0x69, 0xB4, 0x80, 0x53, 0x34, 0xBB, 0x80,
-0x54, 0x52, 0xD1, 0x00, 0x55, 0x14, 0x9D, 0x80, 0x56, 0x32, 0xB3, 0x00, 0x56, 0xF4, 0x7F, 0x80,
-0x58, 0x12, 0x95, 0x00, 0x58, 0xDD, 0x9C, 0x00, 0x59, 0xF2, 0x77, 0x00, 0x5A, 0xBD, 0x7E, 0x00,
-0x5B, 0xD2, 0x59, 0x00, 0x5C, 0x9D, 0x60, 0x00, 0x5D, 0xB2, 0x3B, 0x00, 0x5E, 0x7D, 0x42, 0x00,
-0x5F, 0x9B, 0x57, 0x80, 0x60, 0x5D, 0x24, 0x00, 0x61, 0x7B, 0x39, 0x80, 0x62, 0x3D, 0x06, 0x00,
-0x63, 0x5B, 0x1B, 0x80, 0x64, 0x26, 0x22, 0x80, 0x65, 0x3A, 0xFD, 0x80, 0x66, 0x06, 0x04, 0x80,
-0x67, 0x1A, 0xDF, 0x80, 0x67, 0xE5, 0xE6, 0x80, 0x69, 0x03, 0xFC, 0x00, 0x69, 0xC5, 0xC8, 0x80,
-0x6A, 0xE3, 0xDE, 0x00, 0x6B, 0xA5, 0xAA, 0x80, 0x6C, 0xC3, 0xC0, 0x00, 0x6D, 0x8E, 0xC7, 0x00,
-0x6E, 0xA3, 0xA2, 0x00, 0x6F, 0x6E, 0xA9, 0x00, 0x70, 0x83, 0x84, 0x00, 0x71, 0x4E, 0x8B, 0x00,
-0x72, 0x63, 0x66, 0x00, 0x73, 0x2E, 0x6D, 0x00, 0x74, 0x4C, 0x82, 0x80, 0x75, 0x0E, 0x4F, 0x00,
-0x76, 0x2C, 0x64, 0x80, 0x76, 0xEE, 0x31, 0x00, 0x78, 0x0C, 0x46, 0x80, 0x78, 0xD7, 0x4D, 0x80,
-0x79, 0xEC, 0x28, 0x80, 0x7A, 0xB7, 0x2F, 0x80, 0x7B, 0xCC, 0x0A, 0x80, 0x7C, 0x97, 0x11, 0x80,
-0x7D, 0xB5, 0x27, 0x00, 0x7E, 0x76, 0xF3, 0x80, 0x7F, 0x95, 0x09, 0x00, 0x02, 0x01, 0x02, 0x01,
+0x50, 0x9D, 0x99, 0x00, 0x51, 0x54, 0xD9, 0x80, 0x52, 0x69, 0xB4, 0x80, 0x02, 0x01, 0x02, 0x01,
0x02, 0x01, 0x02, 0x03, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
-0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x02, 0x01, 0x03, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02,
-0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02,
-0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02,
-0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x0C, 0x5C,
+0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x02, 0x01, 0x03, 0x02, 0x01, 0x03, 0x00, 0x00, 0x0C, 0x5C,
0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x09, 0x00, 0x00,
0x1C, 0x20, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54,
0x00, 0x45, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54,
@@ -18400,4 +18402,4 @@ const unsigned char timelib_timezone_db_data_builtin[261381] = {
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 = { "2013.6", 579, timezonedb_idx_builtin, timelib_timezone_db_data_builtin };
+const timelib_tzdb timezonedb_builtin = { "2013.8", 579, timezonedb_idx_builtin, timelib_timezone_db_data_builtin };
diff --git a/ext/date/php_date.c b/ext/date/php_date.c
index 70960b161f..7e4de09c1e 100644
--- a/ext/date/php_date.c
+++ b/ext/date/php_date.c
@@ -1362,6 +1362,7 @@ PHPAPI signed long php_parse_date(char *string, signed long *now)
parsed_time = timelib_strtotime(string, strlen(string), &error, DATE_TIMEZONEDB, php_date_parse_tzfile_wrapper);
if (error->error_count) {
+ timelib_time_dtor(parsed_time);
timelib_error_container_dtor(error);
return -1;
}
diff --git a/ext/dba/dba.c b/ext/dba/dba.c
index 50a94dd2ad..ced90f0c62 100644
--- a/ext/dba/dba.c
+++ b/ext/dba/dba.c
@@ -625,7 +625,8 @@ static void php_dba_open(INTERNAL_FUNCTION_PARAMETERS, int persistent)
char *file_mode;
char mode[4], *pmode, *lock_file_mode = NULL;
int persistent_flag = persistent ? STREAM_OPEN_PERSISTENT : 0;
- char *opened_path, *lock_name;
+ char *opened_path = NULL;
+ char *lock_name;
if(ac < 2) {
WRONG_PARAM_COUNT;
@@ -848,8 +849,10 @@ static void php_dba_open(INTERNAL_FUNCTION_PARAMETERS, int persistent)
if (!persistent) {
info->lock.name = opened_path;
} else {
- info->lock.name = pestrdup(opened_path, persistent);
- efree(opened_path);
+ if (opened_path) {
+ info->lock.name = pestrdup(opened_path, persistent);
+ efree(opened_path);
+ }
}
}
}
diff --git a/ext/exif/exif.c b/ext/exif/exif.c
index bd646d9adf..2fe54f7b31 100644
--- a/ext/exif/exif.c
+++ b/ext/exif/exif.c
@@ -2643,6 +2643,7 @@ static int exif_process_user_comment(image_info_type *ImageInfo, char **pszInfoP
} else {
decode = ImageInfo->decode_unicode_le;
}
+ /* XXX this will fail again if encoding_converter returns on error something different than SIZE_MAX */
if (zend_multibyte_encoding_converter(
(unsigned char**)pszInfoPtr,
&len,
@@ -2650,7 +2651,7 @@ static int exif_process_user_comment(image_info_type *ImageInfo, char **pszInfoP
ByteCount,
zend_multibyte_fetch_encoding(ImageInfo->encode_unicode TSRMLS_CC),
zend_multibyte_fetch_encoding(decode TSRMLS_CC)
- TSRMLS_CC) < 0) {
+ TSRMLS_CC) == (size_t)-1) {
len = exif_process_string_raw(pszInfoPtr, szValuePtr, ByteCount);
}
return len;
@@ -2663,6 +2664,7 @@ static int exif_process_user_comment(image_info_type *ImageInfo, char **pszInfoP
*pszEncoding = estrdup((const char*)szValuePtr);
szValuePtr = szValuePtr+8;
ByteCount -= 8;
+ /* XXX this will fail again if encoding_converter returns on error something different than SIZE_MAX */
if (zend_multibyte_encoding_converter(
(unsigned char**)pszInfoPtr,
&len,
@@ -2670,7 +2672,7 @@ static int exif_process_user_comment(image_info_type *ImageInfo, char **pszInfoP
ByteCount,
zend_multibyte_fetch_encoding(ImageInfo->encode_jis TSRMLS_CC),
zend_multibyte_fetch_encoding(ImageInfo->motorola_intel ? ImageInfo->decode_jis_be : ImageInfo->decode_jis_le TSRMLS_CC)
- TSRMLS_CC) < 0) {
+ TSRMLS_CC) == (size_t)-1) {
len = exif_process_string_raw(pszInfoPtr, szValuePtr, ByteCount);
}
return len;
@@ -2700,8 +2702,8 @@ static int exif_process_user_comment(image_info_type *ImageInfo, char **pszInfoP
static int exif_process_unicode(image_info_type *ImageInfo, xp_field_type *xp_field, int tag, char *szValuePtr, int ByteCount TSRMLS_DC)
{
xp_field->tag = tag;
-
- /* Copy the comment */
+
+ /* XXX this will fail again if encoding_converter returns on error something different than SIZE_MAX */
if (zend_multibyte_encoding_converter(
(unsigned char**)&xp_field->value,
&xp_field->size,
@@ -2709,7 +2711,7 @@ static int exif_process_unicode(image_info_type *ImageInfo, xp_field_type *xp_fi
ByteCount,
zend_multibyte_fetch_encoding(ImageInfo->encode_unicode TSRMLS_CC),
zend_multibyte_fetch_encoding(ImageInfo->motorola_intel ? ImageInfo->decode_unicode_be : ImageInfo->decode_unicode_le TSRMLS_CC)
- TSRMLS_CC) < 0) {
+ TSRMLS_CC) == (size_t)-1) {
xp_field->size = exif_process_string_raw(&xp_field->value, szValuePtr, ByteCount);
}
return xp_field->size;
diff --git a/ext/exif/tests/bug62523_1.jpg b/ext/exif/tests/bug62523_1.jpg
new file mode 100644
index 0000000000..9a63d1e84d
--- /dev/null
+++ b/ext/exif/tests/bug62523_1.jpg
@@ -0,0 +1,9 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<html><head>
+<title>301 Moved Permanently</title>
+</head><body>
+<h1>Moved Permanently</h1>
+<p>The document has moved <a href="http://www.getid3.org/temp/62523.jpg">here</a>.</p>
+<hr>
+<address>Apache Server at getid3.org Port 80</address>
+</body></html>
diff --git a/ext/exif/tests/bug62523_1.phpt b/ext/exif/tests/bug62523_1.phpt
new file mode 100644
index 0000000000..28d42f021d
--- /dev/null
+++ b/ext/exif/tests/bug62523_1.phpt
@@ -0,0 +1,18 @@
+--TEST--
+Bug 62523 (php crashes with segfault when exif_read_data called)
+--SKIPIF--
+<?php
+extension_loaded("exif") or die("skip need exif");
+?>
+--FILE--
+<?php
+echo "Test\n";
+var_dump(count(exif_read_data(__DIR__."/bug62523_1.jpg")));
+?>
+Done
+--EXPECTF--
+Test
+
+Warning: exif_read_data(bug62523_1.jpg): File not supported in %sbug62523_1.php on line %d
+int(1)
+Done
diff --git a/ext/exif/tests/bug62523_2.jpg b/ext/exif/tests/bug62523_2.jpg
new file mode 100644
index 0000000000..8d7fc6c5f4
--- /dev/null
+++ b/ext/exif/tests/bug62523_2.jpg
Binary files differ
diff --git a/ext/exif/tests/bug62523_2.phpt b/ext/exif/tests/bug62523_2.phpt
new file mode 100644
index 0000000000..ddc8ae824e
--- /dev/null
+++ b/ext/exif/tests/bug62523_2.phpt
@@ -0,0 +1,16 @@
+--TEST--
+Bug 62523 (php crashes with segfault when exif_read_data called)
+--SKIPIF--
+<?php
+extension_loaded("exif") or die("skip need exif");
+?>
+--FILE--
+<?php
+echo "Test\n";
+var_dump(count(exif_read_data(__DIR__."/bug62523_2.jpg")));
+?>
+Done
+--EXPECT--
+Test
+int(76)
+Done
diff --git a/ext/exif/tests/bug62523_3.jpg b/ext/exif/tests/bug62523_3.jpg
new file mode 100644
index 0000000000..3ee91368ce
--- /dev/null
+++ b/ext/exif/tests/bug62523_3.jpg
@@ -0,0 +1,12 @@
+<html>
+ <head><title>Found</title></head>
+ <body>
+ <h1>Found</h1>
+ <p>The resource was found at <a href="http://dl.dropboxusercontent.com/u/7562584/Bugs/Php/bad_exif.jpeg">http://dl.dropboxusercontent.com/u/7562584/Bugs/Php/bad_exif.jpeg</a>;
+you should be redirected automatically.
+
+<!-- --></p>
+ <hr noshade>
+ <div align="right">WSGI Server</div>
+ </body>
+</html>
diff --git a/ext/exif/tests/bug62523_3.phpt b/ext/exif/tests/bug62523_3.phpt
new file mode 100644
index 0000000000..6e11354c5a
--- /dev/null
+++ b/ext/exif/tests/bug62523_3.phpt
@@ -0,0 +1,18 @@
+--TEST--
+Bug 62523 (php crashes with segfault when exif_read_data called)
+--SKIPIF--
+<?php
+extension_loaded("exif") or die("skip need exif");
+?>
+--FILE--
+<?php
+echo "Test\n";
+var_dump(count(exif_read_data(__DIR__."/bug62523_3.jpg")));
+?>
+Done
+--EXPECTF--
+Test
+
+Warning: exif_read_data(bug62523_3.jpg): File not supported in %sbug62523_3.php on line %d
+int(1)
+Done
diff --git a/ext/exif/tests/exif_encoding_crash.jpg b/ext/exif/tests/exif_encoding_crash.jpg
new file mode 100644
index 0000000000..55138abe55
--- /dev/null
+++ b/ext/exif/tests/exif_encoding_crash.jpg
Binary files differ
diff --git a/ext/exif/tests/exif_encoding_crash.phpt b/ext/exif/tests/exif_encoding_crash.phpt
new file mode 100644
index 0000000000..1c4ad63860
--- /dev/null
+++ b/ext/exif/tests/exif_encoding_crash.phpt
@@ -0,0 +1,14 @@
+--TEST--
+PHP crash when zend_multibyte_encoding_converter returns (size_t)-1)
+--SKIPIF--
+<?php if (!extension_loaded('exif')) print 'skip exif extension not available';?>
+--FILE--
+<?php
+$infile = dirname(__FILE__).'/exif_encoding_crash.jpg';
+$exif_data = exif_read_data($infile);
+echo "*** no core dump ***\n";
+?>
+===DONE===
+--EXPECT--
+*** no core dump ***
+===DONE===
diff --git a/ext/filter/logical_filters.c b/ext/filter/logical_filters.c
index 14964883c1..03b00bd9f6 100644
--- a/ext/filter/logical_filters.c
+++ b/ext/filter/logical_filters.c
@@ -714,7 +714,7 @@ void php_filter_validate_ip(PHP_INPUT_FILTER_PARAM_DECL) /* {{{ */
if (flags & FILTER_FLAG_NO_RES_RANGE) {
if (
(ip[0] == 0) ||
- (ip[0] == 100 && (ip[1] >= 64 || ip[1] <= 127)) ||
+ (ip[0] == 100 && (ip[1] >= 64 && ip[1] <= 127)) ||
(ip[0] == 128 && ip[1] == 0) ||
(ip[0] == 191 && ip[1] == 255) ||
(ip[0] == 169 && ip[1] == 254) ||
diff --git a/ext/filter/tests/018.phpt b/ext/filter/tests/018.phpt
index 9c73fc3cfc..75bbd13427 100644
--- a/ext/filter/tests/018.phpt
+++ b/ext/filter/tests/018.phpt
@@ -15,7 +15,7 @@ var_dump(filter_var("192.168.0.1", FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE
var_dump(filter_var("192.0.34.166", FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE));
var_dump(filter_var("127.0.0.1", FILTER_VALIDATE_IP, FILTER_FLAG_NO_RES_RANGE));
var_dump(filter_var("192.0.0.1", FILTER_VALIDATE_IP, FILTER_FLAG_NO_RES_RANGE));
-var_dump(filter_var("100.0.0.0", FILTER_VALIDATE_IP, FILTER_FLAG_NO_RES_RANGE));
+var_dump(filter_var("100.64.0.0", FILTER_VALIDATE_IP, FILTER_FLAG_NO_RES_RANGE));
var_dump(filter_var("100.127.255.255", FILTER_VALIDATE_IP, FILTER_FLAG_NO_RES_RANGE));
var_dump(filter_var("192.0.34.166", FILTER_VALIDATE_IP));
var_dump(filter_var("256.1237.123.1", FILTER_VALIDATE_IP));
diff --git a/ext/ftp/ftp.c b/ext/ftp/ftp.c
index 0d6704f9d2..b82017e21f 100644
--- a/ext/ftp/ftp.c
+++ b/ext/ftp/ftp.c
@@ -630,7 +630,7 @@ ftp_alloc(ftpbuf_t *ftp, const long size, char **response)
return 0;
}
- if (response && ftp->inbuf) {
+ if (response) {
*response = estrdup(ftp->inbuf);
}
@@ -1643,7 +1643,7 @@ ftp_genlist(ftpbuf_t *ftp, const char *cmd, const char *path TSRMLS_DC)
if (ftp->resp == 226) {
ftp->data = data_close(ftp, data);
php_stream_close(tmpstream);
- return ecalloc(1, sizeof(char**));
+ return ecalloc(1, sizeof(char*));
}
/* pull data buffer into tmpfile */
@@ -1671,11 +1671,11 @@ ftp_genlist(ftpbuf_t *ftp, const char *cmd, const char *path TSRMLS_DC)
}
}
- ftp->data = data = data_close(ftp, data);
+ ftp->data = data_close(ftp, data);
php_stream_rewind(tmpstream);
- ret = safe_emalloc((lines + 1), sizeof(char**), size * sizeof(char*));
+ ret = safe_emalloc((lines + 1), sizeof(char*), size);
entry = ret;
text = (char*) (ret + lines + 1);
diff --git a/ext/ftp/php_ftp.c b/ext/ftp/php_ftp.c
index da22e0b63e..21e13ea460 100644
--- a/ext/ftp/php_ftp.c
+++ b/ext/ftp/php_ftp.c
@@ -968,7 +968,9 @@ PHP_FUNCTION(ftp_nb_get)
RETURN_LONG(PHP_FTP_FAILED);
}
- php_stream_close(outstream);
+ if (ret == PHP_FTP_FINISHED){
+ php_stream_close(outstream);
+ }
RETURN_LONG(ret);
}
diff --git a/ext/ftp/tests/ftp_fget_basic1.phpt b/ext/ftp/tests/ftp_fget_basic1.phpt
index 475f7183d2..5909d35cef 100644
--- a/ext/ftp/tests/ftp_fget_basic1.phpt
+++ b/ext/ftp/tests/ftp_fget_basic1.phpt
@@ -16,7 +16,7 @@ ftp_login($ftp, 'user', 'pass');
if (!$ftp) die("Couldn't connect to the server");
ftp_set_option($ftp, FTP_AUTOSEEK, false);
-$local_file = dirname(__FILE__) . DIRECTORY_SEPARATOR . "localfile.txt";
+$local_file = dirname(__FILE__) . DIRECTORY_SEPARATOR . "ftp_fget_basic1.txt";
$handle = fopen($local_file, 'w');
var_dump(ftp_fget($ftp, $handle, 'fget.txt', FTP_ASCII, FTP_AUTORESUME));
@@ -24,7 +24,7 @@ var_dump(file_get_contents($local_file));
?>
--CLEAN--
<?php
-@unlink(dirname(__FILE__) . DIRECTORY_SEPARATOR . "localfile.txt");
+@unlink(dirname(__FILE__) . DIRECTORY_SEPARATOR . "ftp_fget_basic1.txt");
?>
--EXPECT--
bool(true)
diff --git a/ext/ftp/tests/ftp_fget_basic2.phpt b/ext/ftp/tests/ftp_fget_basic2.phpt
index 00a26752d9..622cea3683 100644
--- a/ext/ftp/tests/ftp_fget_basic2.phpt
+++ b/ext/ftp/tests/ftp_fget_basic2.phpt
@@ -15,7 +15,7 @@ $ftp = ftp_connect('127.0.0.1', $port);
ftp_login($ftp, 'user', 'pass');
if (!$ftp) die("Couldn't connect to the server");
-$local_file = dirname(__FILE__) . DIRECTORY_SEPARATOR . "localfile.txt";
+$local_file = dirname(__FILE__) . DIRECTORY_SEPARATOR . "ftp_fget_basic2.txt";
file_put_contents($local_file, 'ASCIIFoo');
$handle = fopen($local_file, 'a');
@@ -24,7 +24,7 @@ var_dump(file_get_contents($local_file));
?>
--CLEAN--
<?php
-@unlink(dirname(__FILE__) . DIRECTORY_SEPARATOR . "localfile.txt");
+@unlink(dirname(__FILE__) . DIRECTORY_SEPARATOR . "ftp_fget_basic2.txt");
?>
--EXPECT--
bool(true)
diff --git a/ext/ftp/tests/ftp_fget_basic3.phpt b/ext/ftp/tests/ftp_fget_basic3.phpt
index b7098701ab..9485473b1c 100644
--- a/ext/ftp/tests/ftp_fget_basic3.phpt
+++ b/ext/ftp/tests/ftp_fget_basic3.phpt
@@ -15,7 +15,7 @@ $ftp = ftp_connect('127.0.0.1', $port);
ftp_login($ftp, 'user', 'pass');
if (!$ftp) die("Couldn't connect to the server");
-$local_file = dirname(__FILE__) . DIRECTORY_SEPARATOR . "localfile.txt";
+$local_file = dirname(__FILE__) . DIRECTORY_SEPARATOR . "ftp_fget_basic3.txt";
file_put_contents($local_file, 'ASCIIFoo');
$handle = fopen($local_file, 'a');
@@ -24,7 +24,7 @@ var_dump(file_get_contents($local_file));
?>
--CLEAN--
<?php
-@unlink(dirname(__FILE__) . DIRECTORY_SEPARATOR . "localfile.txt");
+@unlink(dirname(__FILE__) . DIRECTORY_SEPARATOR . "ftp_fget_basic3.txt");
?>
--EXPECT--
bool(true)
diff --git a/ext/ftp/tests/ftp_nb_continue.phpt b/ext/ftp/tests/ftp_nb_continue.phpt
new file mode 100644
index 0000000000..1f70339913
--- /dev/null
+++ b/ext/ftp/tests/ftp_nb_continue.phpt
@@ -0,0 +1,182 @@
+--TEST--
+Testing whether ftp_nb_continue() fetches more data
+--SKIPIF--
+<?php
+require 'skipif.inc';
+?>
+--FILE--
+<?php
+require 'server.inc';
+
+$file = "mediumfile.txt";
+
+$ftp = ftp_connect('127.0.0.1', $port);
+ftp_login($ftp, 'user', 'pass');
+if (!$ftp) die("Couldn't connect to the server");
+
+$local_file = dirname(__FILE__) . DIRECTORY_SEPARATOR . $file;
+touch($local_file);
+
+$r = ftp_nb_get($ftp, $local_file, $file, FTP_BINARY);
+while ($r == FTP_MOREDATA) {
+ $r = ftp_nb_continue($ftp);
+}
+ftp_close($ftp);
+
+echo file_get_contents($local_file);
+?>
+--CLEAN--
+<?php
+@unlink(dirname(__FILE__) . DIRECTORY_SEPARATOR . "mediumfile.txt");
+?>
+--EXPECT--
+This is line 0 of the test data.
+This is line 1 of the test data.
+This is line 2 of the test data.
+This is line 3 of the test data.
+This is line 4 of the test data.
+This is line 5 of the test data.
+This is line 6 of the test data.
+This is line 7 of the test data.
+This is line 8 of the test data.
+This is line 9 of the test data.
+This is line 10 of the test data.
+This is line 11 of the test data.
+This is line 12 of the test data.
+This is line 13 of the test data.
+This is line 14 of the test data.
+This is line 15 of the test data.
+This is line 16 of the test data.
+This is line 17 of the test data.
+This is line 18 of the test data.
+This is line 19 of the test data.
+This is line 20 of the test data.
+This is line 21 of the test data.
+This is line 22 of the test data.
+This is line 23 of the test data.
+This is line 24 of the test data.
+This is line 25 of the test data.
+This is line 26 of the test data.
+This is line 27 of the test data.
+This is line 28 of the test data.
+This is line 29 of the test data.
+This is line 30 of the test data.
+This is line 31 of the test data.
+This is line 32 of the test data.
+This is line 33 of the test data.
+This is line 34 of the test data.
+This is line 35 of the test data.
+This is line 36 of the test data.
+This is line 37 of the test data.
+This is line 38 of the test data.
+This is line 39 of the test data.
+This is line 40 of the test data.
+This is line 41 of the test data.
+This is line 42 of the test data.
+This is line 43 of the test data.
+This is line 44 of the test data.
+This is line 45 of the test data.
+This is line 46 of the test data.
+This is line 47 of the test data.
+This is line 48 of the test data.
+This is line 49 of the test data.
+This is line 50 of the test data.
+This is line 51 of the test data.
+This is line 52 of the test data.
+This is line 53 of the test data.
+This is line 54 of the test data.
+This is line 55 of the test data.
+This is line 56 of the test data.
+This is line 57 of the test data.
+This is line 58 of the test data.
+This is line 59 of the test data.
+This is line 60 of the test data.
+This is line 61 of the test data.
+This is line 62 of the test data.
+This is line 63 of the test data.
+This is line 64 of the test data.
+This is line 65 of the test data.
+This is line 66 of the test data.
+This is line 67 of the test data.
+This is line 68 of the test data.
+This is line 69 of the test data.
+This is line 70 of the test data.
+This is line 71 of the test data.
+This is line 72 of the test data.
+This is line 73 of the test data.
+This is line 74 of the test data.
+This is line 75 of the test data.
+This is line 76 of the test data.
+This is line 77 of the test data.
+This is line 78 of the test data.
+This is line 79 of the test data.
+This is line 80 of the test data.
+This is line 81 of the test data.
+This is line 82 of the test data.
+This is line 83 of the test data.
+This is line 84 of the test data.
+This is line 85 of the test data.
+This is line 86 of the test data.
+This is line 87 of the test data.
+This is line 88 of the test data.
+This is line 89 of the test data.
+This is line 90 of the test data.
+This is line 91 of the test data.
+This is line 92 of the test data.
+This is line 93 of the test data.
+This is line 94 of the test data.
+This is line 95 of the test data.
+This is line 96 of the test data.
+This is line 97 of the test data.
+This is line 98 of the test data.
+This is line 99 of the test data.
+This is line 100 of the test data.
+This is line 101 of the test data.
+This is line 102 of the test data.
+This is line 103 of the test data.
+This is line 104 of the test data.
+This is line 105 of the test data.
+This is line 106 of the test data.
+This is line 107 of the test data.
+This is line 108 of the test data.
+This is line 109 of the test data.
+This is line 110 of the test data.
+This is line 111 of the test data.
+This is line 112 of the test data.
+This is line 113 of the test data.
+This is line 114 of the test data.
+This is line 115 of the test data.
+This is line 116 of the test data.
+This is line 117 of the test data.
+This is line 118 of the test data.
+This is line 119 of the test data.
+This is line 120 of the test data.
+This is line 121 of the test data.
+This is line 122 of the test data.
+This is line 123 of the test data.
+This is line 124 of the test data.
+This is line 125 of the test data.
+This is line 126 of the test data.
+This is line 127 of the test data.
+This is line 128 of the test data.
+This is line 129 of the test data.
+This is line 130 of the test data.
+This is line 131 of the test data.
+This is line 132 of the test data.
+This is line 133 of the test data.
+This is line 134 of the test data.
+This is line 135 of the test data.
+This is line 136 of the test data.
+This is line 137 of the test data.
+This is line 138 of the test data.
+This is line 139 of the test data.
+This is line 140 of the test data.
+This is line 141 of the test data.
+This is line 142 of the test data.
+This is line 143 of the test data.
+This is line 144 of the test data.
+This is line 145 of the test data.
+This is line 146 of the test data.
+This is line 147 of the test data.
+This is line 148 of the test data.
+This is line 149 of the test data.
diff --git a/ext/ftp/tests/ftp_nb_fget_basic1.phpt b/ext/ftp/tests/ftp_nb_fget_basic1.phpt
index cac4eec56b..5e6389ff13 100644
--- a/ext/ftp/tests/ftp_nb_fget_basic1.phpt
+++ b/ext/ftp/tests/ftp_nb_fget_basic1.phpt
@@ -16,7 +16,7 @@ ftp_login($ftp, 'user', 'pass');
if (!$ftp) die("Couldn't connect to the server");
ftp_set_option($ftp, FTP_AUTOSEEK, false);
-$local_file = dirname(__FILE__) . DIRECTORY_SEPARATOR . "localfile.txt";
+$local_file = dirname(__FILE__) . DIRECTORY_SEPARATOR . "ftp_nb_fget_basic1.txt";
$handle = fopen($local_file, 'w');
var_dump(ftp_nb_fget($ftp, $handle, 'fget.txt', FTP_ASCII, FTP_AUTORESUME));
@@ -24,7 +24,7 @@ var_dump(file_get_contents($local_file));
?>
--CLEAN--
<?php
-@unlink(dirname(__FILE__) . DIRECTORY_SEPARATOR . "localfile.txt");
+@unlink(dirname(__FILE__) . DIRECTORY_SEPARATOR . "ftp_nb_fget_basic1.txt");
?>
--EXPECT--
int(2)
diff --git a/ext/ftp/tests/ftp_nb_fget_basic2.phpt b/ext/ftp/tests/ftp_nb_fget_basic2.phpt
index dc92f4e23b..215b79ac4a 100644
--- a/ext/ftp/tests/ftp_nb_fget_basic2.phpt
+++ b/ext/ftp/tests/ftp_nb_fget_basic2.phpt
@@ -15,7 +15,7 @@ $ftp = ftp_connect('127.0.0.1', $port);
ftp_login($ftp, 'user', 'pass');
if (!$ftp) die("Couldn't connect to the server");
-$local_file = dirname(__FILE__) . DIRECTORY_SEPARATOR . "localfile.txt";
+$local_file = dirname(__FILE__) . DIRECTORY_SEPARATOR . "ftp_nb_fget_basic2.txt";
file_put_contents($local_file, 'ASCIIFoo');
$handle = fopen($local_file, 'a');
@@ -24,7 +24,7 @@ var_dump(file_get_contents($local_file));
?>
--CLEAN--
<?php
-@unlink(dirname(__FILE__) . DIRECTORY_SEPARATOR . "localfile.txt");
+@unlink(dirname(__FILE__) . DIRECTORY_SEPARATOR . "ftp_nb_fget_basic2.txt");
?>
--EXPECT--
int(2)
diff --git a/ext/ftp/tests/ftp_nb_fget_basic3.phpt b/ext/ftp/tests/ftp_nb_fget_basic3.phpt
index d1a87c4f3d..66daf2ba0a 100644
--- a/ext/ftp/tests/ftp_nb_fget_basic3.phpt
+++ b/ext/ftp/tests/ftp_nb_fget_basic3.phpt
@@ -15,7 +15,7 @@ $ftp = ftp_connect('127.0.0.1', $port);
ftp_login($ftp, 'user', 'pass');
if (!$ftp) die("Couldn't connect to the server");
-$local_file = dirname(__FILE__) . DIRECTORY_SEPARATOR . "localfile.txt";
+$local_file = dirname(__FILE__) . DIRECTORY_SEPARATOR . "ftp_nb_fget_basic3.txt";
file_put_contents($local_file, 'ASCIIFoo');
$handle = fopen($local_file, 'a');
@@ -24,7 +24,7 @@ var_dump(file_get_contents($local_file));
?>
--CLEAN--
<?php
-@unlink(dirname(__FILE__) . DIRECTORY_SEPARATOR . "localfile.txt");
+@unlink(dirname(__FILE__) . DIRECTORY_SEPARATOR . "ftp_nb_fget_basic3.txt");
?>
--EXPECT--
int(2)
diff --git a/ext/ftp/tests/ftp_nb_get_large.phpt b/ext/ftp/tests/ftp_nb_get_large.phpt
index 3fbf2a4831..0c354d7c19 100644
--- a/ext/ftp/tests/ftp_nb_get_large.phpt
+++ b/ext/ftp/tests/ftp_nb_get_large.phpt
@@ -18,7 +18,7 @@ $ftp = ftp_connect('127.0.0.1', $port);
ftp_login($ftp, 'user', 'pass');
if (!$ftp) die("Couldn't connect to the server");
-$local_file = dirname(__FILE__) . DIRECTORY_SEPARATOR . "localfile.txt";
+$local_file = dirname(__FILE__) . DIRECTORY_SEPARATOR . "ftp_nb_get_large.txt";
touch($local_file);
ftp_nb_get($ftp, $local_file, 'fget_large.txt', FTP_BINARY, 5368709119);
$fp = fopen($local_file, 'r');
@@ -29,7 +29,7 @@ fclose($fp);
?>
--CLEAN--
<?php
-@unlink(dirname(__FILE__) . DIRECTORY_SEPARATOR . "localfile.txt");
+@unlink(dirname(__FILE__) . DIRECTORY_SEPARATOR . "ftp_nb_get_large.txt");
?>
--EXPECT--
string(1) "X"
diff --git a/ext/ftp/tests/server.inc b/ext/ftp/tests/server.inc
index 7dc8fa08d9..bb0c1ff10b 100644
--- a/ext/ftp/tests/server.inc
+++ b/ext/ftp/tests/server.inc
@@ -368,6 +368,13 @@ if ($pid) {
}
fputs($s, "226 Closing data Connection.\r\n");
break;
+ case "mediumfile":
+ fputs($s, "150 File status okay; about to open data connection.\r\n");
+ for($i = 0; $i < 150; $i++){
+ fputs($fs, "This is line $i of the test data.\n");
+ }
+ fputs($s, "226 Closing data Connection.\r\n");
+
default:
fputs($s, "550 {$matches[1]}: No such file or directory \r\n");
break;
diff --git a/ext/gd/php_gd.h b/ext/gd/php_gd.h
index 45193768ea..70bc85a08b 100644
--- a/ext/gd/php_gd.h
+++ b/ext/gd/php_gd.h
@@ -61,7 +61,7 @@
PHPAPI extern const char php_sig_gif[3];
PHPAPI extern const char php_sig_jpg[3];
-PHPAPI extern const char php_sig_png[3];
+PHPAPI extern const char php_sig_png[8];
extern zend_module_entry gd_module_entry;
#define phpext_gd_ptr &gd_module_entry
diff --git a/ext/intl/locale/locale_methods.c b/ext/intl/locale/locale_methods.c
index 1707c69f93..9c5b09a7bc 100644
--- a/ext/intl/locale/locale_methods.c
+++ b/ext/intl/locale/locale_methods.c
@@ -127,6 +127,9 @@ static char* getPreferredTag(char* gf_tag)
int grOffset = 0;
grOffset = findOffset( LOC_GRANDFATHERED ,gf_tag);
+ if(grOffset < 0) {
+ return NULL;
+ }
if( grOffset < LOC_PREFERRED_GRANDFATHERED_LEN ){
/* return preferred tag */
result = estrdup( LOC_PREFERRED_GRANDFATHERED[grOffset] );
diff --git a/ext/ldap/ldap.c b/ext/ldap/ldap.c
index 3cfa2092e7..71d57d6d9b 100644
--- a/ext/ldap/ldap.c
+++ b/ext/ldap/ldap.c
@@ -2107,6 +2107,7 @@ PHP_FUNCTION(ldap_set_rebind_proc)
/* unregister rebind procedure */
if (ld->rebindproc != NULL) {
zval_dtor(ld->rebindproc);
+ FREE_ZVAL(ld->rebindproc);
ld->rebindproc = NULL;
ldap_set_rebind_proc(ld->link, NULL, NULL);
}
diff --git a/ext/ldap/tests/ldap_search_variation6.phpt b/ext/ldap/tests/ldap_search_variation6.phpt
index a29e4524df..5139ebb77d 100644
--- a/ext/ldap/tests/ldap_search_variation6.phpt
+++ b/ext/ldap/tests/ldap_search_variation6.phpt
@@ -217,14 +217,26 @@ array(2) {
[1]=>
resource(%d) of type (ldap result)
}
-NULL
-NULL
+array(1) {
+ ["count"]=>
+ int(0)
+}
+array(1) {
+ ["count"]=>
+ int(0)
+}
array(2) {
[0]=>
resource(%d) of type (ldap result)
[1]=>
resource(%d) of type (ldap result)
}
-NULL
-NULL
+array(1) {
+ ["count"]=>
+ int(0)
+}
+array(1) {
+ ["count"]=>
+ int(0)
+}
===DONE===
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_mobile.c b/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_mobile.c
index 4deb02960c..03e9633cae 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_mobile.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_mobile.c
@@ -142,7 +142,7 @@ const struct mbfl_convert_vtbl vtbl_wchar_2022jp_kddi = {
int
mbfl_filt_conv_2022jp_mobile_wchar(int c, mbfl_convert_filter *filter)
{
- int c1, s, w, snd;
+ int c1, s, w, snd = 0;
retry:
switch (filter->status & 0xf) {
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.c b/ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.c
index 4e1838f060..87bb2f21fd 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.c
@@ -134,7 +134,7 @@ int
mbfl_filt_conv_jis2004_wchar(int c, mbfl_convert_filter *filter)
{
int k;
- int c1, c2, s, s1, s2, w = 0, w1;
+ int c1, c2, s, s1 = 0, s2 = 0, w = 0, w1;
retry:
switch (filter->status & 0xf) {
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.c b/ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.c
index 7a549af666..93ac34644a 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.c
@@ -605,7 +605,7 @@ mbfilter_unicode2sjis_emoji_sb(int c, int *s1, mbfl_convert_filter *filter)
int
mbfl_filt_conv_sjis_mobile_wchar(int c, mbfl_convert_filter *filter)
{
- int c1, s, s1, s2, w;
+ int c1, s, s1 = 0, s2 = 0, w;
int snd = 0;
retry:
diff --git a/ext/mbstring/libmbfl/mbfl/mbfilter.c b/ext/mbstring/libmbfl/mbfl/mbfilter.c
index b3759f940d..3b14727d6b 100644
--- a/ext/mbstring/libmbfl/mbfl/mbfilter.c
+++ b/ext/mbstring/libmbfl/mbfl/mbfilter.c
@@ -985,7 +985,7 @@ mbfl_strpos(
{
int result;
mbfl_string _haystack_u8, _needle_u8;
- const mbfl_string *haystack_u8, *needle_u8;
+ const mbfl_string *haystack_u8, *needle_u8 = NULL;
const unsigned char *u8_tbl;
if (haystack == NULL || haystack->val == NULL || needle == NULL || needle->val == NULL) {
diff --git a/ext/mysqlnd/mysqlnd.c b/ext/mysqlnd/mysqlnd.c
index 843e52d389..6eb34e4092 100644
--- a/ext/mysqlnd/mysqlnd.c
+++ b/ext/mysqlnd/mysqlnd.c
@@ -527,7 +527,7 @@ mysqlnd_connect_run_authentication(
if (!auth_plugin) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "The server requested authentication method unknown to the client [%s]", requested_protocol);
- SET_CLIENT_ERROR(*conn->error_info, CR_NOT_IMPLEMENTED, UNKNOWN_SQLSTATE, "The server requested authentication method umknown to the client");
+ SET_CLIENT_ERROR(*conn->error_info, CR_NOT_IMPLEMENTED, UNKNOWN_SQLSTATE, "The server requested authentication method unknown to the client");
break;
}
}
@@ -2162,7 +2162,7 @@ MYSQLND_METHOD(mysqlnd_conn_data, change_user)(MYSQLND_CONN_DATA * const conn,
if (!auth_plugin) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "The server requested authentication method unknown to the client [%s]", requested_protocol);
- SET_CLIENT_ERROR(*conn->error_info, CR_NOT_IMPLEMENTED, UNKNOWN_SQLSTATE, "The server requested authentication method umknown to the client");
+ SET_CLIENT_ERROR(*conn->error_info, CR_NOT_IMPLEMENTED, UNKNOWN_SQLSTATE, "The server requested authentication method unknown to the client");
break;
}
}
diff --git a/ext/odbc/php_odbc_includes.h b/ext/odbc/php_odbc_includes.h
index ca237c0537..c00583b16a 100644
--- a/ext/odbc/php_odbc_includes.h
+++ b/ext/odbc/php_odbc_includes.h
@@ -232,7 +232,7 @@ typedef struct odbc_connection {
} odbc_connection;
typedef struct odbc_result_value {
- char name[32];
+ char name[256];
char *value;
SQLLEN vallen;
SQLLEN coltype;
diff --git a/ext/openssl/openssl.c b/ext/openssl/openssl.c
index f1dfa5024a..26792e2428 100644
--- a/ext/openssl/openssl.c
+++ b/ext/openssl/openssl.c
@@ -4613,9 +4613,6 @@ SSL *php_SSL_new_from_context(SSL_CTX *ctx, php_stream *stream TSRMLS_DC) /* {{{
GET_VER_OPT_STRING("local_cert", certfile);
if (certfile) {
- X509 *cert = NULL;
- EVP_PKEY *key = NULL;
- SSL *tmpssl;
char resolved_path_buff[MAXPATHLEN];
const char * private_key = NULL;
@@ -4642,16 +4639,22 @@ SSL *php_SSL_new_from_context(SSL_CTX *ctx, php_stream *stream TSRMLS_DC) /* {{{
}
}
- tmpssl = SSL_new(ctx);
- cert = SSL_get_certificate(tmpssl);
-
- if (cert) {
- key = X509_get_pubkey(cert);
- EVP_PKEY_copy_parameters(key, SSL_get_privatekey(tmpssl));
- EVP_PKEY_free(key);
- }
- SSL_free(tmpssl);
-
+#if OPENSSL_VERSION_NUMBER < 0x10001001L
+ do {
+ /* Unnecessary as of OpenSSLv1.0.1 (will segfault if used with >= 10001001 ) */
+ X509 *cert = NULL;
+ EVP_PKEY *key = NULL;
+ SSL *tmpssl = SSL_new(ctx);
+ cert = SSL_get_certificate(tmpssl);
+
+ if (cert) {
+ key = X509_get_pubkey(cert);
+ EVP_PKEY_copy_parameters(key, SSL_get_privatekey(tmpssl));
+ EVP_PKEY_free(key);
+ }
+ SSL_free(tmpssl);
+ } while (0);
+#endif
if (!SSL_CTX_check_private_key(ctx)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Private key does not match certificate!");
}
diff --git a/ext/pdo/pdo_dbh.c b/ext/pdo/pdo_dbh.c
index d5860b1a1e..ac8d29a95c 100644
--- a/ext/pdo/pdo_dbh.c
+++ b/ext/pdo/pdo_dbh.c
@@ -460,7 +460,7 @@ static void pdo_stmt_construct(pdo_stmt_t *stmt, zval *object, zend_class_entry
if (dbstmt_ce->constructor) {
zend_fcall_info fci;
zend_fcall_info_cache fcc;
- zval *retval;
+ zval *retval = NULL;
fci.size = sizeof(zend_fcall_info);
fci.function_table = &dbstmt_ce->function_table;
@@ -495,7 +495,7 @@ static void pdo_stmt_construct(pdo_stmt_t *stmt, zval *object, zend_class_entry
zval_dtor(object);
ZVAL_NULL(object);
object = NULL; /* marks failure */
- } else {
+ } else if (retval) {
zval_ptr_dtor(&retval);
}
diff --git a/ext/pdo_dblib/dblib_driver.c b/ext/pdo_dblib/dblib_driver.c
index 2aaf3975db..daf5494d58 100644
--- a/ext/pdo_dblib/dblib_driver.c
+++ b/ext/pdo_dblib/dblib_driver.c
@@ -350,9 +350,10 @@ static int pdo_dblib_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_
DBSETLAPP(H->login, vars[1].optval);
+/* DBSETLDBNAME is only available in FreeTDS 0.92 or above */
#ifdef DBSETLDBNAME
if (vars[3].optval) {
- DBSETLDBNAME(H->login, vars[3].optval);
+ if(FAIL == DBSETLDBNAME(H->login, vars[3].optval)) goto cleanup;
}
#endif
@@ -362,6 +363,16 @@ static int pdo_dblib_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_
goto cleanup;
}
+/*
+ * FreeTDS < 0.92 does not support the DBSETLDBNAME option
+ * Send use database here after login (Will not work with SQL Azure)
+ */
+#ifndef DBSETLDBNAME
+ if (vars[3].optval) {
+ if(FAIL == dbuse(H->link, vars[3].optval)) goto cleanup;
+ }
+#endif
+
#if PHP_DBLIB_IS_MSSQL
/* dblib do not return more than this length from text/image */
DBSETOPT(H->link, DBTEXTLIMIT, "2147483647");
@@ -377,23 +388,6 @@ static int pdo_dblib_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_
dbh->max_escaped_char_length = 2;
dbh->alloc_own_columns = 1;
-#if 0
- /* Cache the supported data types from the servers systypes table */
- if(dbcmd(H->link, "select usertype, name from systypes order by usertype") != FAIL) {
- if(dbsqlexec(H->link) != FAIL) {
- dbresults(H->link);
- while (dbnextrow(H->link) == SUCCESS) {
- val = dbdata(H->link, 1);
- add_index_string(pdo_dblib_datatypes, *val, dbdata(H->link, 2), 1);
- }
- }
- /* Throw out any remaining resultsets */
- dbcancel(H-link);
- }
-#endif
-
-
-
cleanup:
for (i = 0; i < nvars; i++) {
if (vars[i].freeme) {
diff --git a/ext/pdo_sqlite/tests/bug66033.phpt b/ext/pdo_sqlite/tests/bug66033.phpt
new file mode 100644
index 0000000000..28da3b54bf
--- /dev/null
+++ b/ext/pdo_sqlite/tests/bug66033.phpt
@@ -0,0 +1,33 @@
+--TEST--
+Bug #66033 (Segmentation Fault when constructor of PDO statement throws an exception)
+--SKIPIF--
+<?php
+if (!extension_loaded('pdo_sqlite')) print 'skip not loaded';
+?>
+--FILE--
+<?php
+class DBStatement extends PDOStatement {
+ public $dbh;
+ protected function __construct($dbh) {
+ $this->dbh = $dbh;
+ throw new Exception("Blah");
+ }
+}
+
+$pdo = new PDO('sqlite::memory:', null, null);
+$pdo->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('DBStatement',
+ array($pdo)));
+$pdo->exec("CREATE TABLE IF NOT EXISTS messages (
+ id INTEGER PRIMARY KEY,
+ title TEXT,
+ message TEXT,
+ time INTEGER)");
+
+try {
+ $pdoStatement = $pdo->query("select * from messages");
+} catch (Exception $e) {
+ var_dump($e->getMessage());
+}
+?>
+--EXPECTF--
+string(4) "Blah"
diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c
index f4c4cb37e7..c8f7d3d432 100644
--- a/ext/pgsql/pgsql.c
+++ b/ext/pgsql/pgsql.c
@@ -2639,7 +2639,7 @@ static void php_pgsql_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, long result_type,
Bucket *p;
fci.param_count = 0;
- fci.params = safe_emalloc(sizeof(zval*), ht->nNumOfElements, 0);
+ fci.params = safe_emalloc(sizeof(zval***), ht->nNumOfElements, 0);
p = ht->pListHead;
while (p != NULL) {
fci.params[fci.param_count++] = (zval**)p->pData;
diff --git a/ext/phar/dirstream.c b/ext/phar/dirstream.c
index 277d058ea6..a48cde2f97 100644
--- a/ext/phar/dirstream.c
+++ b/ext/phar/dirstream.c
@@ -168,11 +168,7 @@ static int phar_compare_dir_name(const void *a, const void *b TSRMLS_DC) /* {{{
f = *((Bucket **) a);
s = *((Bucket **) b);
-#if (PHP_MAJOR_VERSION < 6)
result = zend_binary_strcmp(f->arKey, f->nKeyLength, s->arKey, s->nKeyLength);
-#else
- result = zend_binary_strcmp(f->key.arKey.s, f->nKeyLength, s->key.arKey.s, s->nKeyLength);
-#endif
if (result < 0) {
return -1;
diff --git a/ext/phar/util.c b/ext/phar/util.c
index 898d8bd4b2..227bd15dc7 100644
--- a/ext/phar/util.c
+++ b/ext/phar/util.c
@@ -1262,8 +1262,10 @@ alias_success:
spprintf(error, 0, "alias \"%s\" is already used for archive \"%s\" cannot be overloaded with \"%s\"", alias, (*fd_ptr)->fname, fname);
}
if (SUCCESS == phar_free_alias(*fd_ptr, alias, alias_len TSRMLS_CC)) {
- efree(*error);
- *error = NULL;
+ if (error) {
+ efree(*error);
+ *error = NULL;
+ }
}
return FAILURE;
}
diff --git a/ext/skeleton/php_skeleton.h b/ext/skeleton/php_skeleton.h
index 495907bbd1..0716ae05e6 100644
--- a/ext/skeleton/php_skeleton.h
+++ b/ext/skeleton/php_skeleton.h
@@ -6,6 +6,8 @@
extern zend_module_entry extname_module_entry;
#define phpext_extname_ptr &extname_module_entry
+#define PHP_EXTNAME_VERSION "0.1.0" /* Replace with version number for your extension */
+
#ifdef PHP_WIN32
# define PHP_EXTNAME_API __declspec(dllexport)
#elif defined(__GNUC__) && __GNUC__ >= 4
diff --git a/ext/skeleton/skeleton.c b/ext/skeleton/skeleton.c
index ee4ea74e16..2e373442d8 100644
--- a/ext/skeleton/skeleton.c
+++ b/ext/skeleton/skeleton.c
@@ -41,7 +41,7 @@ zend_module_entry extname_module_entry = {
PHP_RSHUTDOWN(extname), /* Replace with NULL if there's nothing to do at request end */
PHP_MINFO(extname),
#if ZEND_MODULE_API_NO >= 20010901
- "0.1", /* Replace with version number for your extension */
+ PHP_EXTNAME_VERSION,
#endif
STANDARD_MODULE_PROPERTIES
};
diff --git a/ext/soap/php_sdl.c b/ext/soap/php_sdl.c
index 0ac4c2ed7a..a7a5071c08 100644
--- a/ext/soap/php_sdl.c
+++ b/ext/soap/php_sdl.c
@@ -2644,16 +2644,17 @@ static sdlAttributePtr make_persistent_sdl_attribute(sdlAttributePtr attr, HashT
zend_hash_internal_pointer_reset(pattr->extraAttributes);
while (zend_hash_get_current_data(attr->extraAttributes, (void**)&tmp) == SUCCESS) {
- pextra = malloc(sizeof(sdlExtraAttribute));
- memset(pextra, 0, sizeof(sdlExtraAttribute));
- if ((*tmp)->ns) {
- pextra->ns = strdup((*tmp)->ns);
- }
- if ((*tmp)->val) {
- pextra->val = strdup((*tmp)->val);
- }
+ if (zend_hash_get_current_key_ex(attr->extraAttributes, &key, &key_len, &index, 0, NULL) == HASH_KEY_IS_STRING) {
+ pextra = malloc(sizeof(sdlExtraAttribute));
+ memset(pextra, 0, sizeof(sdlExtraAttribute));
- if (zend_hash_get_current_key_ex(attr->extraAttributes, &key, &key_len, &index, 0, NULL) == HASH_KEY_IS_STRING) {
+ if ((*tmp)->ns) {
+ pextra->ns = strdup((*tmp)->ns);
+ }
+ if ((*tmp)->val) {
+ pextra->val = strdup((*tmp)->val);
+ }
+
zend_hash_add(pattr->extraAttributes, key, key_len, (void*)&pextra, sizeof(sdlExtraAttributePtr), NULL);
}
diff --git a/ext/sockets/sockets.c b/ext/sockets/sockets.c
index d0d0294647..d094b3cc1d 100644
--- a/ext/sockets/sockets.c
+++ b/ext/sockets/sockets.c
@@ -607,6 +607,8 @@ static char *php_strerror(int error TSRMLS_DC) /* {{{ */
/* }}} */
#if HAVE_IPV6
+static int php_get_if_index_from_string(const char *val, unsigned *out TSRMLS_DC);
+
/* Sets addr by hostname, or by ip in string form (AF_INET6) */
static int php_set_inet6_addr(struct sockaddr_in6 *sin6, char *string, php_socket *php_sock TSRMLS_DC) /* {{{ */
{
@@ -615,6 +617,7 @@ static int php_set_inet6_addr(struct sockaddr_in6 *sin6, char *string, php_socke
struct addrinfo hints;
struct addrinfo *addrinfo = NULL;
#endif
+ char *scope = strchr(string, '%');
if (inet_pton(AF_INET6, string, &tmp)) {
memcpy(&(sin6->sin6_addr.s6_addr), &(tmp.s6_addr), sizeof(struct in6_addr));
@@ -649,6 +652,22 @@ static int php_set_inet6_addr(struct sockaddr_in6 *sin6, char *string, php_socke
}
+ if (scope++) {
+ long lval = 0;
+ double dval = 0;
+ unsigned scope_id = 0;
+
+ if (IS_LONG == is_numeric_string(scope, strlen(scope), &lval, &dval, 0)) {
+ if (lval > 0 && lval <= UINT_MAX) {
+ scope_id = lval;
+ }
+ } else {
+ php_get_if_index_from_string(scope, &scope_id TSRMLS_CC);
+ }
+
+ sin6->sin6_scope_id = scope_id;
+ }
+
return 1;
}
/* }}} */
@@ -714,6 +733,28 @@ static int php_set_inet46_addr(php_sockaddr_storage *ss, socklen_t *ss_len, char
return 0;
}
+static int php_get_if_index_from_string(const char *val, unsigned *out TSRMLS_DC)
+{
+#if HAVE_IF_NAMETOINDEX
+ unsigned int ind;
+
+ ind = if_nametoindex(val);
+ if (ind == 0) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING,
+ "no interface with name \"%s\" could be found", val);
+ return FAILURE;
+ } else {
+ *out = ind;
+ return SUCCESS;
+ }
+#else
+ php_error_docref(NULL TSRMLS_CC, E_WARNING,
+ "this platform does not support looking up an interface by "
+ "name, an integer interface index must be supplied instead");
+ return FAILURE;
+#endif
+}
+
static int php_get_if_index_from_zval(zval *val, unsigned *out TSRMLS_DC)
{
int ret;
@@ -729,26 +770,10 @@ static int php_get_if_index_from_zval(zval *val, unsigned *out TSRMLS_DC)
ret = SUCCESS;
}
} else {
-#if HAVE_IF_NAMETOINDEX
- unsigned int ind;
zval_add_ref(&val);
convert_to_string_ex(&val);
- ind = if_nametoindex(Z_STRVAL_P(val));
- if (ind == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,
- "no interface with name \"%s\" could be found", Z_STRVAL_P(val));
- ret = FAILURE;
- } else {
- *out = ind;
- ret = SUCCESS;
- }
+ ret = php_get_if_index_from_string(Z_STRVAL_P(val), out TSRMLS_CC);
zval_ptr_dtor(&val);
-#else
- php_error_docref(NULL TSRMLS_CC, E_WARNING,
- "this platform does not support looking up an interface by "
- "name, an integer interface index must be supplied instead");
- ret = FAILURE;
-#endif
}
return ret;
diff --git a/ext/spl/tests/SplFileObject_getflags_basic.phpt b/ext/spl/tests/SplFileObject_getflags_basic.phpt
index 5addadf380..88cf6861a2 100644
--- a/ext/spl/tests/SplFileObject_getflags_basic.phpt
+++ b/ext/spl/tests/SplFileObject_getflags_basic.phpt
@@ -7,16 +7,16 @@ Erwin Poeze <erwin.poeze@gmail.com>
--FILE--
<?php
-file_put_contents('testdata.csv', 'eerste;tweede;derde');
+file_put_contents('SplFileObject_getflags_basic.csv', 'eerste;tweede;derde');
-$fo = new SplFileObject('testdata.csv');
+$fo = new SplFileObject('SplFileObject_getflags_basic.csv');
$fo->setFlags(SplFileObject::DROP_NEW_LINE);
var_dump($fo->getFlags());
?>
--CLEAN--
<?php
-unlink('testdata.csv');
+unlink('SplFileObject_getflags_basic.csv');
?>
--EXPECT--
int(1)
diff --git a/ext/spl/tests/SplFileObject_getflags_error001.phpt b/ext/spl/tests/SplFileObject_getflags_error001.phpt
index 1602f88885..ca53c857e7 100644
--- a/ext/spl/tests/SplFileObject_getflags_error001.phpt
+++ b/ext/spl/tests/SplFileObject_getflags_error001.phpt
@@ -7,10 +7,10 @@ Erwin Poeze <erwin.poeze@gmail.com>
--FILE--
<?php
-file_put_contents('testdata.csv', 'eerste;tweede;derde');
+file_put_contents('SplFileObject_getflags_error001.csv', 'eerste;tweede;derde');
-$fo = new SplFileObject('testdata.csv');
+$fo = new SplFileObject('SplFileObject_getflags_error001.csv');
$fo->setFlags(SplFileObject::READ_CSV);
$fo->setFlags(SplFileObject::DROP_NEW_LINE);
@@ -20,7 +20,7 @@ var_dump($fo->getFlags());
?>
--CLEAN--
<?php
-unlink('testdata.csv');
+unlink('SplFileObject_getflags_error001.csv');
?>
--EXPECT--
int(1)
diff --git a/ext/spl/tests/SplFileObject_getflags_error002.phpt b/ext/spl/tests/SplFileObject_getflags_error002.phpt
index e2c8255f44..00fd351db8 100644
--- a/ext/spl/tests/SplFileObject_getflags_error002.phpt
+++ b/ext/spl/tests/SplFileObject_getflags_error002.phpt
@@ -5,9 +5,9 @@ Erwin Poeze <erwin.poeze@gmail.com>
--FILE--
<?php
-file_put_contents('testdata.csv', 'eerste;tweede;derde');
+file_put_contents('SplFileObject_getflags_error002.csv', 'eerste;tweede;derde');
-$fo = new SplFileObject('testdata.csv');
+$fo = new SplFileObject('SplFileObject_getflags_error002.csv');
$fo->setFlags(SplFileObject::READ_CSV);
$fo->getFlags('fake');
@@ -15,7 +15,7 @@ $fo->getFlags('fake');
?>
--CLEAN--
<?php
-unlink('testdata.csv');
+unlink('SplFileObject_getflags_error002.csv');
?>
--EXPECTF--
Warning: SplFileObject::getFlags() expects exactly 0 parameters, 1 given in %s on line %d
diff --git a/ext/spl/tests/SplFileObject_rewind_error001.phpt b/ext/spl/tests/SplFileObject_rewind_error001.phpt
index bdb3301e63..5f2379aa13 100644
--- a/ext/spl/tests/SplFileObject_rewind_error001.phpt
+++ b/ext/spl/tests/SplFileObject_rewind_error001.phpt
@@ -7,12 +7,16 @@ Erwin Poeze <erwin.poeze@gmail.com>
--FILE--
<?php
-file_put_contents('testdata.csv', 'eerste;tweede;derde');
+file_put_contents('SplFileObject_rewind_error001.csv', 'eerste;tweede;derde');
-$fo = new SplFileObject('testdata.csv');
+$fo = new SplFileObject('SplFileObject_rewind_error001.csv');
$fo->rewind( "invalid" );
?>
+--CLEAN--
+<?php
+unlink('SplFileObject_rewind_error001.csv');
+?>
--EXPECTF--
Warning: SplFileObject::rewind() expects exactly 0 parameters, 1 given in %s on line %d
diff --git a/ext/standard/http_fopen_wrapper.c b/ext/standard/http_fopen_wrapper.c
index b8676bbba4..4605e7494f 100644
--- a/ext/standard/http_fopen_wrapper.c
+++ b/ext/standard/http_fopen_wrapper.c
@@ -84,6 +84,30 @@
#define HTTP_WRAPPER_HEADER_INIT 1
#define HTTP_WRAPPER_REDIRECTED 2
+static inline void strip_header(char *header_bag, char *lc_header_bag,
+ const char *lc_header_name)
+{
+ char *lc_header_start = strstr(lc_header_bag, lc_header_name);
+ char *header_start = header_bag + (lc_header_start - lc_header_bag);
+
+ if (lc_header_start
+ && (lc_header_start == lc_header_bag || *(lc_header_start-1) == '\n')
+ ) {
+ char *lc_eol = strchr(lc_header_start, '\n');
+ char *eol = header_start + (lc_eol - lc_header_start);
+
+ if (lc_eol) {
+ size_t eollen = strlen(lc_eol);
+
+ memmove(lc_header_start, lc_eol+1, eollen);
+ memmove(header_start, eol+1, eollen);
+ } else {
+ *lc_header_start = '\0';
+ *header_start = '\0';
+ }
+ }
+}
+
php_stream *php_stream_url_wrap_http_ex(php_stream_wrapper *wrapper, char *path, char *mode, int options, char **opened_path, php_stream_context *context, int redirect_max, int flags STREAMS_DC TSRMLS_DC) /* {{{ */
{
php_stream *stream = NULL;
@@ -425,40 +449,17 @@ finish:
if (tmp && strlen(tmp) > 0) {
char *s;
- if (!header_init) { /* Remove post headers for redirects */
- int l = strlen(tmp);
- char *s2, *tmp_c = estrdup(tmp);
-
- php_strtolower(tmp_c, l);
- if ((s = strstr(tmp_c, "content-length:"))) {
- if ((s2 = memchr(s, '\n', tmp_c + l - s))) {
- int b = tmp_c + l - 1 - s2;
- memmove(tmp, tmp + (s2 + 1 - tmp_c), b);
- memmove(tmp_c, s2 + 1, b);
-
- } else {
- tmp[s - tmp_c] = *s = '\0';
- }
- l = strlen(tmp_c);
- }
- if ((s = strstr(tmp_c, "content-type:"))) {
- if ((s2 = memchr(s, '\n', tmp_c + l - s))) {
- memmove(tmp, tmp + (s2 + 1 - tmp_c), tmp_c + l - 1 - s2);
- } else {
- tmp[s - tmp_c] = '\0';
- }
- }
-
- efree(tmp_c);
- tmp_c = php_trim(tmp, strlen(tmp), NULL, 0, NULL, 3 TSRMLS_CC);
- efree(tmp);
- tmp = tmp_c;
- }
-
user_headers = estrdup(tmp);
/* Make lowercase for easy comparison against 'standard' headers */
php_strtolower(tmp, strlen(tmp));
+
+ if (!header_init) {
+ /* strip POST headers on redirect */
+ strip_header(user_headers, tmp, "content-length:");
+ strip_header(user_headers, tmp, "content-type:");
+ }
+
if ((s = strstr(tmp, "user-agent:")) &&
(s == tmp || *(s-1) == '\r' || *(s-1) == '\n' ||
*(s-1) == '\t' || *(s-1) == ' ')) {
diff --git a/ext/standard/tests/file/disk_free_space_basic.phpt b/ext/standard/tests/file/disk_free_space_basic.phpt
index 7ea8d36153..9dc663ae16 100644
--- a/ext/standard/tests/file/disk_free_space_basic.phpt
+++ b/ext/standard/tests/file/disk_free_space_basic.phpt
@@ -1,5 +1,9 @@
--TEST--
Test disk_free_space and its alias diskfreespace() functions : basic functionality
+--SKIPIF--
+<?php
+if (getenv("TRAVIS") === "true") die("skip inaccurate on TravisCI");
+?>
--INI--
memory_limit=32M
--FILE--
diff --git a/ext/standard/tests/file/fgets_socket_variation1.phpt b/ext/standard/tests/file/fgets_socket_variation1.phpt
index 57944d8b56..429ad67d69 100644
--- a/ext/standard/tests/file/fgets_socket_variation1.phpt
+++ b/ext/standard/tests/file/fgets_socket_variation1.phpt
@@ -5,11 +5,17 @@ Dave Kelsey <d_kelsey@uk.ibm.com>
--FILE--
<?php
-/* Setup socket server */
-$server = stream_socket_server('tcp://127.0.0.1:31337');
+for ($i=0; $i<100; $i++) {
+ $port = rand(10000, 65000);
+ /* Setup socket server */
+ $server = @stream_socket_server("tcp://127.0.0.1:$port");
+ if ($server) {
+ break;
+ }
+}
/* Connect to it */
-$client = fsockopen('tcp://127.0.0.1:31337');
+$client = fsockopen("tcp://127.0.0.1:$port");
if (!$client) {
die("Unable to create socket");
diff --git a/ext/standard/tests/file/fgets_socket_variation2.phpt b/ext/standard/tests/file/fgets_socket_variation2.phpt
index 3500837133..da1f0b47ad 100644
--- a/ext/standard/tests/file/fgets_socket_variation2.phpt
+++ b/ext/standard/tests/file/fgets_socket_variation2.phpt
@@ -16,11 +16,17 @@ for ($i = 0; $i < 1000; $i++) {
}
fclose($fd);
-/* Setup socket server */
-$server = stream_socket_server('tcp://127.0.0.1:31337');
+for ($i=0; $i<100; $i++) {
+ $port = rand(10000, 65000);
+ /* Setup socket server */
+ $server = @stream_socket_server("tcp://127.0.0.1:$port");
+ if ($server) {
+ break;
+ }
+}
/* Connect to it */
-$client = fsockopen('tcp://127.0.0.1:31337');
+$client = fsockopen("tcp://127.0.0.1:$port");
if (!$client) {
die("Unable to create socket");
diff --git a/ext/standard/tests/file/file_put_contents_variation9.phpt b/ext/standard/tests/file/file_put_contents_variation9.phpt
index 7ad09c449d..79a42fe9b1 100644
--- a/ext/standard/tests/file/file_put_contents_variation9.phpt
+++ b/ext/standard/tests/file/file_put_contents_variation9.phpt
@@ -17,10 +17,10 @@ if(substr(PHP_OS, 0, 3) == "WIN")
echo "*** Testing file_put_contents() : usage variation ***\n";
-$filename = dirname(__FILE__).'/fileGetContentsVar9.tmp';
-$softlink = dirname(__FILE__).'/fileGetContentsVar9.SoftLink';
-$hardlink = dirname(__FILE__).'/fileGetContentsVar9.HardLink';
-$chainlink = dirname(__FILE__).'/fileGetContentsVar9.ChainLink';
+$filename = dirname(__FILE__).'/filePutContentsVar9.tmp';
+$softlink = dirname(__FILE__).'/filePutContentsVar9.SoftLink';
+$hardlink = dirname(__FILE__).'/filePutContentsVar9.HardLink';
+$chainlink = dirname(__FILE__).'/filePutContentsVar9.ChainLink';
// link files even though it original file doesn't exist yet
diff --git a/ext/standard/tests/file/fread_socket_variation1.phpt b/ext/standard/tests/file/fread_socket_variation1.phpt
index a615d2f414..d65565d3cc 100644
--- a/ext/standard/tests/file/fread_socket_variation1.phpt
+++ b/ext/standard/tests/file/fread_socket_variation1.phpt
@@ -3,13 +3,20 @@ Testing fread() on a TCP server socket
--FILE--
<?php
-$tcp_socket = stream_socket_server('tcp://127.0.0.1:31337');
+for ($i=0; $i<100; $i++) {
+ $port = rand(10000, 65000);
+ /* Setup socket server */
+ $server = @stream_socket_server("tcp://127.0.0.1:$port");
+ if ($server) {
+ break;
+ }
+}
-socket_set_timeout($tcp_socket, 0, 1000);
+socket_set_timeout($server, 0, 1000);
-var_dump(fread($tcp_socket, 1));
+var_dump(fread($server, 1));
-fclose($tcp_socket);
+fclose($server);
?>
--EXPECT--
diff --git a/ext/standard/tests/general_functions/bug41445_1.phpt b/ext/standard/tests/general_functions/bug41445_1.phpt
index e65e7afcc8..4698de436a 100644
--- a/ext/standard/tests/general_functions/bug41445_1.phpt
+++ b/ext/standard/tests/general_functions/bug41445_1.phpt
@@ -3,7 +3,7 @@ Bug #41445 (parse_ini_file() function parses octal numbers in section names) - 2
--FILE--
<?php
-$file = dirname(__FILE__)."/bug41445.ini";
+$file = dirname(__FILE__)."/bug41445_1.ini";
$data = <<<DATA
[2454.33]
diff --git a/ext/standard/tests/general_functions/var_export-locale.phpt b/ext/standard/tests/general_functions/var_export-locale.phpt
index 37142cf34c..3cbebe9c72 100644
--- a/ext/standard/tests/general_functions/var_export-locale.phpt
+++ b/ext/standard/tests/general_functions/var_export-locale.phpt
@@ -784,15 +784,15 @@ string(20) "array (
Iteration 13
array (
0 => 10.5,
- 1 => 5.6,
+ 1 => 5.5999999999999996,
)
array (
0 => 10.5,
- 1 => 5.6,
+ 1 => 5.5999999999999996,
)
-string(34) "array (
+string(49) "array (
0 => 10.5,
- 1 => 5.6,
+ 1 => 5.5999999999999996,
)"
diff --git a/ext/standard/tests/general_functions/var_export_basic3.phpt b/ext/standard/tests/general_functions/var_export_basic3.phpt
index 2997215910..9e27d90425 100644
--- a/ext/standard/tests/general_functions/var_export_basic3.phpt
+++ b/ext/standard/tests/general_functions/var_export_basic3.phpt
@@ -96,9 +96,9 @@ string(1) "0"
-- Iteration: -0.1 --
--0.1
--0.1
-string(4) "-0.1"
+-0.10000000000000001
+-0.10000000000000001
+string(20) "-0.10000000000000001"
-- Iteration: 10.0000000000000000005 --
@@ -120,9 +120,9 @@ string(6) "100000"
-- Iteration: 1e-5 --
-1.0E-5
-1.0E-5
-string(6) "1.0E-5"
+1.0000000000000001E-5
+1.0000000000000001E-5
+string(21) "1.0000000000000001E-5"
-- Iteration: 1e+5 --
@@ -144,9 +144,9 @@ string(6) "100000"
-- Iteration: 1E-5 --
-1.0E-5
-1.0E-5
-string(6) "1.0E-5"
+1.0000000000000001E-5
+1.0000000000000001E-5
+string(21) "1.0000000000000001E-5"
-- Iteration: .5e+7 --
@@ -156,20 +156,20 @@ string(7) "5000000"
-- Iteration: .6e-19 --
-6.0E-20
-6.0E-20
-string(7) "6.0E-20"
+6.0000000000000006E-20
+6.0000000000000006E-20
+string(22) "6.0000000000000006E-20"
-- Iteration: .05E+44 --
-5.0E+42
-5.0E+42
-string(7) "5.0E+42"
+5.0000000000000001E+42
+5.0000000000000001E+42
+string(22) "5.0000000000000001E+42"
-- Iteration: .0034E-30 --
-3.4E-33
-3.4E-33
-string(7) "3.4E-33"
+3.4000000000000001E-33
+3.4000000000000001E-33
+string(22) "3.4000000000000001E-33"
===DONE===
diff --git a/ext/standard/tests/general_functions/var_export_basic5.phpt b/ext/standard/tests/general_functions/var_export_basic5.phpt
index 96b3f54cc9..1512fa8377 100644
--- a/ext/standard/tests/general_functions/var_export_basic5.phpt
+++ b/ext/standard/tests/general_functions/var_export_basic5.phpt
@@ -233,15 +233,15 @@ string(20) "array (
--Iteration: array(10.5, 5.6) --
array (
0 => 10.5,
- 1 => 5.6,
+ 1 => 5.5999999999999996,
)
array (
0 => 10.5,
- 1 => 5.6,
+ 1 => 5.5999999999999996,
)
-string(34) "array (
+string(49) "array (
0 => 10.5,
- 1 => 5.6,
+ 1 => 5.5999999999999996,
)"
@@ -274,4 +274,4 @@ string(41) "array (
1 => 'test',
)"
-===DONE=== \ No newline at end of file
+===DONE===
diff --git a/ext/standard/tests/http/bug61548.phpt b/ext/standard/tests/http/bug61548.phpt
new file mode 100644
index 0000000000..138b15a338
--- /dev/null
+++ b/ext/standard/tests/http/bug61548.phpt
@@ -0,0 +1,118 @@
+--TEST--
+Bug #61548 (content-type must appear at the end of headers)
+--INI--
+allow_url_fopen=1
+--SKIPIF--
+<?php require 'server.inc'; http_server_skipif('tcp://127.0.0.1:12342'); ?>
+--FILE--
+<?php
+require 'server.inc';
+
+function do_test($header) {
+ $options = [
+ 'http' => [
+ 'method' => 'POST',
+ 'header' => $header,
+ 'follow_location' => true,
+ ],
+ ];
+
+ $ctx = stream_context_create($options);
+
+ $responses = [
+ "data://text/plain,HTTP/1.1 201\r\nLocation: /foo\r\n\r\n",
+ "data://text/plain,HTTP/1.1 200\r\nConnection: close\r\n\r\n",
+ ];
+ $pid = http_server('tcp://127.0.0.1:12342', $responses, $output);
+
+ $fd = fopen('http://127.0.0.1:12342/', 'rb', false, $ctx);
+ fseek($output, 0, SEEK_SET);
+ echo stream_get_contents($output);
+
+ http_server_kill($pid);
+}
+
+do_test("First:1\nSecond:2\nContent-type: text/plain");
+do_test("First:1\nSecond:2\nContent-type: text/plain\n");
+do_test("First:1\nSecond:2\nContent-type: text/plain\nThird:");
+do_test("First:1\nContent-type:text/plain\nSecond:2");
+do_test("First:1\nContent-type:text/plain\nSecond:2\n");
+do_test("First:1\nContent-type:text/plain\nSecond:2\nThird:");
+
+?>
+Done
+--EXPECT--
+POST / HTTP/1.0
+Host: 127.0.0.1:12342
+First:1
+Second:2
+Content-type: text/plain
+
+GET /foo HTTP/1.0
+Host: 127.0.0.1:12342
+First:1
+Second:2
+
+
+POST / HTTP/1.0
+Host: 127.0.0.1:12342
+First:1
+Second:2
+Content-type: text/plain
+
+GET /foo HTTP/1.0
+Host: 127.0.0.1:12342
+First:1
+Second:2
+
+
+POST / HTTP/1.0
+Host: 127.0.0.1:12342
+First:1
+Second:2
+Content-type: text/plain
+Third:
+
+GET /foo HTTP/1.0
+Host: 127.0.0.1:12342
+First:1
+Second:2
+Third:
+
+POST / HTTP/1.0
+Host: 127.0.0.1:12342
+First:1
+Content-type:text/plain
+Second:2
+
+GET /foo HTTP/1.0
+Host: 127.0.0.1:12342
+First:1
+Second:2
+
+POST / HTTP/1.0
+Host: 127.0.0.1:12342
+First:1
+Content-type:text/plain
+Second:2
+
+GET /foo HTTP/1.0
+Host: 127.0.0.1:12342
+First:1
+Second:2
+
+POST / HTTP/1.0
+Host: 127.0.0.1:12342
+First:1
+Content-type:text/plain
+Second:2
+Third:
+
+GET /foo HTTP/1.0
+Host: 127.0.0.1:12342
+First:1
+Second:2
+Third:
+
+Done
+
diff --git a/ext/standard/tests/network/fsockopen_basic.phpt b/ext/standard/tests/network/fsockopen_basic.phpt
index 3ec9366331..227762f899 100644
--- a/ext/standard/tests/network/fsockopen_basic.phpt
+++ b/ext/standard/tests/network/fsockopen_basic.phpt
@@ -11,12 +11,18 @@ Test fsockopen() function : basic functionality
echo "*** Testing fsockopen() : basic functionality ***\n";
echo "Open a server socket\n";
-$server = stream_socket_server('tcp://127.0.0.1:31337');
+for ($i=0; $i<100; $i++) {
+ $port = rand(10000, 65000);
+ /* Setup socket server */
+ $server = @stream_socket_server("tcp://127.0.0.1:$port");
+ if ($server) {
+ break;
+ }
+}
// Initialise all required variables
$hostname = 'tcp://127.0.0.1'; // loopback address
-$port = 31337;
$errno = null;
$errstr = null;
$timeout = 1.5;
diff --git a/ext/standard/tests/network/fsockopen_variation1.phpt b/ext/standard/tests/network/fsockopen_variation1.phpt
index 2e5f8d9ada..bb1b0f15c7 100644
--- a/ext/standard/tests/network/fsockopen_variation1.phpt
+++ b/ext/standard/tests/network/fsockopen_variation1.phpt
@@ -4,11 +4,17 @@ testing fsockopen without a protocol string
<?php
echo "Open a server socket\n";
-$server = stream_socket_server('tcp://127.0.0.1:31337');
+for ($i=0; $i<100; $i++) {
+ $port = rand(10000, 65000);
+ /* Setup socket server */
+ $server = @stream_socket_server("tcp://127.0.0.1:$port");
+ if ($server) {
+ break;
+ }
+}
echo "\nCalling fsockopen() without a protocol in the hostname string:\n";
$hostname = '127.0.0.1';
-$port = '31337';
$client = fsockopen($hostname, $port);
var_dump($client);
fclose($client);
diff --git a/ext/standard/tests/network/shutdown.phpt b/ext/standard/tests/network/shutdown.phpt
index f9ab66476f..1ce77fb80e 100644
--- a/ext/standard/tests/network/shutdown.phpt
+++ b/ext/standard/tests/network/shutdown.phpt
@@ -6,14 +6,22 @@ stream_socket_shutdown() test on IPv4 TCP Loopback
?>
--FILE--
<?php
- /* Setup socket server */
- $server = stream_socket_server('tcp://127.0.0.1:31337');
- if (!$server) {
+
+ for ($i=0; $i<100; $i++) {
+ $port = rand(10000, 65000);
+ /* Setup socket server */
+ $server = @stream_socket_server("tcp://127.0.0.1:$port");
+ if ($server) {
+ break;
+ }
+ }
+
+if (!$server) {
die('Unable to create AF_INET socket [server]');
}
/* Connect and send request 1 */
- $client1 = stream_socket_client('tcp://127.0.0.1:31337');
+ $client1 = stream_socket_client("tcp://127.0.0.1:$port");
if (!$client1) {
die('Unable to create AF_INET socket [client]');
}
@@ -22,7 +30,7 @@ stream_socket_shutdown() test on IPv4 TCP Loopback
@fwrite($client1, "Error 1\n");
/* Connect and send request 2 */
- $client2 = stream_socket_client('tcp://127.0.0.1:31337');
+ $client2 = stream_socket_client("tcp://127.0.0.1:$port");
if (!$client2) {
die('Unable to create AF_INET socket [client]');
}
diff --git a/ext/standard/tests/network/socket_get_status_basic.phpt b/ext/standard/tests/network/socket_get_status_basic.phpt
index f72662b166..46215f9838 100644
--- a/ext/standard/tests/network/socket_get_status_basic.phpt
+++ b/ext/standard/tests/network/socket_get_status_basic.phpt
@@ -3,9 +3,17 @@ Testing socket_get_status()
--FILE--
<?php
-$tcp_socket = stream_socket_server('tcp://127.0.0.1:31337');
-var_dump(socket_get_status($tcp_socket));
-fclose($tcp_socket);
+for ($i=0; $i<100; $i++) {
+ $port = rand(10000, 65000);
+ /* Setup socket server */
+ $server = @stream_socket_server("tcp://127.0.0.1:$port");
+ if ($server) {
+ break;
+ }
+}
+
+var_dump(socket_get_status($server));
+fclose($server);
?>
--EXPECTF--
diff --git a/ext/standard/tests/network/tcp4loop.phpt b/ext/standard/tests/network/tcp4loop.phpt
index afd955918e..a163cd9b35 100644
--- a/ext/standard/tests/network/tcp4loop.phpt
+++ b/ext/standard/tests/network/tcp4loop.phpt
@@ -2,14 +2,21 @@
Streams Based IPv4 TCP Loopback test
--FILE--
<?php # vim:ft=php:
- /* Setup socket server */
- $server = stream_socket_server('tcp://127.0.0.1:31337');
+
+ for ($i=0; $i<100; $i++) {
+ $port = rand(10000, 65000);
+ /* Setup socket server */
+ $server = @stream_socket_server("tcp://127.0.0.1:$port");
+ if ($server) {
+ break;
+ }
+ }
if (!$server) {
die('Unable to create AF_INET socket [server]');
}
/* Connect to it */
- $client = stream_socket_client('tcp://127.0.0.1:31337');
+ $client = stream_socket_client("tcp://127.0.0.1:$port");
if (!$client) {
die('Unable to create AF_INET socket [client]');
}
diff --git a/ext/standard/tests/network/tcp6loop.phpt b/ext/standard/tests/network/tcp6loop.phpt
index 3f28cd4437..30b1d7bcd2 100644
--- a/ext/standard/tests/network/tcp6loop.phpt
+++ b/ext/standard/tests/network/tcp6loop.phpt
@@ -10,14 +10,22 @@ Streams Based IPv6 TCP Loopback test
?>
--FILE--
<?php
- /* Setup socket server */
- $server = stream_socket_server('tcp://[::1]:31337');
+
+ for ($i=0; $i<100; $i++) {
+ $port = rand(10000, 65000);
+ /* Setup socket server */
+ $server = @stream_socket_server("tcp://[::1]:$port");
+ if ($server) {
+ break;
+ }
+ }
+
if (!$server) {
die('Unable to create AF_INET6 socket [server]');
}
/* Connect to it */
- $client = stream_socket_client('tcp://[::1]:31337');
+ $client = stream_socket_client("tcp://[::1]:$port");
if (!$client) {
die('Unable to create AF_INET6 socket [client]');
}
diff --git a/ext/standard/tests/network/udp6loop.phpt b/ext/standard/tests/network/udp6loop.phpt
index 5fcf7a7f46..8241d80bac 100644
--- a/ext/standard/tests/network/udp6loop.phpt
+++ b/ext/standard/tests/network/udp6loop.phpt
@@ -16,14 +16,22 @@ Streams Based IPv6 UDP Loopback test
?>
--FILE--
<?php
- /* Setup socket server */
- $server = stream_socket_server('udp://[::1]:31337', $errno, $errstr, STREAM_SERVER_BIND);
+
+ for ($i=0; $i<100; $i++) {
+ $port = rand(10000, 65000);
+ /* Setup socket server */
+ $server = @stream_socket_server("udp://[::1]:$port", $errno, $errstr, STREAM_SERVER_BIND);
+ if ($server) {
+ break;
+ }
+ }
+
if (!$server) {
die('Unable to create AF_INET6 socket [server]');
}
/* Connect to it */
- $client = stream_socket_client('udp://[::1]:31337');
+ $client = stream_socket_client("udp://[::1]:$port");
if (!$client) {
die('Unable to create AF_INET6 socket [client]');
}
diff --git a/ext/standard/tests/serialize/bug64146.phpt b/ext/standard/tests/serialize/bug64146.phpt
new file mode 100644
index 0000000000..18ae78d0ce
--- /dev/null
+++ b/ext/standard/tests/serialize/bug64146.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Bug #64146 (serialize incorrectly saving objects when they are cloned)
+--FILE--
+<?php
+
+echo "Test\n";
+
+class A
+{
+ public $a = array();
+
+ public function __construct()
+ {
+ $this->a[] = new B(1);
+ $this->a[] = new B(2);
+ }
+}
+
+class B implements Serializable
+{
+ public $b;
+
+ public function __construct($c)
+ {
+ $this->b = new C($c);
+ }
+
+ public function serialize()
+ {
+ return serialize(clone $this->b);
+ }
+
+ public function unserialize($data)
+ {
+ $this->b = unserialize($data);
+ }
+}
+
+class C
+{
+ public $c;
+
+ public function __construct($c)
+ {
+ $this->c = $c;
+ }
+}
+
+$a = unserialize(serialize(new A()));
+
+print $a->a[0]->b->c . "\n";
+print $a->a[1]->b->c . "\n";
+
+?>
+Done
+--EXPECT--
+Test
+1
+2
+Done
diff --git a/ext/standard/tests/serialize/bug65806.phpt b/ext/standard/tests/serialize/bug65806.phpt
new file mode 100644
index 0000000000..19fab95c64
--- /dev/null
+++ b/ext/standard/tests/serialize/bug65806.phpt
@@ -0,0 +1,83 @@
+--TEST--
+Bug #65806 (unserialize fails with object which is referenced multiple times)
+--FILE--
+<?php
+class myObjA {}
+class myObjB {
+ public $attrA;
+ public $attrB;
+}
+class myObjC {
+ public $attrC;
+ public $attrD;
+}
+class myList {
+ private $_serialized;
+ private $_obj;
+
+ public function __construct($obj)
+ {
+ $this->_obj = $obj;
+ $this->_serialized = serialize($this->_obj);
+ }
+ public function get()
+ {
+ return $this->_obj;
+ }
+ public function __sleep()
+ {
+ $this->_serialized = serialize($this->_obj);
+ return array(
+ "\0" . __CLASS__ . "\0_serialized",
+ );
+ }
+ public function __wakeup()
+ {
+ $this->_obj = unserialize($this->_serialized);
+ }
+}
+
+echo "SCRIPT START" . PHP_EOL;
+
+$objA = new myObjA();
+$objB = new myObjB();
+$objC = new myObjC();
+
+$objB->attrA = new ArrayIterator();
+$objB->attrB = $objA;
+
+$objC->attrC = $objB;
+$objC->attrD = $objA;
+
+$list = new myList($objC);
+
+echo 'check ' . check($list->get()) . PHP_EOL;
+
+echo "start serialize/unserialize" . PHP_EOL;
+$newList = unserialize(serialize($list));
+echo "finish serialize/unserialize" . PHP_EOL;
+
+//after unserialize the property myObjC::attrD is null instead of expected object
+echo 'check ' . check($newList->get()) . PHP_EOL;
+
+echo "SCRIPT END" . PHP_EOL ;
+
+function check(myObjC $obj) {
+
+ if (!is_object($obj->attrC)) {
+ return 'failed (myObjC::attrC => ' . var_export($obj->attrC, true) . ')';
+ }
+ if (!is_object($obj->attrD)) {
+ return 'failed (myObjC::attrD => ' . var_export($obj->attrD, true) . ')';
+ }
+ return 'successful';
+}
+?>
+--EXPECT--
+SCRIPT START
+check successful
+start serialize/unserialize
+finish serialize/unserialize
+check successful
+SCRIPT END
+
diff --git a/ext/standard/tests/streams/stream_set_timeout_error.phpt b/ext/standard/tests/streams/stream_set_timeout_error.phpt
index c1d4d1406f..814257dd93 100644
--- a/ext/standard/tests/streams/stream_set_timeout_error.phpt
+++ b/ext/standard/tests/streams/stream_set_timeout_error.phpt
@@ -13,10 +13,16 @@ echo "*** Testing stream_set_timeout() : error conditions ***\n";
//Test stream_set_timeout with one more than the expected number of arguments
echo "\n-- Testing stream_set_timeout() function with more than expected no. of arguments --\n";
-/* Setup socket server */
-$server = stream_socket_server('tcp://127.0.0.1:31337');
+for ($i=0; $i<100; $i++) {
+ $port = rand(10000, 65000);
+ /* Setup socket server */
+ $server = @stream_socket_server("tcp://127.0.0.1:$port");
+ if ($server) {
+ break;
+ }
+}
/* Connect to it */
-$client = fsockopen('tcp://127.0.0.1:31337');
+$client = fsockopen("tcp://127.0.0.1:$port");
$seconds = 10;
$microseconds = 10;
diff --git a/ext/standard/tests/strings/vfprintf_basic1.phpt b/ext/standard/tests/strings/vfprintf_basic1.phpt
index 3129d4fcca..84d8ad101d 100644
--- a/ext/standard/tests/strings/vfprintf_basic1.phpt
+++ b/ext/standard/tests/strings/vfprintf_basic1.phpt
@@ -20,7 +20,7 @@ $arg3 = array("one","two","three");
/* creating dumping file */
-$data_file = dirname(__FILE__) . '/dump.txt';
+$data_file = dirname(__FILE__) . '/vfprintf_basic1.txt';
if (!($fp = fopen($data_file, 'wt')))
return;
diff --git a/ext/standard/tests/strings/vfprintf_basic2.phpt b/ext/standard/tests/strings/vfprintf_basic2.phpt
index b758caeecc..36d6577bbd 100644
--- a/ext/standard/tests/strings/vfprintf_basic2.phpt
+++ b/ext/standard/tests/strings/vfprintf_basic2.phpt
@@ -23,7 +23,7 @@ $arg2 = array(111,222);
$arg3 = array(111,222,333);
/* creating dumping file */
-$data_file = dirname(__FILE__) . '/dump.txt';
+$data_file = dirname(__FILE__) . '/vfprintf_basic2.txt';
if (!($fp = fopen($data_file, 'wt')))
return;
diff --git a/ext/standard/tests/strings/vfprintf_basic3.phpt b/ext/standard/tests/strings/vfprintf_basic3.phpt
index b675b3db88..565079dc60 100644
--- a/ext/standard/tests/strings/vfprintf_basic3.phpt
+++ b/ext/standard/tests/strings/vfprintf_basic3.phpt
@@ -24,7 +24,7 @@ $arg2 = array(11.11,22.22);
$arg3 = array(11.11,22.22,33.33);
/* creating dumping file */
-$data_file = dirname(__FILE__) . '/dump.txt';
+$data_file = dirname(__FILE__) . '/vfprintf_basic3.txt';
if (!($fp = fopen($data_file, 'wt')))
return;
diff --git a/ext/standard/tests/strings/vfprintf_basic4.phpt b/ext/standard/tests/strings/vfprintf_basic4.phpt
index 1595f034bb..e653f63306 100644
--- a/ext/standard/tests/strings/vfprintf_basic4.phpt
+++ b/ext/standard/tests/strings/vfprintf_basic4.phpt
@@ -19,7 +19,7 @@ $arg2 = array(TRUE,FALSE);
$arg3 = array(TRUE,FALSE,TRUE);
/* creating dumping file */
-$data_file = dirname(__FILE__) . '/dump.txt';
+$data_file = dirname(__FILE__) . '/vfprintf_basic4.txt';
if (!($fp = fopen($data_file, 'wt')))
return;
diff --git a/ext/standard/tests/strings/vfprintf_basic5.phpt b/ext/standard/tests/strings/vfprintf_basic5.phpt
index a080c9e6c4..84fbe33f1c 100644
--- a/ext/standard/tests/strings/vfprintf_basic5.phpt
+++ b/ext/standard/tests/strings/vfprintf_basic5.phpt
@@ -19,7 +19,7 @@ $arg2 = array(65,66);
$arg3 = array(65,66,67);
/* creating dumping file */
-$data_file = dirname(__FILE__) . '/dump.txt';
+$data_file = dirname(__FILE__) . '/vfprintf_basic5.txt';
if (!($fp = fopen($data_file, 'wt')))
return;
diff --git a/ext/standard/tests/strings/vfprintf_basic6.phpt b/ext/standard/tests/strings/vfprintf_basic6.phpt
index ed88a2832e..6c1bbf02a2 100644
--- a/ext/standard/tests/strings/vfprintf_basic6.phpt
+++ b/ext/standard/tests/strings/vfprintf_basic6.phpt
@@ -20,7 +20,7 @@ $arg2 = array(1000,2000);
$arg3 = array(1000,2000,3000);
/* creating dumping file */
-$data_file = dirname(__FILE__) . '/dump.txt';
+$data_file = dirname(__FILE__) . '/vfprintf_basic6.txt';
if (!($fp = fopen($data_file, 'wt')))
return;
diff --git a/ext/standard/tests/strings/vfprintf_basic7.phpt b/ext/standard/tests/strings/vfprintf_basic7.phpt
index 45544a39ec..f4c11edc15 100644
--- a/ext/standard/tests/strings/vfprintf_basic7.phpt
+++ b/ext/standard/tests/strings/vfprintf_basic7.phpt
@@ -23,7 +23,7 @@ $arg2 = array(-1111,-1234567);
$arg3 = array(-1111,-1234567,-2345432);
/* creating dumping file */
-$data_file = dirname(__FILE__) . '/dump.txt';
+$data_file = dirname(__FILE__) . '/vfprintf_basic7.txt';
if (!($fp = fopen($data_file, 'wt')))
return;
diff --git a/ext/standard/tests/strings/vfprintf_basic7_64bit.phpt b/ext/standard/tests/strings/vfprintf_basic7_64bit.phpt
index 77fae2c09b..14cd31ddd2 100644
--- a/ext/standard/tests/strings/vfprintf_basic7_64bit.phpt
+++ b/ext/standard/tests/strings/vfprintf_basic7_64bit.phpt
@@ -23,7 +23,7 @@ $arg2 = array(-1111,-1234567);
$arg3 = array(-1111,-1234567,-2345432);
/* creating dumping file */
-$data_file = dirname(__FILE__) . '/dump.txt';
+$data_file = dirname(__FILE__) . '/vfprintf_basic7_64bit.txt';
if (!($fp = fopen($data_file, 'wt')))
return;
diff --git a/ext/standard/tests/strings/vfprintf_basic8.phpt b/ext/standard/tests/strings/vfprintf_basic8.phpt
index 6fe2151542..bf7eb96ad5 100644
--- a/ext/standard/tests/strings/vfprintf_basic8.phpt
+++ b/ext/standard/tests/strings/vfprintf_basic8.phpt
@@ -19,7 +19,7 @@ $arg2 = array(021,0347);
$arg3 = array(021,0347,05678);
/* creating dumping file */
-$data_file = dirname(__FILE__) . '/dump.txt';
+$data_file = dirname(__FILE__) . '/vfprintf_basic8.txt';
if (!($fp = fopen($data_file, 'wt')))
return;
diff --git a/ext/standard/tests/strings/vfprintf_basic9.phpt b/ext/standard/tests/strings/vfprintf_basic9.phpt
index 8294c8482f..080e52bb64 100644
--- a/ext/standard/tests/strings/vfprintf_basic9.phpt
+++ b/ext/standard/tests/strings/vfprintf_basic9.phpt
@@ -24,7 +24,7 @@ $arg2 = array(11,132);
$arg3 = array(11,132,177);
/* creating dumping file */
-$data_file = dirname(__FILE__) . '/dump.txt';
+$data_file = dirname(__FILE__) . '/vfprintf_basic9.txt';
if (!($fp = fopen($data_file, 'wt')))
return;
diff --git a/ext/standard/tests/strings/vfprintf_variation10.phpt b/ext/standard/tests/strings/vfprintf_variation10.phpt
index e2c066eff8..bb00e70389 100644
--- a/ext/standard/tests/strings/vfprintf_variation10.phpt
+++ b/ext/standard/tests/strings/vfprintf_variation10.phpt
Binary files differ
diff --git a/ext/standard/tests/strings/vfprintf_variation11.phpt b/ext/standard/tests/strings/vfprintf_variation11.phpt
index 45f1f61fa6..4bc38851d2 100644
--- a/ext/standard/tests/strings/vfprintf_variation11.phpt
+++ b/ext/standard/tests/strings/vfprintf_variation11.phpt
@@ -45,7 +45,7 @@ $args_array = array(
);
/* creating dumping file */
-$data_file = dirname(__FILE__) . '/dump.txt';
+$data_file = dirname(__FILE__) . '/vfprintf_variation11.txt';
if (!($fp = fopen($data_file, 'wt')))
return;
diff --git a/ext/standard/tests/strings/vfprintf_variation11_64bit.phpt b/ext/standard/tests/strings/vfprintf_variation11_64bit.phpt
index d6549846b5..a55297999e 100644
--- a/ext/standard/tests/strings/vfprintf_variation11_64bit.phpt
+++ b/ext/standard/tests/strings/vfprintf_variation11_64bit.phpt
@@ -45,7 +45,7 @@ $args_array = array(
);
/* creating dumping file */
-$data_file = dirname(__FILE__) . '/dump.txt';
+$data_file = dirname(__FILE__) . '/vfprintf_variation11_64bit.txt';
if (!($fp = fopen($data_file, 'wt')))
return;
diff --git a/ext/standard/tests/strings/vfprintf_variation12.phpt b/ext/standard/tests/strings/vfprintf_variation12.phpt
index e95fd5bb7f..f0fa354ea6 100644
--- a/ext/standard/tests/strings/vfprintf_variation12.phpt
+++ b/ext/standard/tests/strings/vfprintf_variation12.phpt
@@ -68,7 +68,7 @@ $args_array = array(
);
/* creating dumping file */
-$data_file = dirname(__FILE__) . '/dump.txt';
+$data_file = dirname(__FILE__) . '/vfprintf_variation12.txt';
if (!($fp = fopen($data_file, 'wt')))
return;
diff --git a/ext/standard/tests/strings/vfprintf_variation12_64bit.phpt b/ext/standard/tests/strings/vfprintf_variation12_64bit.phpt
index a1e57bc42c..fe786d3f49 100644
--- a/ext/standard/tests/strings/vfprintf_variation12_64bit.phpt
+++ b/ext/standard/tests/strings/vfprintf_variation12_64bit.phpt
@@ -68,7 +68,7 @@ $args_array = array(
);
/* creating dumping file */
-$data_file = dirname(__FILE__) . '/dump.txt';
+$data_file = dirname(__FILE__) . '/vfprintf_variation12_64bit.txt';
if (!($fp = fopen($data_file, 'wt')))
return;
diff --git a/ext/standard/tests/strings/vfprintf_variation13.phpt b/ext/standard/tests/strings/vfprintf_variation13.phpt
index 245feb5a23..fd34242424 100644
--- a/ext/standard/tests/strings/vfprintf_variation13.phpt
+++ b/ext/standard/tests/strings/vfprintf_variation13.phpt
@@ -45,7 +45,7 @@ $args_array = array(
);
/* creating dumping file */
-$data_file = dirname(__FILE__) . '/dump.txt';
+$data_file = dirname(__FILE__) . '/vfprintf_variation13.txt';
if (!($fp = fopen($data_file, 'wt')))
return;
diff --git a/ext/standard/tests/strings/vfprintf_variation13_64bit.phpt b/ext/standard/tests/strings/vfprintf_variation13_64bit.phpt
index bf6fcb5ec0..68baed8537 100644
--- a/ext/standard/tests/strings/vfprintf_variation13_64bit.phpt
+++ b/ext/standard/tests/strings/vfprintf_variation13_64bit.phpt
@@ -45,7 +45,7 @@ $args_array = array(
);
/* creating dumping file */
-$data_file = dirname(__FILE__) . '/dump.txt';
+$data_file = dirname(__FILE__) . '/vfprintf_variation13_64bit.txt';
if (!($fp = fopen($data_file, 'wt')))
return;
diff --git a/ext/standard/tests/strings/vfprintf_variation14.phpt b/ext/standard/tests/strings/vfprintf_variation14.phpt
index c714d89758..0173a27fb7 100644
--- a/ext/standard/tests/strings/vfprintf_variation14.phpt
+++ b/ext/standard/tests/strings/vfprintf_variation14.phpt
@@ -68,7 +68,7 @@ $args_array = array(
);
/* creating dumping file */
-$data_file = dirname(__FILE__) . '/dump.txt';
+$data_file = dirname(__FILE__) . '/vfprintf_variation14.txt';
if (!($fp = fopen($data_file, 'wt')))
return;
diff --git a/ext/standard/tests/strings/vfprintf_variation14_64bit.phpt b/ext/standard/tests/strings/vfprintf_variation14_64bit.phpt
index 930ee3d03d..fb34befd3c 100644
--- a/ext/standard/tests/strings/vfprintf_variation14_64bit.phpt
+++ b/ext/standard/tests/strings/vfprintf_variation14_64bit.phpt
@@ -68,7 +68,7 @@ $args_array = array(
);
/* creating dumping file */
-$data_file = dirname(__FILE__) . '/dump.txt';
+$data_file = dirname(__FILE__) . '/vfprintf_variation14_64bit.txt';
if (!($fp = fopen($data_file, 'wt')))
return;
diff --git a/ext/standard/tests/strings/vfprintf_variation15.phpt b/ext/standard/tests/strings/vfprintf_variation15.phpt
index 95667b5a81..19e319a557 100644
--- a/ext/standard/tests/strings/vfprintf_variation15.phpt
+++ b/ext/standard/tests/strings/vfprintf_variation15.phpt
@@ -38,7 +38,7 @@ $args_array = array(
);
/* creating dumping file */
-$data_file = dirname(__FILE__) . '/dump.txt';
+$data_file = dirname(__FILE__) . '/vfprintf_variation15.txt';
if (!($fp = fopen($data_file, 'wt')))
return;
diff --git a/ext/standard/tests/strings/vfprintf_variation15_64bit.phpt b/ext/standard/tests/strings/vfprintf_variation15_64bit.phpt
index d2e331c2d3..7bb0d150e0 100644
--- a/ext/standard/tests/strings/vfprintf_variation15_64bit.phpt
+++ b/ext/standard/tests/strings/vfprintf_variation15_64bit.phpt
@@ -38,7 +38,7 @@ $args_array = array(
);
/* creating dumping file */
-$data_file = dirname(__FILE__) . '/dump.txt';
+$data_file = dirname(__FILE__) . '/vfprintf_variation15_64bit.txt';
if (!($fp = fopen($data_file, 'wt')))
return;
diff --git a/ext/standard/tests/strings/vfprintf_variation16.phpt b/ext/standard/tests/strings/vfprintf_variation16.phpt
index 21630521b8..4995ab02a4 100644
--- a/ext/standard/tests/strings/vfprintf_variation16.phpt
+++ b/ext/standard/tests/strings/vfprintf_variation16.phpt
@@ -61,7 +61,7 @@ $args_array = array(
);
/* creating dumping file */
-$data_file = dirname(__FILE__) . '/dump.txt';
+$data_file = dirname(__FILE__) . '/vfprintf_variation16.txt';
if (!($fp = fopen($data_file, 'wt')))
return;
diff --git a/ext/standard/tests/strings/vfprintf_variation16_64bit.phpt b/ext/standard/tests/strings/vfprintf_variation16_64bit.phpt
index 381e67c339..16d0624018 100644
--- a/ext/standard/tests/strings/vfprintf_variation16_64bit.phpt
+++ b/ext/standard/tests/strings/vfprintf_variation16_64bit.phpt
@@ -61,7 +61,7 @@ $args_array = array(
);
/* creating dumping file */
-$data_file = dirname(__FILE__) . '/dump.txt';
+$data_file = dirname(__FILE__) . '/vfprintf_variation16_64bit.txt';
if (!($fp = fopen($data_file, 'wt')))
return;
diff --git a/ext/standard/tests/strings/vfprintf_variation17.phpt b/ext/standard/tests/strings/vfprintf_variation17.phpt
index 871ae98d85..6c17b801f6 100644
--- a/ext/standard/tests/strings/vfprintf_variation17.phpt
+++ b/ext/standard/tests/strings/vfprintf_variation17.phpt
@@ -34,7 +34,7 @@ $args_array = array(
);
/* creating dumping file */
-$data_file = dirname(__FILE__) . '/dump.txt';
+$data_file = dirname(__FILE__) . '/vfprintf_variation17.txt';
if (!($fp = fopen($data_file, 'wt')))
return;
diff --git a/ext/standard/tests/strings/vfprintf_variation18.phpt b/ext/standard/tests/strings/vfprintf_variation18.phpt
index 76168621c3..5467753dc0 100644
--- a/ext/standard/tests/strings/vfprintf_variation18.phpt
+++ b/ext/standard/tests/strings/vfprintf_variation18.phpt
@@ -57,7 +57,7 @@ $args_array = array(
);
/* creating dumping file */
-$data_file = dirname(__FILE__) . '/dump.txt';
+$data_file = dirname(__FILE__) . '/vfprintf_variation18.txt';
if (!($fp = fopen($data_file, 'wt')))
return;
diff --git a/ext/standard/tests/strings/vfprintf_variation19.phpt b/ext/standard/tests/strings/vfprintf_variation19.phpt
index 7ee01a97e1..26c21e1e3c 100644
--- a/ext/standard/tests/strings/vfprintf_variation19.phpt
+++ b/ext/standard/tests/strings/vfprintf_variation19.phpt
@@ -46,7 +46,7 @@ $args_array = array(
/* creating dumping file */
-$data_file = dirname(__FILE__) . '/dump.txt';
+$data_file = dirname(__FILE__) . '/vfprintf_variation19.txt';
if (!($fp = fopen($data_file, 'wt')))
return;
diff --git a/ext/standard/tests/strings/vfprintf_variation19_64bit.phpt b/ext/standard/tests/strings/vfprintf_variation19_64bit.phpt
index 58810a811a..a56357cfdf 100644
--- a/ext/standard/tests/strings/vfprintf_variation19_64bit.phpt
+++ b/ext/standard/tests/strings/vfprintf_variation19_64bit.phpt
@@ -46,7 +46,7 @@ $args_array = array(
/* creating dumping file */
-$data_file = dirname(__FILE__) . '/dump.txt';
+$data_file = dirname(__FILE__) . '/vfprintf_variation19_64bit.txt';
if (!($fp = fopen($data_file, 'wt')))
return;
diff --git a/ext/standard/tests/strings/vfprintf_variation20.phpt b/ext/standard/tests/strings/vfprintf_variation20.phpt
index cd348d8350..48fea341ed 100644
--- a/ext/standard/tests/strings/vfprintf_variation20.phpt
+++ b/ext/standard/tests/strings/vfprintf_variation20.phpt
@@ -84,7 +84,7 @@ $values = array(
);
/* creating dumping file */
-$data_file = dirname(__FILE__) . '/dump.txt';
+$data_file = dirname(__FILE__) . '/vfprintf_variation20.txt';
if (!($fp = fopen($data_file, 'wt')))
return;
diff --git a/ext/standard/tests/strings/vfprintf_variation21.phpt b/ext/standard/tests/strings/vfprintf_variation21.phpt
index 4dc9ed5666..09bf703957 100644
--- a/ext/standard/tests/strings/vfprintf_variation21.phpt
+++ b/ext/standard/tests/strings/vfprintf_variation21.phpt
@@ -81,7 +81,7 @@ $values = array(
);
/* creating dumping file */
-$data_file = dirname(__FILE__) . '/dump.txt';
+$data_file = dirname(__FILE__) . '/vfprintf_variation21.txt';
if (!($fp = fopen($data_file, 'wt')))
return;
diff --git a/ext/standard/tests/strings/vfprintf_variation3.phpt b/ext/standard/tests/strings/vfprintf_variation3.phpt
index 02535cefb6..1ae945990c 100644
--- a/ext/standard/tests/strings/vfprintf_variation3.phpt
+++ b/ext/standard/tests/strings/vfprintf_variation3.phpt
@@ -45,7 +45,7 @@ $args_array = array(
// and with int values from the above $args_array array
/* creating dumping file */
-$data_file = dirname(__FILE__) . '/dump.txt';
+$data_file = dirname(__FILE__) . '/vfprintf_variation3.txt';
if (!($fp = fopen($data_file, 'wt')))
return;
diff --git a/ext/standard/tests/strings/vfprintf_variation4.phpt b/ext/standard/tests/strings/vfprintf_variation4.phpt
index 72ca9fe3b9..642f35c46a 100644
--- a/ext/standard/tests/strings/vfprintf_variation4.phpt
+++ b/ext/standard/tests/strings/vfprintf_variation4.phpt
@@ -62,7 +62,7 @@ $args_array = array(
/* creating dumping file */
-$data_file = dirname(__FILE__) . '/dump.txt';
+$data_file = dirname(__FILE__) . '/vfprintf_variation4.txt';
if (!($fp = fopen($data_file, 'wt')))
return;
diff --git a/ext/standard/tests/strings/vfprintf_variation4_64bit.phpt b/ext/standard/tests/strings/vfprintf_variation4_64bit.phpt
index f7038ff76c..6bf814003a 100644
--- a/ext/standard/tests/strings/vfprintf_variation4_64bit.phpt
+++ b/ext/standard/tests/strings/vfprintf_variation4_64bit.phpt
@@ -62,7 +62,7 @@ $args_array = array(
/* creating dumping file */
-$data_file = dirname(__FILE__) . '/dump.txt';
+$data_file = dirname(__FILE__) . '/vfprintf_variation4_64bit.txt';
if (!($fp = fopen($data_file, 'wt')))
return;
diff --git a/ext/standard/tests/strings/vfprintf_variation5.phpt b/ext/standard/tests/strings/vfprintf_variation5.phpt
index 4bac1ebe57..eb3646ca1f 100644
--- a/ext/standard/tests/strings/vfprintf_variation5.phpt
+++ b/ext/standard/tests/strings/vfprintf_variation5.phpt
@@ -42,7 +42,7 @@ $args_array = array(
);
/* creating dumping file */
-$data_file = dirname(__FILE__) . '/dump.txt';
+$data_file = dirname(__FILE__) . '/vfprintf_variation5.txt';
if (!($fp = fopen($data_file, 'wt')))
return;
diff --git a/ext/standard/tests/strings/vfprintf_variation6.phpt b/ext/standard/tests/strings/vfprintf_variation6.phpt
index 6b5425d5cf..b5b82bbc62 100644
--- a/ext/standard/tests/strings/vfprintf_variation6.phpt
+++ b/ext/standard/tests/strings/vfprintf_variation6.phpt
@@ -57,7 +57,7 @@ $args_array = array(
);
/* creating dumping file */
-$data_file = dirname(__FILE__) . '/dump.txt';
+$data_file = dirname(__FILE__) . '/vfprintf_variation6.txt';
if (!($fp = fopen($data_file, 'wt')))
return;
diff --git a/ext/standard/tests/strings/vfprintf_variation7.phpt b/ext/standard/tests/strings/vfprintf_variation7.phpt
index a206fd8691..ee836edc77 100644
--- a/ext/standard/tests/strings/vfprintf_variation7.phpt
+++ b/ext/standard/tests/strings/vfprintf_variation7.phpt
Binary files differ
diff --git a/ext/standard/tests/strings/vfprintf_variation8.phpt b/ext/standard/tests/strings/vfprintf_variation8.phpt
index cda05c4d79..a72e260e09 100644
--- a/ext/standard/tests/strings/vfprintf_variation8.phpt
+++ b/ext/standard/tests/strings/vfprintf_variation8.phpt
@@ -60,7 +60,7 @@ $args_array = array(
);
/* creating dumping file */
-$data_file = dirname(__FILE__) . '/dump.txt';
+$data_file = dirname(__FILE__) . '/vfprintf_variation8.txt';
if (!($fp = fopen($data_file, 'wt')))
return;
diff --git a/ext/standard/tests/strings/vfprintf_variation9.phpt b/ext/standard/tests/strings/vfprintf_variation9.phpt
index d10c8aed50..dd3093c8c9 100644
--- a/ext/standard/tests/strings/vfprintf_variation9.phpt
+++ b/ext/standard/tests/strings/vfprintf_variation9.phpt
Binary files differ
diff --git a/ext/standard/tests/url/parse_url_basic_001.phpt b/ext/standard/tests/url/parse_url_basic_001.phpt
index 1edc32eaba..4c5b0944c6 100644
--- a/ext/standard/tests/url/parse_url_basic_001.phpt
+++ b/ext/standard/tests/url/parse_url_basic_001.phpt
@@ -743,6 +743,13 @@ echo "Done";
string(1) ":"
}
+--> http://::#: array(2) {
+ ["scheme"]=>
+ string(4) "http"
+ ["host"]=>
+ string(1) ":"
+}
+
--> x://::6.5: array(3) {
["scheme"]=>
string(1) "x"
@@ -856,6 +863,8 @@ echo "Done";
--> http://?: bool(false)
+--> http://#: bool(false)
+
--> http://?:: bool(false)
--> http://:?: bool(false)
@@ -863,4 +872,4 @@ echo "Done";
--> http://blah.com:123456: bool(false)
--> http://blah.com:abcdef: bool(false)
-Done \ No newline at end of file
+Done
diff --git a/ext/standard/tests/url/parse_url_basic_002.phpt b/ext/standard/tests/url/parse_url_basic_002.phpt
index 464e977ffc..ed0f08a84f 100644
--- a/ext/standard/tests/url/parse_url_basic_002.phpt
+++ b/ext/standard/tests/url/parse_url_basic_002.phpt
@@ -96,6 +96,7 @@ echo "Done";
--> x:/blah.com : string(1) "x"
--> x://::abc/? : bool(false)
--> http://::? : string(4) "http"
+--> http://::# : string(4) "http"
--> x://::6.5 : string(1) "x"
--> http://?:/ : string(4) "http"
--> http://@?:/ : string(4) "http"
@@ -118,8 +119,9 @@ echo "Done";
--> http://@:/ : bool(false)
--> http://:/ : bool(false)
--> http://? : bool(false)
+--> http://# : bool(false)
--> http://?: : bool(false)
--> http://:? : bool(false)
--> http://blah.com:123456 : bool(false)
--> http://blah.com:abcdef : bool(false)
-Done \ No newline at end of file
+Done
diff --git a/ext/standard/tests/url/parse_url_basic_003.phpt b/ext/standard/tests/url/parse_url_basic_003.phpt
index 57f182bfa3..a2bbfa6482 100644
--- a/ext/standard/tests/url/parse_url_basic_003.phpt
+++ b/ext/standard/tests/url/parse_url_basic_003.phpt
@@ -95,6 +95,7 @@ echo "Done";
--> x:/blah.com : NULL
--> x://::abc/? : bool(false)
--> http://::? : string(1) ":"
+--> http://::# : string(1) ":"
--> x://::6.5 : string(1) ":"
--> http://?:/ : string(1) "?"
--> http://@?:/ : string(1) "?"
@@ -117,8 +118,9 @@ echo "Done";
--> http://@:/ : bool(false)
--> http://:/ : bool(false)
--> http://? : bool(false)
+--> http://# : bool(false)
--> http://?: : bool(false)
--> http://:? : bool(false)
--> http://blah.com:123456 : bool(false)
--> http://blah.com:abcdef : bool(false)
-Done \ No newline at end of file
+Done
diff --git a/ext/standard/tests/url/parse_url_basic_004.phpt b/ext/standard/tests/url/parse_url_basic_004.phpt
index 6abf4ed453..839ebee554 100644
--- a/ext/standard/tests/url/parse_url_basic_004.phpt
+++ b/ext/standard/tests/url/parse_url_basic_004.phpt
@@ -95,6 +95,7 @@ echo "Done";
--> x:/blah.com : NULL
--> x://::abc/? : bool(false)
--> http://::? : NULL
+--> http://::# : NULL
--> x://::6.5 : int(6)
--> http://?:/ : NULL
--> http://@?:/ : NULL
@@ -117,8 +118,9 @@ echo "Done";
--> http://@:/ : bool(false)
--> http://:/ : bool(false)
--> http://? : bool(false)
+--> http://# : bool(false)
--> http://?: : bool(false)
--> http://:? : bool(false)
--> http://blah.com:123456 : bool(false)
--> http://blah.com:abcdef : bool(false)
-Done \ No newline at end of file
+Done
diff --git a/ext/standard/tests/url/parse_url_basic_005.phpt b/ext/standard/tests/url/parse_url_basic_005.phpt
index 3bcc89106d..c113461fe7 100644
--- a/ext/standard/tests/url/parse_url_basic_005.phpt
+++ b/ext/standard/tests/url/parse_url_basic_005.phpt
@@ -95,6 +95,7 @@ echo "Done";
--> x:/blah.com : NULL
--> x://::abc/? : bool(false)
--> http://::? : NULL
+--> http://::# : NULL
--> x://::6.5 : NULL
--> http://?:/ : NULL
--> http://@?:/ : string(0) ""
@@ -117,8 +118,9 @@ echo "Done";
--> http://@:/ : bool(false)
--> http://:/ : bool(false)
--> http://? : bool(false)
+--> http://# : bool(false)
--> http://?: : bool(false)
--> http://:? : bool(false)
--> http://blah.com:123456 : bool(false)
--> http://blah.com:abcdef : bool(false)
-Done \ No newline at end of file
+Done
diff --git a/ext/standard/tests/url/parse_url_basic_006.phpt b/ext/standard/tests/url/parse_url_basic_006.phpt
index 741a424a61..24de1cc233 100644
--- a/ext/standard/tests/url/parse_url_basic_006.phpt
+++ b/ext/standard/tests/url/parse_url_basic_006.phpt
@@ -95,6 +95,7 @@ echo "Done";
--> x:/blah.com : NULL
--> x://::abc/? : bool(false)
--> http://::? : NULL
+--> http://::# : NULL
--> x://::6.5 : NULL
--> http://?:/ : NULL
--> http://@?:/ : NULL
@@ -117,8 +118,9 @@ echo "Done";
--> http://@:/ : bool(false)
--> http://:/ : bool(false)
--> http://? : bool(false)
+--> http://# : bool(false)
--> http://?: : bool(false)
--> http://:? : bool(false)
--> http://blah.com:123456 : bool(false)
--> http://blah.com:abcdef : bool(false)
-Done \ No newline at end of file
+Done
diff --git a/ext/standard/tests/url/parse_url_basic_007.phpt b/ext/standard/tests/url/parse_url_basic_007.phpt
index bf8f98042e..d4006879f4 100644
--- a/ext/standard/tests/url/parse_url_basic_007.phpt
+++ b/ext/standard/tests/url/parse_url_basic_007.phpt
@@ -95,6 +95,7 @@ echo "Done";
--> x:/blah.com : string(9) "/blah.com"
--> x://::abc/? : bool(false)
--> http://::? : NULL
+--> http://::# : NULL
--> x://::6.5 : NULL
--> http://?:/ : string(1) "/"
--> http://@?:/ : string(1) "/"
@@ -117,8 +118,9 @@ echo "Done";
--> http://@:/ : bool(false)
--> http://:/ : bool(false)
--> http://? : bool(false)
+--> http://# : bool(false)
--> http://?: : bool(false)
--> http://:? : bool(false)
--> http://blah.com:123456 : bool(false)
--> http://blah.com:abcdef : bool(false)
-Done \ No newline at end of file
+Done
diff --git a/ext/standard/tests/url/parse_url_basic_008.phpt b/ext/standard/tests/url/parse_url_basic_008.phpt
index a61fd06943..b283829c46 100644
--- a/ext/standard/tests/url/parse_url_basic_008.phpt
+++ b/ext/standard/tests/url/parse_url_basic_008.phpt
@@ -95,6 +95,7 @@ echo "Done";
--> x:/blah.com : NULL
--> x://::abc/? : bool(false)
--> http://::? : NULL
+--> http://::# : NULL
--> x://::6.5 : NULL
--> http://?:/ : NULL
--> http://@?:/ : NULL
@@ -117,8 +118,9 @@ echo "Done";
--> http://@:/ : bool(false)
--> http://:/ : bool(false)
--> http://? : bool(false)
+--> http://# : bool(false)
--> http://?: : bool(false)
--> http://:? : bool(false)
--> http://blah.com:123456 : bool(false)
--> http://blah.com:abcdef : bool(false)
-Done \ No newline at end of file
+Done
diff --git a/ext/standard/tests/url/parse_url_basic_009.phpt b/ext/standard/tests/url/parse_url_basic_009.phpt
index 5302388f6f..a7d70f34da 100644
--- a/ext/standard/tests/url/parse_url_basic_009.phpt
+++ b/ext/standard/tests/url/parse_url_basic_009.phpt
@@ -95,6 +95,7 @@ echo "Done";
--> x:/blah.com : NULL
--> x://::abc/? : bool(false)
--> http://::? : NULL
+--> http://::# : NULL
--> x://::6.5 : NULL
--> http://?:/ : NULL
--> http://@?:/ : NULL
@@ -117,8 +118,9 @@ echo "Done";
--> http://@:/ : bool(false)
--> http://:/ : bool(false)
--> http://? : bool(false)
+--> http://# : bool(false)
--> http://?: : bool(false)
--> http://:? : bool(false)
--> http://blah.com:123456 : bool(false)
--> http://blah.com:abcdef : bool(false)
-Done \ No newline at end of file
+Done
diff --git a/ext/standard/tests/url/urls.inc b/ext/standard/tests/url/urls.inc
index 27521c8520..4192f4a869 100644
--- a/ext/standard/tests/url/urls.inc
+++ b/ext/standard/tests/url/urls.inc
@@ -75,6 +75,7 @@ $urls = array(
'x:/blah.com',
'x://::abc/?',
'http://::?',
+'http://::#',
'x://::6.5',
'http://?:/',
'http://@?:/',
@@ -99,6 +100,7 @@ $urls = array(
'http://@:/',
'http://:/',
'http://?',
+'http://#',
'http://?:',
'http://:?',
'http://blah.com:123456',
@@ -106,4 +108,4 @@ $urls = array(
);
-?> \ No newline at end of file
+?>
diff --git a/ext/standard/var.c b/ext/standard/var.c
index f76a14cfa6..2d0339a6a3 100644
--- a/ext/standard/var.c
+++ b/ext/standard/var.c
@@ -436,7 +436,7 @@ PHPAPI void php_var_export_ex(zval **struc, int level, smart_str *buf TSRMLS_DC)
smart_str_append_long(buf, Z_LVAL_PP(struc));
break;
case IS_DOUBLE:
- tmp_len = spprintf(&tmp_str, 0,"%.*H", (int) EG(precision), Z_DVAL_PP(struc));
+ tmp_len = spprintf(&tmp_str, 0,"%.*H", PG(serialize_precision), Z_DVAL_PP(struc));
smart_str_appendl(buf, tmp_str, tmp_len);
efree(tmp_str);
break;
@@ -549,11 +549,9 @@ static inline int php_add_var_hash(HashTable *var_hash, zval *var, void *var_old
char id[32], *p;
register int len;
- /* relies on "(long)" being a perfect hash function for data pointers,
- * however the actual identity of an object has had to be determined
- * by its object handle since 5.0. */
if ((Z_TYPE_P(var) == IS_OBJECT) && Z_OBJ_HT_P(var)->get_class_entry) {
- p = smart_str_print_long(id + sizeof(id) - 1, (long) Z_OBJ_HANDLE_P(var));
+ p = smart_str_print_long(id + sizeof(id) - 1,
+ (long) zend_objects_get_address(var TSRMLS_CC));
*(--p) = 'O';
len = id + sizeof(id) - 1 - p;
} else {
diff --git a/ext/xmlreader/php_xmlreader.c b/ext/xmlreader/php_xmlreader.c
index f4c2643212..adf282120e 100644
--- a/ext/xmlreader/php_xmlreader.c
+++ b/ext/xmlreader/php_xmlreader.c
@@ -805,7 +805,6 @@ PHP_METHOD(xmlreader, read)
if (intern != NULL && intern->ptr != NULL) {
retval = xmlTextReaderRead(intern->ptr);
if (retval == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "An Error Occurred while reading");
RETURN_FALSE;
} else {
RETURN_BOOL(retval);
@@ -847,7 +846,6 @@ PHP_METHOD(xmlreader, next)
retval = xmlTextReaderNext(intern->ptr);
}
if (retval == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "An Error Occurred while reading");
RETURN_FALSE;
} else {
RETURN_BOOL(retval);
@@ -1320,6 +1318,7 @@ PHP_MINIT_FUNCTION(xmlreader)
xmlreader_object_handlers.read_property = xmlreader_read_property;
xmlreader_object_handlers.write_property = xmlreader_write_property;
xmlreader_object_handlers.get_property_ptr_ptr = xmlreader_get_property_ptr_ptr;
+ xmlreader_object_handlers.clone_obj = NULL;
INIT_CLASS_ENTRY(ce, "XMLReader", xmlreader_functions);
ce.create_object = xmlreader_objects_new;
diff --git a/ext/xmlreader/tests/bug51936.phpt b/ext/xmlreader/tests/bug51936.phpt
new file mode 100644
index 0000000000..4b5f1012e7
--- /dev/null
+++ b/ext/xmlreader/tests/bug51936.phpt
@@ -0,0 +1,22 @@
+--TEST--
+Bug #51936 (Crash with clone XMLReader)
+--SKIPIF--
+<?php
+extension_loaded("xmlreader") or die("skip requires xmlreader");
+?>
+--FILE--
+<?php
+echo "Test\n";
+
+$xmlreader = new XMLReader();
+$xmlreader->xml("<a><b/></a>");
+
+$xmlreader->next();
+$xmlreader2 = clone $xmlreader;
+$xmlreader2->next();
+?>
+Done
+--EXPECTF--
+Test
+
+Fatal error: Trying to clone an uncloneable object of class XMLReader in %s on line %d
diff --git a/ext/xmlreader/tests/bug64230.phpt b/ext/xmlreader/tests/bug64230.phpt
new file mode 100644
index 0000000000..0b070925f3
--- /dev/null
+++ b/ext/xmlreader/tests/bug64230.phpt
@@ -0,0 +1,50 @@
+--TEST--
+Bug #64230 (XMLReader does not suppress errors)
+--SKIPIF--
+<?php
+extension_loaded("xmlreader") or die("skip requires xmlreader");
+?>
+--FILE--
+<?php
+echo "Test\n";
+
+function show_internal_errors() {
+ foreach (libxml_get_errors() as $error) {
+ printf("Internal: %s\n", $error->message);
+ }
+ libxml_clear_errors();
+}
+
+echo "Internal errors TRUE\n";
+libxml_use_internal_errors(true);
+
+$x = new XMLReader;
+$x->xml("<root att/>");
+$x->read();
+
+show_internal_errors();
+
+echo "Internal errors FALSE\n";
+libxml_use_internal_errors(false);
+
+$x = new XMLReader;
+$x->xml("<root att/>");
+$x->read();
+
+show_internal_errors();
+
+?>
+Done
+--EXPECTF--
+Test
+Internal errors TRUE
+Internal: Specification mandate value for attribute att
+
+Internal errors FALSE
+
+Warning: XMLReader::read(): %s: parser error : Specification mandate value for attribute att in %s on line %d
+
+Warning: XMLReader::read(): <root att/> in %s on line %d
+
+Warning: XMLReader::read(): ^ in %s on line %d
+Done
diff --git a/ext/zip/LICENSE_libzip b/ext/zip/LICENSE_libzip
new file mode 100644
index 0000000000..9b2fda07b1
--- /dev/null
+++ b/ext/zip/LICENSE_libzip
@@ -0,0 +1,27 @@
+Copyright (C) 1999-2008 Dieter Baron and Thomas Klausner
+The authors can be contacted at <libzip@nih.at>
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/ext/zip/lib/zip_source_error.c b/ext/zip/lib/zip_source_error.c
index ffb4652d33..70ec8bc5d4 100644
--- a/ext/zip/lib/zip_source_error.c
+++ b/ext/zip/lib/zip_source_error.c
@@ -40,7 +40,7 @@
ZIP_EXTERN(void)
zip_source_error(struct zip_source *src, int *ze, int *se)
{
- int e[2];
+ int e[2] = { 0, 0 };
if (src->src == NULL) {
}
diff --git a/ext/zip/php_zip.c b/ext/zip/php_zip.c
index d7bd5f49e6..1f435bbb00 100644
--- a/ext/zip/php_zip.c
+++ b/ext/zip/php_zip.c
@@ -102,14 +102,14 @@ static char * php_zip_make_relative_path(char *path, int path_len) /* {{{ */
char *path_begin = path;
size_t i;
- if (IS_SLASH(path[0])) {
- return path + 1;
- }
-
if (path_len < 1 || path == NULL) {
return NULL;
}
+ if (IS_SLASH(path[0])) {
+ return path + 1;
+ }
+
i = path_len;
while (1) {
@@ -1856,15 +1856,16 @@ static ZIPARCHIVE_METHOD(addFromString)
/* TODO: fix _zip_replace */
if (cur_idx >= 0) {
if (zip_delete(intern, cur_idx) == -1) {
- RETURN_FALSE;
+ goto fail;
}
}
- if (zip_add(intern, name, zs) == -1) {
- RETURN_FALSE;
- } else {
+ if (zip_add(intern, name, zs) != -1) {
RETURN_TRUE;
}
+fail:
+ zip_source_free(zs);
+ RETURN_FALSE;
}
/* }}} */
diff --git a/ext/zlib/tests/gzeof_variation1.phpt b/ext/zlib/tests/gzeof_variation1.phpt
index 6d1e0401df..77a1eccb66 100644
--- a/ext/zlib/tests/gzeof_variation1.phpt
+++ b/ext/zlib/tests/gzeof_variation1.phpt
@@ -9,7 +9,7 @@ if (!extension_loaded("zlib")) {
--FILE--
<?php
-$filename = dirname(__FILE__)."/temp.txt.gz";
+$filename = dirname(__FILE__)."/gzeof_variation1.txt.gz";
$h = gzopen($filename, 'w');
$str = "Here is the string to be written. ";
$length = 10;
diff --git a/ext/zlib/tests/gzfile_basic.phpt b/ext/zlib/tests/gzfile_basic.phpt
index fd7ba18058..17055646d8 100644
--- a/ext/zlib/tests/gzfile_basic.phpt
+++ b/ext/zlib/tests/gzfile_basic.phpt
@@ -12,7 +12,7 @@ is a very common test
for all languages
EOT;
$dirname = 'gzfile_temp';
-$filename = $dirname.'/plainfile.txt.gz';
+$filename = $dirname.'/gzfile_basic.txt.gz';
mkdir($dirname);
$h = gzopen($filename, 'w');
gzwrite($h, $plaintxt);
diff --git a/ext/zlib/tests/gzfile_basic2.phpt b/ext/zlib/tests/gzfile_basic2.phpt
index 9124d336b0..2bbf315a1a 100644
--- a/ext/zlib/tests/gzfile_basic2.phpt
+++ b/ext/zlib/tests/gzfile_basic2.phpt
@@ -12,7 +12,7 @@ is a very common test
for all languages
EOT;
$dirname = 'gzfile_temp';
-$filename = $dirname.'/plainfile.txt';
+$filename = $dirname.'/gzfile_basic2.txt';
mkdir($dirname);
$h = fopen($filename, 'w');
fwrite($h, $plaintxt);
diff --git a/ext/zlib/tests/gzopen_basic2.phpt b/ext/zlib/tests/gzopen_basic2.phpt
index 5cc02cd182..90766b1817 100644
--- a/ext/zlib/tests/gzopen_basic2.phpt
+++ b/ext/zlib/tests/gzopen_basic2.phpt
@@ -18,7 +18,7 @@ echo "*** Testing gzopen() : basic functionality ***\n";
// Initialise all required variables
-$filename = "temp.txt.gz";
+$filename = "gzopen_basic2.txt.gz";
$modes = array('w', 'w+');
$data = "This was the information that was written";
diff --git a/ext/zlib/tests/gzputs_basic.phpt b/ext/zlib/tests/gzputs_basic.phpt
index 7566e74e72..6456e4b55f 100644
--- a/ext/zlib/tests/gzputs_basic.phpt
+++ b/ext/zlib/tests/gzputs_basic.phpt
@@ -9,7 +9,7 @@ if (!extension_loaded("zlib")) {
--FILE--
<?php
-$filename = dirname(__FILE__)."/temp.txt.gz";
+$filename = dirname(__FILE__)."/gzputs_basic.txt.gz";
$h = gzopen($filename, 'w');
$str = "Here is the string to be written. ";
$length = 10;
diff --git a/ext/zlib/tests/gzread_variation1.phpt b/ext/zlib/tests/gzread_variation1.phpt
index 1f50d77126..966351e736 100644
--- a/ext/zlib/tests/gzread_variation1.phpt
+++ b/ext/zlib/tests/gzread_variation1.phpt
@@ -9,7 +9,7 @@ if (!extension_loaded("zlib")) {
--FILE--
<?php
-$filename = "temp.txt.gz";
+$filename = "gzread_variation1.txt.gz";
$h = gzopen($filename, 'w');
$str = "Here is the string to be written. ";
var_dump(gzread($h, 100));
diff --git a/ext/zlib/tests/gzwrite_basic.phpt b/ext/zlib/tests/gzwrite_basic.phpt
index 0d7521625d..46553eedf1 100644
--- a/ext/zlib/tests/gzwrite_basic.phpt
+++ b/ext/zlib/tests/gzwrite_basic.phpt
@@ -9,7 +9,7 @@ if (!extension_loaded("zlib")) {
--FILE--
<?php
-$filename = "temp.txt.gz";
+$filename = "gzwrite_basic.txt.gz";
$h = gzopen($filename, 'w');
$str = "Here is the string to be written. ";
$length = 10;
diff --git a/ext/zlib/tests/gzwrite_error.phpt b/ext/zlib/tests/gzwrite_error.phpt
index b84a1db0c8..b4ddbb2ec7 100644
--- a/ext/zlib/tests/gzwrite_error.phpt
+++ b/ext/zlib/tests/gzwrite_error.phpt
@@ -8,7 +8,7 @@ if (!extension_loaded("zlib")) {
?>
--FILE--
<?php
-$filename = "temp.txt.gz";
+$filename = "gzwrite_error.txt.gz";
$h = gzopen($filename, 'w');
$str = "Here is the string to be written. ";
$length = 10;
diff --git a/ext/zlib/tests/gzwrite_error2.phpt b/ext/zlib/tests/gzwrite_error2.phpt
index 691275055d..5f2a4197b5 100644
--- a/ext/zlib/tests/gzwrite_error2.phpt
+++ b/ext/zlib/tests/gzwrite_error2.phpt
@@ -9,7 +9,7 @@ if (!extension_loaded("zlib")) {
--FILE--
<?php
-$filename = "temp.txt.gz";
+$filename = "gzwrite_error2.txt.gz";
$h = gzopen($filename, 'w');
$str = "Here is the string to be written. ";
var_dump(gzwrite( $h, $str, 0 ) );
diff --git a/ext/zlib/tests/readgzfile_basic.phpt b/ext/zlib/tests/readgzfile_basic.phpt
index 2d180c1a56..5fd539e21c 100644
--- a/ext/zlib/tests/readgzfile_basic.phpt
+++ b/ext/zlib/tests/readgzfile_basic.phpt
@@ -13,7 +13,7 @@ for all languages
EOT;
$dirname = 'readgzfile_temp';
-$filename = $dirname.'/plainfile.txt.gz';
+$filename = $dirname.'/readgzfile_basic.txt.gz';
mkdir($dirname);
$h = gzopen($filename, 'w');
gzwrite($h, $plaintxt);
diff --git a/ext/zlib/tests/readgzfile_basic2.phpt b/ext/zlib/tests/readgzfile_basic2.phpt
index 99d216a55e..5402f960c2 100644
--- a/ext/zlib/tests/readgzfile_basic2.phpt
+++ b/ext/zlib/tests/readgzfile_basic2.phpt
@@ -13,7 +13,7 @@ for all languages
EOT;
$dirname = 'readgzfile_temp';
-$filename = $dirname.'/plainfile.txt';
+$filename = $dirname.'/readgzfile_basic2.txt';
mkdir($dirname);
$h = fopen($filename, 'w');
fwrite($h, $plaintxt);
diff --git a/ext/zlib/tests/zlib_wrapper_fflush_basic.phpt b/ext/zlib/tests/zlib_wrapper_fflush_basic.phpt
index 74ccc0dabb..de1318cfed 100644
--- a/ext/zlib/tests/zlib_wrapper_fflush_basic.phpt
+++ b/ext/zlib/tests/zlib_wrapper_fflush_basic.phpt
@@ -9,7 +9,7 @@ if (!extension_loaded("zlib")) {
--FILE--
<?php
-$filename = "temp.txt.gz";
+$filename = "zlib_wrapper_fflush_basic.txt.gz";
$h = gzopen($filename, 'w');
$str = "Here is the string to be written.";
$length = 10;
diff --git a/ext/zlib/tests/zlib_wrapper_ftruncate_basic.phpt b/ext/zlib/tests/zlib_wrapper_ftruncate_basic.phpt
index 53b140ac56..348e24505c 100644
--- a/ext/zlib/tests/zlib_wrapper_ftruncate_basic.phpt
+++ b/ext/zlib/tests/zlib_wrapper_ftruncate_basic.phpt
@@ -9,7 +9,7 @@ if (!extension_loaded("zlib")) {
--FILE--
<?php
$f = dirname(__FILE__)."/004.txt.gz";
-$f2 = "temp.txt.gz";
+$f2 = "zlib_wrapper_ftruncate_basic.txt.gz";
copy($f, $f2);
$h = gzopen($f2, "r");
diff --git a/main/php_version.h b/main/php_version.h
index e30528ed51..523bda6743 100644
--- a/main/php_version.h
+++ b/main/php_version.h
@@ -2,7 +2,7 @@
/* edit configure.in to change version number */
#define PHP_MAJOR_VERSION 5
#define PHP_MINOR_VERSION 4
-#define PHP_RELEASE_VERSION 21
+#define PHP_RELEASE_VERSION 23
#define PHP_EXTRA_VERSION "-dev"
-#define PHP_VERSION "5.4.21-dev"
-#define PHP_VERSION_ID 50421
+#define PHP_VERSION "5.4.23-dev"
+#define PHP_VERSION_ID 50423
diff --git a/run-tests.php b/run-tests.php
index 935f821f4e..317f6077a3 100755
--- a/run-tests.php
+++ b/run-tests.php
@@ -455,7 +455,7 @@ $pass_options = '';
$compression = 0;
$output_file = $CUR_DIR . '/php_test_results_' . date('Ymd_Hi') . '.txt';
-if ($compression) {
+if ($compression && in_array("compress.zlib", stream_get_filters())) {
$output_file = 'compress.zlib://' . $output_file . '.gz';
}
@@ -1545,6 +1545,16 @@ TEST $file
}
}
}
+
+ if (!extension_loaded("zlib")
+ && ( array_key_exists("GZIP_POST", $section_text)
+ || array_key_exists("DEFLATE_POST", $section_text))
+ ) {
+ $message = "ext/zlib required";
+ show_result('SKIP', $tested, $tested_file, "reason: $message", $temp_filenames);
+ junit_mark_test_as('SKIP', $shortname, $tested, null, "<![CDATA[\n$message\n]]>");
+ return 'SKIPPED';
+ }
if (@count($section_text['REDIRECTTEST']) == 1) {
$test_files = array();
diff --git a/sapi/cli/php_cli_server.c b/sapi/cli/php_cli_server.c
index 4da55acc6c..aa4b2cd622 100644
--- a/sapi/cli/php_cli_server.c
+++ b/sapi/cli/php_cli_server.c
@@ -1589,6 +1589,7 @@ static int php_cli_server_client_read_request_on_body(php_http_parser *parser, c
}
client->request.content_len = 0;
}
+ client->request.content = perealloc(client->request.content, client->request.content_len + length, 1);
memmove(client->request.content + client->request.content_len, at, length);
client->request.content_len += length;
return 0;
diff --git a/sapi/fpm/fpm/fastcgi.c b/sapi/fpm/fpm/fastcgi.c
index cf3f098c53..10fd9efa95 100644
--- a/sapi/fpm/fpm/fastcgi.c
+++ b/sapi/fpm/fpm/fastcgi.c
@@ -426,8 +426,9 @@ static int fcgi_get_params(fcgi_request *req, unsigned char *p, unsigned char *e
char buf[128];
char *tmp = buf;
size_t buf_size = sizeof(buf);
- int name_len, val_len;
- uint eff_name_len;
+ int name_len = 0;
+ int val_len = 0;
+ uint eff_name_len = 0;
char *s;
int ret = 1;
size_t bytes_consumed;
diff --git a/sapi/fpm/fpm/fpm_children.c b/sapi/fpm/fpm/fpm_children.c
index 84a9474332..45cc075b42 100644
--- a/sapi/fpm/fpm/fpm_children.c
+++ b/sapi/fpm/fpm/fpm_children.c
@@ -251,7 +251,7 @@ void fpm_children_bury() /* {{{ */
}
zlog(severity, "[pool %s] child %d exited %s after %ld.%06d seconds from start", child->wp->config->name, (int) pid, buf, tv2.tv_sec, (int) tv2.tv_usec);
} else {
- zlog(ZLOG_DEBUG, "[pool %s] child %d has been killed by the process managment after %ld.%06d seconds from start", child->wp->config->name, (int) pid, tv2.tv_sec, (int) tv2.tv_usec);
+ zlog(ZLOG_DEBUG, "[pool %s] child %d has been killed by the process management after %ld.%06d seconds from start", child->wp->config->name, (int) pid, tv2.tv_sec, (int) tv2.tv_usec);
}
fpm_child_close(child, 1 /* in event_loop */);
diff --git a/sapi/fpm/fpm/fpm_sockets.c b/sapi/fpm/fpm/fpm_sockets.c
index 145b2550c3..e056565ea4 100644
--- a/sapi/fpm/fpm/fpm_sockets.c
+++ b/sapi/fpm/fpm/fpm_sockets.c
@@ -487,6 +487,7 @@ int fpm_socket_unix_test_connect(struct sockaddr_un *sock, size_t socklen) /* {{
}
if (connect(fd, (struct sockaddr *)sock, socklen) == -1) {
+ close(fd);
return -1;
}
diff --git a/sapi/fpm/php-fpm.8.in b/sapi/fpm/php-fpm.8.in
index a4e7e74e20..b02aa25ba7 100644
--- a/sapi/fpm/php-fpm.8.in
+++ b/sapi/fpm/php-fpm.8.in
@@ -96,7 +96,7 @@ Specify alternative path to FastCGI process manager configuration file (the defa
.PD 1
.B \-t
Test FPM configuration file and exit
-If called twice (-tt), the configuration is dumped before exiting.
+If called twice (\-tt), the configuration is dumped before exiting.
.TP
.PD 0
.B \-\-daemonize
diff --git a/tests/lang/bug24640.phpt b/tests/lang/bug24640.phpt
index 919b38e29e..e41d0201b7 100644
--- a/tests/lang/bug24640.phpt
+++ b/tests/lang/bug24640.phpt
@@ -36,22 +36,22 @@ test(1.7e-1000);
===DONE===
<?php exit(0); ?>
--EXPECTF--
-1.7E+300
+1.7000000000000001E+300
float(1.7E+300)
1.7E+300
1.7E+300
------
-1.7E-300
+1.7000000000000001E-300
float(1.7E-300)
1.7E-300
1.7E-300
------
-1.7E+79
+1.7000000000000002E+79
float(1.7E+79)
1.7E+79
1.7E+79
------
-1.7E-79
+1.6999999999999999E-79
float(1.7E-79)
1.7E-79
1.7E-79
@@ -71,7 +71,7 @@ float(1.7E+81)
1.7E+81
1.7E+81
------
-1.7E-81
+1.6999999999999999E-81
float(1.7E-81)
1.7E-81
1.7E-81
@@ -81,7 +81,7 @@ float(I%s)
I%s
I%s
------
-1.69998107421E-319
+1.6999810742105611E-319
float(1.69998107421E-319)
1.69998107421E-319
1.69998107421E-319
@@ -91,7 +91,7 @@ float(I%s)
I%s
I%s
------
-1.70007988734E-320
+1.7000798873397294E-320
float(1.70007988734E-320)
1.70007988734E-320
1.70007988734E-320
@@ -101,7 +101,7 @@ float(I%s)
I%s
I%s
------
-1.69958582169E-321
+1.6995858216938881E-321
float(1.69958582169E-321)
1.69958582169E-321
1.69958582169E-321
diff --git a/win32/readdir.c b/win32/readdir.c
index 9525fc0d6b..0edd5764d4 100644
--- a/win32/readdir.c
+++ b/win32/readdir.c
@@ -45,6 +45,7 @@ DIR *opendir(const char *dir)
dp = (DIR *) malloc(sizeof(DIR));
if (dp == NULL) {
+ free(filespec);
return NULL;
}
dp->offset = 0;