From fd01b47b8e07ebfbd39627c4a8926d40c48f93d3 Mon Sep 17 00:00:00 2001 From: Ferenc Kovacs Date: Mon, 30 Mar 2015 01:08:39 +0200 Subject: [PATCH 001/856] Implemented FR #55716 - Add an option to pass a custom stream context --- ext/standard/basic_functions.c | 1 + .../tests/url/get_headers_error_001.phpt | 7 +++-- .../tests/url/get_headers_error_003.phpt | 31 +++++++++++++++++++ ext/standard/url.c | 10 +++--- 4 files changed, 42 insertions(+), 7 deletions(-) create mode 100644 ext/standard/tests/url/get_headers_error_003.phpt diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index 7bf51eb5d5b..d270459b7b2 100644 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -2583,6 +2583,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_get_headers, 0, 0, 1) ZEND_ARG_INFO(0, url) ZEND_ARG_INFO(0, format) + ZEND_ARG_INFO(0, context) ZEND_END_ARG_INFO() /* }}} */ /* {{{ user_filters.c */ diff --git a/ext/standard/tests/url/get_headers_error_001.phpt b/ext/standard/tests/url/get_headers_error_001.phpt index 8d5fd11f60e..270c8350c09 100644 --- a/ext/standard/tests/url/get_headers_error_001.phpt +++ b/ext/standard/tests/url/get_headers_error_001.phpt @@ -5,7 +5,7 @@ June Henriksen #PHPTestFest2009 Norway 2009-06-09 \o/ --FILE-- @@ -36,7 +37,7 @@ NULL -- Testing get_headers() function with more than expected no. of arguments -- -Warning: get_headers() expects at most 2 parameters, 3 given in %s on line 19 +Warning: get_headers() expects at most 3 parameters, 4 given in %s on line 20 NULL Done diff --git a/ext/standard/tests/url/get_headers_error_003.phpt b/ext/standard/tests/url/get_headers_error_003.phpt new file mode 100644 index 00000000000..6c8878513c4 --- /dev/null +++ b/ext/standard/tests/url/get_headers_error_003.phpt @@ -0,0 +1,31 @@ +--TEST-- +Test get_headers() function : test with context +--FILE-- + array( + 'method' => 'HEAD' + ) +); + +$context = stream_context_create($opts); +$headers = get_headers("http://".PHP_CLI_SERVER_ADDRESS, 1, $context); +echo $headers["X-Request-Method"]."\n"; + +stream_context_set_default($opts); +$headers = get_headers("http://".PHP_CLI_SERVER_ADDRESS, 1); +echo $headers["X-Request-Method"]."\n"; + +echo "Done"; +?> +--EXPECTF-- +HEAD +HEAD +Done + + + diff --git a/ext/standard/url.c b/ext/standard/url.c index 63327cb8d5f..58ac90e8866 100644 --- a/ext/standard/url.c +++ b/ext/standard/url.c @@ -708,22 +708,24 @@ PHPAPI size_t php_raw_url_decode(char *str, size_t len) } /* }}} */ -/* {{{ proto array get_headers(string url[, int format]) +/* {{{ proto array get_headers(string url[, int format[, resource context]]) fetches all the headers sent by the server in response to a HTTP request */ PHP_FUNCTION(get_headers) { char *url; size_t url_len; - php_stream_context *context; php_stream *stream; zval *prev_val, *hdr = NULL, *h; HashTable *hashT; zend_long format = 0; + zval *zcontext = NULL; + php_stream_context *context = NULL; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|l", &url, &url_len, &format) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|lr", &url, &url_len, &format, &zcontext) == FAILURE) { return; } - context = FG(default_context) ? FG(default_context) : (FG(default_context) = php_stream_context_alloc()); + + context = php_stream_context_from_zval(zcontext, 0); if (!(stream = php_stream_open_wrapper_ex(url, "r", REPORT_ERRORS | STREAM_USE_URL | STREAM_ONLY_GET_HEADERS, NULL, context))) { RETURN_FALSE; From b9b0d3db39bbd11fd7f053cfde1ffe0dbc835d5e Mon Sep 17 00:00:00 2001 From: Ferenc Kovacs Date: Mon, 30 Mar 2015 11:21:39 +0200 Subject: [PATCH 002/856] allow passing null as the third param --- ext/standard/url.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/standard/url.c b/ext/standard/url.c index 58ac90e8866..cfc75bfe3df 100644 --- a/ext/standard/url.c +++ b/ext/standard/url.c @@ -721,7 +721,7 @@ PHP_FUNCTION(get_headers) zval *zcontext = NULL; php_stream_context *context = NULL; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|lr", &url, &url_len, &format, &zcontext) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|lr!", &url, &url_len, &format, &zcontext) == FAILURE) { return; } From 0a10440cad5adf6c3d9b1eeb1e3e69f64ecd0d68 Mon Sep 17 00:00:00 2001 From: Ferenc Kovacs Date: Mon, 30 Mar 2015 18:34:02 +0200 Subject: [PATCH 003/856] no need for default value --- ext/standard/url.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/standard/url.c b/ext/standard/url.c index cfc75bfe3df..4b76d65a48f 100644 --- a/ext/standard/url.c +++ b/ext/standard/url.c @@ -719,7 +719,7 @@ PHP_FUNCTION(get_headers) HashTable *hashT; zend_long format = 0; zval *zcontext = NULL; - php_stream_context *context = NULL; + php_stream_context *context; if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|lr!", &url, &url_len, &format, &zcontext) == FAILURE) { return; From 82c0156cacacd32764be2e7cb6825f92ba88c787 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Sur=C3=BD?= Date: Mon, 7 Sep 2015 13:20:58 +0200 Subject: [PATCH 004/856] Include config.h instead of php_config.h in gd_compat.c to have the configure variable available in outside-of-the-tree module build --- ext/gd/gd_compat.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ext/gd/gd_compat.c b/ext/gd/gd_compat.c index d6d8d0b2f9e..af55e42d9a7 100644 --- a/ext/gd/gd_compat.c +++ b/ext/gd/gd_compat.c @@ -1,4 +1,6 @@ -#include "php_config.h" +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif #ifdef HAVE_GD_PNG /* needs to be first */ From e7414a48ef8048386dc0459b56f652a8b37015f5 Mon Sep 17 00:00:00 2001 From: Daniel Persson Date: Tue, 8 Sep 2015 23:01:09 +0200 Subject: [PATCH 005/856] Changed from testing cast-128 to cast-256 --- ext/mcrypt/tests/mcrypt_module_get_algo_block_size.phpt | 5 +++-- ext/mcrypt/tests/mcrypt_module_get_algo_key_size.phpt | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/ext/mcrypt/tests/mcrypt_module_get_algo_block_size.phpt b/ext/mcrypt/tests/mcrypt_module_get_algo_block_size.phpt index c89a44ad8ab..93db98241aa 100644 --- a/ext/mcrypt/tests/mcrypt_module_get_algo_block_size.phpt +++ b/ext/mcrypt/tests/mcrypt_module_get_algo_block_size.phpt @@ -8,12 +8,13 @@ var_dump(mcrypt_module_get_algo_block_size(MCRYPT_RIJNDAEL_256)); var_dump(mcrypt_module_get_algo_block_size(MCRYPT_RIJNDAEL_192)); var_dump(mcrypt_module_get_algo_block_size(MCRYPT_RC2)); var_dump(mcrypt_module_get_algo_block_size(MCRYPT_XTEA)); -var_dump(mcrypt_module_get_algo_block_size(MCRYPT_CAST_128)); +var_dump(mcrypt_module_get_algo_block_size(MCRYPT_CAST_256)); var_dump(mcrypt_module_get_algo_block_size(MCRYPT_BLOWFISH)); +?> --EXPECT-- int(32) int(24) int(8) int(8) -int(8) +int(16) int(8) diff --git a/ext/mcrypt/tests/mcrypt_module_get_algo_key_size.phpt b/ext/mcrypt/tests/mcrypt_module_get_algo_key_size.phpt index 7d3841f3e2b..35e47210553 100644 --- a/ext/mcrypt/tests/mcrypt_module_get_algo_key_size.phpt +++ b/ext/mcrypt/tests/mcrypt_module_get_algo_key_size.phpt @@ -8,12 +8,13 @@ var_dump(mcrypt_module_get_algo_key_size(MCRYPT_RIJNDAEL_256)); var_dump(mcrypt_module_get_algo_key_size(MCRYPT_RIJNDAEL_192)); var_dump(mcrypt_module_get_algo_key_size(MCRYPT_RC2)); var_dump(mcrypt_module_get_algo_key_size(MCRYPT_XTEA)); -var_dump(mcrypt_module_get_algo_key_size(MCRYPT_CAST_128)); +var_dump(mcrypt_module_get_algo_key_size(MCRYPT_CAST_256)); var_dump(mcrypt_module_get_algo_key_size(MCRYPT_BLOWFISH)); +?> --EXPECT-- int(32) int(32) int(128) int(16) -int(16) +int(32) int(56) From d96c66909d1350f653dd631416f6174c7232b7e7 Mon Sep 17 00:00:00 2001 From: jubianchi Date: Fri, 11 Sep 2015 17:54:31 +0200 Subject: [PATCH 006/856] Fix SNMP::setSecurity() arginfo (Fixes bug #70476) --- ext/snmp/snmp.c | 19 +++--- ext/snmp/tests/reflection.phpt | 103 +++++++++++++++++++++++++++++++++ 2 files changed, 112 insertions(+), 10 deletions(-) create mode 100644 ext/snmp/tests/reflection.phpt diff --git a/ext/snmp/snmp.c b/ext/snmp/snmp.c index 92b7732e676..76ba88089f6 100644 --- a/ext/snmp/snmp.c +++ b/ext/snmp/snmp.c @@ -346,7 +346,6 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_snmp_setSecurity, 0, 0, 8) ZEND_ARG_INFO(0, priv_passphrase) ZEND_ARG_INFO(0, contextName) ZEND_ARG_INFO(0, contextEngineID) - ZEND_ARG_INFO(0, ) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_snmp_get, 0, 0, 1) @@ -2305,16 +2304,16 @@ static void free_php_snmp_properties(zval *el) /* {{{ */ /* {{{ php_snmp_class_methods[] */ static zend_function_entry php_snmp_class_methods[] = { - PHP_ME(snmp, __construct, arginfo_snmp_create, ZEND_ACC_PUBLIC) - PHP_ME(snmp, close, arginfo_snmp_void, ZEND_ACC_PUBLIC) - PHP_ME(snmp, setSecurity, arginfo_snmp_setSecurity, ZEND_ACC_PUBLIC) + PHP_ME(snmp, __construct, arginfo_snmp_create, ZEND_ACC_PUBLIC) + PHP_ME(snmp, close, arginfo_snmp_void, ZEND_ACC_PUBLIC) + PHP_ME(snmp, setSecurity, arginfo_snmp_setSecurity, ZEND_ACC_PUBLIC) - PHP_ME(snmp, get, arginfo_snmp_get, ZEND_ACC_PUBLIC) - PHP_ME(snmp, getnext, arginfo_snmp_get, ZEND_ACC_PUBLIC) - PHP_ME(snmp, walk, arginfo_snmp_walk, ZEND_ACC_PUBLIC) - PHP_ME(snmp, set, arginfo_snmp_set, ZEND_ACC_PUBLIC) - PHP_ME(snmp, getErrno, arginfo_snmp_void, ZEND_ACC_PUBLIC) - PHP_ME(snmp, getError, arginfo_snmp_void, ZEND_ACC_PUBLIC) + PHP_ME(snmp, get, arginfo_snmp_get, ZEND_ACC_PUBLIC) + PHP_ME(snmp, getnext, arginfo_snmp_get, ZEND_ACC_PUBLIC) + PHP_ME(snmp, walk, arginfo_snmp_walk, ZEND_ACC_PUBLIC) + PHP_ME(snmp, set, arginfo_snmp_set, ZEND_ACC_PUBLIC) + PHP_ME(snmp, getErrno, arginfo_snmp_void, ZEND_ACC_PUBLIC) + PHP_ME(snmp, getError, arginfo_snmp_void, ZEND_ACC_PUBLIC) PHP_FE_END }; diff --git a/ext/snmp/tests/reflection.phpt b/ext/snmp/tests/reflection.phpt new file mode 100644 index 00000000000..91e9876801e --- /dev/null +++ b/ext/snmp/tests/reflection.phpt @@ -0,0 +1,103 @@ +--TEST-- +Test SNMP Reflection +--SKIPIF-- + +--FILE-- + +===DONE=== + +--EXPECTF-- +Method [ public method __construct ] { + + - Parameters [5] { + Parameter #0 [ $version ] + Parameter #1 [ $host ] + Parameter #2 [ $community ] + Parameter #3 [ $timeout ] + Parameter #4 [ $retries ] + } +} + +Method [ public method close ] { + + - Parameters [0] { + } +} + +Method [ public method setSecurity ] { + + - Parameters [8] { + Parameter #0 [ $session ] + Parameter #1 [ $sec_level ] + Parameter #2 [ $auth_protocol ] + Parameter #3 [ $auth_passphrase ] + Parameter #4 [ $priv_protocol ] + Parameter #5 [ $priv_passphrase ] + Parameter #6 [ $contextName ] + Parameter #7 [ $contextEngineID ] + } +} + +Method [ public method get ] { + + - Parameters [2] { + Parameter #0 [ $object_id ] + Parameter #1 [ $use_orignames ] + } +} + +Method [ public method getnext ] { + + - Parameters [2] { + Parameter #0 [ $object_id ] + Parameter #1 [ $use_orignames ] + } +} + +Method [ public method walk ] { + + - Parameters [4] { + Parameter #0 [ $object_id ] + Parameter #1 [ $suffix_keys ] + Parameter #2 [ $max_repetitions ] + Parameter #3 [ $non_repeaters ] + } +} + +Method [ public method set ] { + + - Parameters [3] { + Parameter #0 [ $object_id ] + Parameter #1 [ $type ] + Parameter #2 [ $value ] + } +} + +Method [ public method getErrno ] { + + - Parameters [0] { + } +} + +Method [ public method getError ] { + + - Parameters [0] { + } +} + +===DONE=== From e326fa78552eef34e6e0ef362e3de134be4ff163 Mon Sep 17 00:00:00 2001 From: jubianchi Date: Fri, 11 Sep 2015 18:13:23 +0200 Subject: [PATCH 007/856] Remove wrong argument $session from SNMP::setSecurity() --- ext/snmp/snmp.c | 1 - ext/snmp/tests/reflection.phpt | 17 ++++++++--------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/ext/snmp/snmp.c b/ext/snmp/snmp.c index 76ba88089f6..05e2ba24fd9 100644 --- a/ext/snmp/snmp.c +++ b/ext/snmp/snmp.c @@ -338,7 +338,6 @@ ZEND_BEGIN_ARG_INFO(arginfo_snmp_void, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_snmp_setSecurity, 0, 0, 8) - ZEND_ARG_INFO(0, session) ZEND_ARG_INFO(0, sec_level) ZEND_ARG_INFO(0, auth_protocol) ZEND_ARG_INFO(0, auth_passphrase) diff --git a/ext/snmp/tests/reflection.phpt b/ext/snmp/tests/reflection.phpt index 91e9876801e..8e2b92f2e8c 100644 --- a/ext/snmp/tests/reflection.phpt +++ b/ext/snmp/tests/reflection.phpt @@ -41,15 +41,14 @@ Method [ public method close ] { Method [ public method setSecurity ] { - - Parameters [8] { - Parameter #0 [ $session ] - Parameter #1 [ $sec_level ] - Parameter #2 [ $auth_protocol ] - Parameter #3 [ $auth_passphrase ] - Parameter #4 [ $priv_protocol ] - Parameter #5 [ $priv_passphrase ] - Parameter #6 [ $contextName ] - Parameter #7 [ $contextEngineID ] + - Parameters [7] { + Parameter #0 [ $sec_level ] + Parameter #1 [ $auth_protocol ] + Parameter #2 [ $auth_passphrase ] + Parameter #3 [ $priv_protocol ] + Parameter #4 [ $priv_passphrase ] + Parameter #5 [ $contextName ] + Parameter #6 [ $contextEngineID ] } } From 0ebf9a11f9cbac730094824457d194c3e6e14479 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Mon, 14 Sep 2015 22:45:28 +0200 Subject: [PATCH 008/856] prepare master NEWS --- NEWS | 719 +---------------------------------------------------------- 1 file changed, 1 insertion(+), 718 deletions(-) diff --git a/NEWS b/NEWS index 2dcb13ef073..d474198ca90 100644 --- a/NEWS +++ b/NEWS @@ -1,723 +1,6 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -17 Sep 2015, PHP 7.0.0 RC 3 +?? ??? 2016, PHP 7.1.0 -- Core: - . Fixed bug #70431 (Memory leak in php_ini.c). (Senthil, Laruence) - . Fixed bug #70478 (**= does no longer work). (Bob) - -- CLI server: - . Fixed bug #68291 (404 on urls with '+'). (cmb) - -- DOM: - . Fixed bug #70001 (Assigning to DOMNode::textContent does additional entity - encoding). (cmb) - -- Intl: - . Fixed bug #70453 (IntlChar::foldCase() incorrect arguments and missing - constants). (cmb) - . Fixed bug #70454 (IntlChar::forDigit second parameter should be optional). - (cmb, colinodell) - -- Mysqlnd: - . Fixed bug #70456 (mysqlnd doesn't activate TCP keep-alive when connecting to - a server). (Sergei Turchanov) - -- Opcache: - . Fixed bug #70423 (Warning Internal error: wrong size calculation). (Anatol) - -- OpenSSL - . Fixed bug #55259 (openssl extension does not get the DH parameters from - DH key resource). (Jakub Zelenka) - . Fixed bug #70395 (Missing ARG_INFO for openssl_seal()). (cmb) - . Fixed bug #60632 (openssl_seal fails with AES). (Jakub Zelenka) - . Implemented FR #70438 (Add IV parameter for openssl_seal and openssl_open) - (Jakub Zelenka) - -- Phpdbg: - . Fixed bug #70449 (PHP won't compile on 10.4 and 10.5 because of missing - constants). (Bob) - -- Standard: - . Implemented the RFC `Random Functions Throwing Exceptions in PHP 7`. - (Sammy Kaye Powers, Anthony) - . Fixed bug #70487 (pack('x') produces an error). (Nikita) - -- Streams: - . Fixed bug #70361 (HTTP stream wrapper doesn't close keep-alive connections). - (Niklas Keller) - -- XMLReader: - . Fixed bug #70309 (XmlReader read generates extra output). (Anatol) - -- Zip: - . Fixed bug #70322 (ZipArchive::close() doesn't indicate errors). (cmb) - -03 Sep 2015, PHP 7.0.0 RC 2 - -- Core: - . Fixed bug #70398 (SIGSEGV, Segmentation fault zend_ast_destroy_ex). - (Dmitry, Bob, Laruence) - . Fixed bug #70332 (Wrong behavior while returning reference on object). - (Laruence, Dmitry) - . Fixed bug #70300 (Syntactical inconsistency with new group use syntax). - (marcio dot web2 at gmail dot com) - . Fixed bug #70321 (Magic getter breaks reference to array property). - (Laruence) - . Fixed bug #70187 (Notice: unserialize(): Unexpected end of serialized - data). (Dmitry) - . Fixed bug #70145 (From field incorrectly parsed from headers). (Anatol) - . Fixed bug #70370 (Bundled libtool.m4 doesn't handle FreeBSD 10 when - building extensions). (Adam) - . Fixed bug causing exception traces with anon classes to be truncated. (Bob) - . Fixed bug #70397 (Segmentation fault when using Closure::call and yield). - (Bob) - -- Curl: - . Fixed bug #70330 (Segmentation Fault with multiple "curl_copy_handle"). - (Laruence) - -- EXIF: - . Fixed bug #70385 (Buffer over-read in exif_read_data with TIFF IFD tag byte - value of 32 bytes). (Stas) - -- GMP: - . Fixed bug #70284 (Use after free vulnerability in unserialize() with GMP). - (stas) - -- hash: - . Fixed bug #70312 (HAVAL gives wrong hashes in specific cases). (letsgolee - at naver dot com) - -- Mysqli: - . Fixed bug #32490 (constructor of mysqli has wrong name). (cmb) - -- Pcntl: - . Fixed bug #70386 (Can't compile on NetBSD because of missing WCONTINUED - and WIFCONTINUED). (Matteo) - -- PCRE: - . Fixed bug #70232 (Incorrect bump-along behavior with \K and empty string - match). (cmb) - . Fixed bug #70345 (Multiple vulnerabilities related to PCRE functions). - (Anatol Belski) - -- PDO: - . Fixed bug #70389 (PDO constructor changes unrelated variables). (Laruence) - -- PDO_OCI: - . Fixed bug #70308 (PDO::ATTR_PREFETCH is ignored). (Chris Jones) - -- SOAP: - . Fixed bug #70388 (SOAP serialize_function_call() type confusion / RCE). - (Stas) - -- SPL: - . Fixed bug #70303 (Incorrect constructor reflection for ArrayObject). (cmb) - -- Standard: - . Fixed bug #70342 (changing configuration with ignore_user_abort(true) isn't - working). (Laruence) - . Fixed bug #70295 (Segmentation fault with setrawcookie). (Bob) - . Fixed bug #67131 (setcookie() conditional for empty values not met). (cmb) - . Fixed bug #70365 (Use-after-free vulnerability in unserialize() with - SplObjectStorage). (taoguangchen at icloud dot com) - . Fixed bug #70366 (Use-after-free vulnerability in unserialize() with - SplDoublyLinkedList). (taoguangchen at icloud dot com) - -- Reflection: - . Fixed bug causing bogus traces for ReflectionGenerator::getTrace(). (Bob) - -- XSLT: - . Fixed bug #69782 (NULL pointer dereference). (Stas) - -- ZIP: - . Fixed bug #70350 (ZipArchive::extractTo allows for directory traversal when - creating directories). (neal at fb dot com) - -20 Aug 2015, PHP 7.0.0 RC 1 - -- Core: - . Fixed bug #70299 (Memleak while assigning object offsetGet result). - (Laruence) - . Fixed bug #70288 (Apache crash related to ZEND_SEND_REF). (Laruence) - . Fixed bug #70262 (Accessing array crashes PHP 7.0beta3). - (Laruence, Dmitry) - . Fixed bug #70258 (Segfault if do_resize fails to allocated memory). - (Laruence) - . Fixed bug #70253 (segfault at _efree () in zend_alloc.c:1389). (Laruence) - . Fixed bug #70240 (Segfault when doing unset($var());). (Laruence) - . Fixed bug #70223 (Incrementing value returned by magic getter). (Laruence) - . Fixed bug #70215 (Segfault when __invoke is static). (Bob) - . Fixed bug #70207 (Finally is broken with opcache). (Laruence, Dmitry) - . Fixed bug #70173 (ZVAL_COPY_VALUE_EX broken for 32bit Solaris Sparc). - (Laruence, cmb) - . Fixed bug #69487 (SAPI may truncate POST data). (cmb) - . Fixed bug #70198 (Checking liveness does not work as expected). - (Shafreeck Sea, Anatol Belski) - . Fixed bug #70241/#70293 (Skipped assertions affect Generator returns). (Bob) - . Fixed bug #70239 (Creating a huge array doesn't result in exhausted, - but segfault). (Laruence, Anatol) - -- CLI server: - . Fixed bug #66606 (Sets HTTP_CONTENT_TYPE but not CONTENT_TYPE). - (wusuopu, cmb) - . Fixed bug #70264 (CLI server directory traversal). (cmb) - -- Date: - . Fixed bug #70245 (strtotime does not emit warning when 2nd parameter is - object or string). (cmb) - . Fixed bug #70266 (DateInterval::__construct.interval_spec is not supposed to - be optional). (cmb) - . Fixed bug #70277 (new DateTimeZone($foo) is ignoring text after null byte). - (cmb) - -- MCrypt: - . Fixed bug #69833 (mcrypt fd caching not working). (Anatol) - -- Opcache: - . Fixed bug #70237 (Empty while and do-while segmentation fault with opcode - on CLI enabled). (Dmitry, Laruence) - -- PCRE: - . Fixed bug #70232 (Incorrect bump-along behavior with \K and empty string - match). (cmb) - -- PDO: - . Fixed bug #70272 (Segfault in pdo_mysql). (Laruence) - . Fixed bug #70221 (persistent sqlite connection + custom function - segfaults). (Laruence) - -- Phpdbg: - . Fixed bug #70214 (FASYNC not defined, needs sys/file.h include). (Bob) - -- Standard: - . Fixed bug #70250 (extract() turns array elements to references). - (Laruence) - . Fixed bug #70211 (php 7 ZEND_HASH_IF_FULL_DO_RESIZE use after free). - (Laruence) - . Fixed bug #70208 (Assert breaking access on objects). (Bob) - -06 Aug 2015, PHP 7.0.0 Beta 3 - -- Core: - . Fixed "finally" issues. (Nikita, Dmitry) - . Fixed bug #70098 (Real memory usage doesn't decrease). (Dmitry) - . Fixed bug #70159 (__CLASS__ is lost in closures). (Julien) - . Fixed bug #70156 (Segfault in zend_find_alias_name). (Laruence) - . Fixed bug #70124 (null ptr deref / seg fault in ZEND_HANDLE_EXCEPTION). - (Laruence) - . Fixed bug #70117 (Unexpected return type error). (Laruence) - . Fixed bug #70106 (Inheritance by anonymous class). (Bob) - . Fixed bug #69674 (SIGSEGV array.c:953). (cmb) - . Fixed bug #70164 (__COMPILER_HALT_OFFSET__ under namespace is not defined). - (Bob) - . Fixed bug #70108 (sometimes empty $_SERVER['QUERY_STRING']). (Anatol) - . Fixed bug #70179 ($this refcount issue). (Bob) - . Fixed bug #69896 ('asm' operand has impossible constraints). (Anatol) - . Fixed bug #70183 (null pointer deref (segfault) in zend_eval_const_expr). - (Hugh Davenport) - . Fixed bug #70182 (Segfault in ZEND_ASSIGN_DIV_SPEC_CV_UNUSED_HANDLER). - (Hugh Davenport) - . Fixed bug #69793 (Remotely triggerable stack exhaustion via recursive - method calls). (Stas) - . Fixed bug #69892 (Different arrays compare indentical due to integer key - truncation). (Nikita) - . Fixed bug #70121 (unserialize() could lead to unexpected methods execution - / NULL pointer deref). (Stas) - -- Curl: - . Fixed bug #70163 (curl_setopt_array() type confusion). (Laruence) - -- IMAP: - . Fixed bug #70158 (Building with static imap fails). (cmb) - . Fixed bug #69998 (curl multi leaking memory). (Pierrick) - -- Opcache: - . Fixed bug #70111 (Segfault when a function uses both an explicit return - type and an explicit cast). (Laruence) - -- OpenSSL: - . Fixed bug #70014 (openssl_random_pseudo_bytes() is not cryptographically - secure). (Stas) - -- Phar: - . Improved fix for bug #69441. (Anatol Belski) - . Fixed bug #70019 (Files extracted from archive may be placed outside of - destination directory). (Anatol Belski) - -- Phpdbg: - . Fixed bug #70138 (Segfault when displaying memory leaks). (Bob) - -- SOAP: - . Fixed bug #70081 (SoapClient info leak / null pointer dereference via - multiple type confusions). (Stas) - -- SPL: - . Fixed bug #70068 (Dangling pointer in the unserialization of ArrayObject - items). (sean.heelan) - . Fixed bug #70166 (Use After Free Vulnerability in unserialize() with - SPLArrayObject). (taoguangchen at icloud dot com) - . Fixed bug #70168 (Use After Free Vulnerability in unserialize() with - SplObjectStorage). (taoguangchen at icloud dot com) - . Fixed bug #70169 (Use After Free Vulnerability in unserialize() with - SplDoublyLinkedList). (taoguangchen at icloud dot com) - -- Standard: - . Fixed bug #70140 (str_ireplace/php_string_tolower - Arbitrary Code - Execution). (CVE-2015-6527) (Laruence) - . Implemented FR #70112 (Allow "dirname" to go up various times). (Remi) - . Fixed bug #36365 (scandir duplicates file name at every 65535th file). (cmb) - -23 Jul 2015, PHP 7.0.0 Beta 2 - -- Core: - . Fixed bug #70089 (segfault at ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER ()). - (Laruence) - . Fixed bug #70057 (Build failure on 32-bit Mac OS X 10.6.8: recursive - inlining). (Laruence) - . Fixed bug #70012 (Exception lost with nested finally block). (Laruence) - . Fixed bug #69996 (Changing the property of a cloned object affects the - original). (Dmitry, Laruence) - . Fixed bug #70083 (Use after free with assign by ref to overloaded objects). - (Bob) - -- Curl: - . Fixed bug #70065 (curl_getinfo() returns corrupted values). (Anatol) - -- GD: - . Fixed bug #53156 (imagerectangle problem with point ordering). (cmb) - . Fixed bug #66387 (Stack overflow with imagefilltoborder). (cmb) - . Fixed bug #70102 (imagecreatefromwebm() shifts colors). (cmb) - . Fixed bug #66590 (imagewebp() doesn't pad to even length). (cmb) - . Fixed bug #66882 (imagerotate by -90 degrees truncates image by 1px). (cmb) - . Fixed bug #70064 (imagescale(..., IMG_BICUBIC) leaks memory). (cmb) - . Fixed bug #69024 (imagescale segfault with palette based image). (cmb) - . Fixed bug #53154 (Zero-height rectangle has whiskers). (cmb) - . Fixed bug #67447 (imagecrop() add a black line when cropping). (cmb) - . Fixed bug #68714 (copy 'n paste error). (cmb) - . Fixed bug #66339 (PHP segfaults in imagexbm). (cmb) - . Fixed bug #70047 (gd_info() doesn't report WebP support). (cmb) - . Replace libvpx with libwebp for bundled libgd. (cmb, Anatol) - -- Opcache: - . Fixed bug #70058 (Build fails when building for i386). (Laruence) - . Fixed bug #70022 (Crash with opcache using opcache.file_cache_only=1). - (Anatol) - -- Soap: - . Fixed bug #70079 (Segmentation fault after more than 100 SoapClient - calls). (Laruence) - . Fixed bug #70032 (make_http_soap_request calls - zend_hash_get_current_key_ex(,,,NULL). (Laruence) - -- SPL: - . Fixed bug #70053 (MutlitpleIterator array-keys incompatible change in - PHP 7). (Tjerk) - -- Standard: - . Fixed bug #70096 (Repeated iptcembed() adds superfluous FF bytes). (cmb) - . Fixed bug #70018 (exec does not strip all whitespace). (Laruence) - -- Tokenizer: - . Fixed bug #69430 (token_get_all has new irrecoverable errors). (Nikita) - -09 Jul 2015, PHP 7.0.0 Beta 1 - -- Core: - . Fixed bug #70006 (cli - function with default arg = STDOUT crash output). - (Laruence) - . Fixed bug #69521 (Segfault in gc_collect_cycles()). - (arjen at react dot com, Laruence) - . Improved zend_string API (Francois Laupretre) - . Fixed bug #69955 (Segfault when trying to combine [] and assign-op on - ArrayAccess object). (Laruence) - . Fixed bug #69957 (Different ways of handling div/mod/intdiv). (Bob) - . Fixed bug #69900 (Too long timeout on pipes). (Anatol) - -- CLI server: - . Fixed bug #69655 (php -S changes MKCALENDAR request method to MKCOL). (cmb) - . Fixed bug #64878 (304 responses return Content-Type header). (cmb) - -- COM: - . Fixed bug #69939 (Casting object to bool returns false). (Kalle) - -- JSON: - . Fixed bug #62010 (json_decode produces invalid byte-sequences). - (Jakub Zelenka) - -- OCI8: - . Corrected oci8 hash destructors to prevent segfaults, and a few other fixes. - (Cameron Porter) - -- ODBC: - . Fixed bug #69975 (PHP segfaults when accessing nvarchar(max) defined - columns). (cmb) - -- OpenSSL: - . Fixed bug #69882 (OpenSSL error "key values mismatch" after - openssl_pkcs12_read with extra cert). (Tomasz Sawicki) - -- PCRE: - . Fixed bug #53823 (preg_replace: * qualifier on unicode replace garbles the - string). (cmb) - -- Session: - . Fixed bug #69952 (Data integrity issues accessing superglobals by - reference). (Bob) - -- SPL: - . Fixed bug #69970 (Use-after-free vulnerability in - spl_recursive_it_move_forward_ex()). (Laruence) - -- Sqlite3: - . Fixed bug #69972 (Use-after-free vulnerability in - sqlite3SafetyCheckSickOrOk()). (Laruence) - -- Standard: - . Fixed bug #69983 (get_browser fails with user agent of null). - (Kalle, cmb, Laruence) - . Fixed bug #69976 (Unable to parse "all" urls with colon char). (cmb) - . Fixed bug #69768 (escapeshell*() doesn't cater to !). (cmb) - -25 Jun 2015, PHP 7.0.0 Alpha 2 - -- Core: - . Fixed bug #69872 (uninitialised value in strtr with array). (Laruence) - . Fixed bug #69868 (Invalid read of size 1 in zend_compile_short_circuiting). - (Laruence) - . Fixed bug #69849 (Broken output of apache_request_headers). (Kalle) - . Fixed bug #69840 (iconv_substr() doesn't work with UTF-16BE). (Kalle) - . Fixed bug #69823 (PHP 7.0.0alpha1 segmentation fault when exactly 33 - extensions are loaded). (Laruence) - . Fixed bug #69805 (null ptr deref and seg fault in zend_resolve_class_name). - (Laruence) - . Fixed bug #69802 (Reflection on Closure::__invoke borks type hint class - name). (Dmitry) - . Fixed bug #69761 (Serialization of anonymous classes should be prevented). - (Laruence) - . Fixed bug #69551 (parse_ini_file() and parse_ini_string() segmentation - fault). (Christoph M. Becker) - . Fixed bug #69781 (phpinfo() reports Professional Editions of Windows - 7/8/8.1/10 as "Business"). (Christian Wenz) - . Fixed bug #69835 (phpinfo() does not report many Windows SKUs). - (Christian Wenz) - . Fixed bug #69889 (Null coalesce operator doesn't work for string offsets). - (Nikita) - . Fixed bug #69891 (Unexpected array comparison result). (Nikita) - . Fixed bug #69892 (Different arrays compare indentical due to integer key - truncation). (Nikita) - . Fixed bug #69893 (Strict comparison between integer and empty string keys - crashes). (Nikita) - -- Curl: - . Fixed bug #69831 (Segmentation fault in curl_getinfo). (im dot denisenko at - yahoo dot com) - -- DOM: - . Fixed bug #69846 (Segmenation fault (access violation) when iterating over - DOMNodeList). (Anatol Belski) - -- GD: - . Fixed bug #61221 (imagegammacorrect function loses alpha channel). (cmb) - -- JSON: - . Fixed bug #68546 (json_decode() Fatal error: Cannot access property - started with '\0'). (Jakub Zelenka) - -- mysqlnd: - . Fixed Bug #69796 (mysqli_stmt::fetch doesn't assign null values to - bound variables). (Laruence) - -- Opcache: - . Removed opcache.load_comments configuration directive. Now doc comments - loading costs nothing and always enabled. (Dmitry) - . Fixed bug #69838 (Wrong size calculation for function table). (Anatol) - -- PCRE: - . Fixed bug #69864 (Segfault in preg_replace_callback). (cmb, ab) - -- PDO_pgsql: - . Fixed bug #69752 (PDOStatement::execute() leaks memory with DML - Statements when closeCuror() is u). (Philip Hofstetter) - -- SPL: - . Fixed bug #69845 (ArrayObject with ARRAY_AS_PROPS broken). (Dmitry) - -- SQLite3: - . Fixed bug #69897 (segfault when manually constructing SQLite3Result). - (Kalle) - -- Standard: - . Fixed bug #62922 (Truncating entire string should result in string). - (Nikita) - -11 Jun 2015, PHP 7.0.0 Alpha 1 - -- Core: - . Fixed bug #69767 (Default parameter value with wrong type segfaults). - (cmb, Laruence) - . Fixed bug #69756 (Fatal error: Nesting level too deep - recursive dependency - ? with ===). (Dmitry, Laruence) - . Fixed bug #69758 (Item added to array not being removed by array_pop/shift - ). (Laruence) - . Fixed bug #68475 (Add support for $callable() sytnax with 'Class::method'). - (Julien, Aaron Piotrowski) - . Fixed bug #69485 (Double free on zend_list_dtor). (Laruence) - . Fixed bug #69427 (Segfault on magic method __call of private method in - superclass). (Laruence) - . Improved __call() and __callStatic() magic method handling. Now they are - called in a stackless way using ZEND_CALL_TRAMPOLINE opcode, without - additional stack frame. (Laruence, Dmitry) - . Optimized strings concatenation. (Dmitry, Laruence) - . Fixed weird operators behavior. Division by zero now emits warning and - returns +/-INF, modulo by zero and intdid() throws an exception, shifts - by negative offset throw exceptions. Compile-time evaluation of division - by zero is disabled. (Dmitry, Andrea, Nikita) - . Fixed bug #69371 (Hash table collision leads to inaccessible array keys). - (Laruence) - . Fixed bug #68933 (Invalid read of size 8 in zend_std_read_property). - (Laruence, arjen at react dot com) - . Fixed bug #68252 (segfault in Zend/zend_hash.c in function - _zend_hash_del_el). (Laruence) - . Fixed bug #65598 (Closure executed via static autoload incorrectly marked as - static). (Nikita) - . Fixed bug #66811 (Cannot access static::class in lambda, writen outside of a - class). (Nikita) - . Fixed bug #69568 (call a private function in closure failed). (Nikita) - . Added PHP_INT_MIN constant. (Andrea) - . Added Closure::call() method. (Andrea) - . Fixed bug #67959 (Segfault when calling phpversion('spl')). (Florian) - . Implemented the RFC `Catchable "Call to a member function bar() on a - non-object"`. (Timm) - . Added options parameter for unserialize allowing to specify acceptable - classes (https://wiki.php.net/rfc/secure_unserialize). (Stas) - . Fixed bug #63734 (Garbage collector can free zvals that are still - referenced). (Dmitry) - . Removed ZEND_ACC_FINAL_CLASS, promoting ZEND_ACC_FINAL as final class - modifier. (Guilherme Blanco) - . is_long() & is_integer() is now an alias of is_int(). (Kalle) - . Implemented FR #55467 (phpinfo: PHP Variables with $ and single quotes). (Kalle) - . Added ?? operator. (Andrea) - . Added <=> operator. (Andrea) - . Added \u{xxxxx} Unicode Codepoint Escape Syntax. (Andrea) - . Fixed oversight where define() did not support arrays yet const syntax did. - (Andrea, Dmitry) - . Use "integer" and "float" instead of "long" and "double" in ZPP, type hint - and conversion error messages. (Andrea) - . Implemented FR #55428 (E_RECOVERABLE_ERROR when output buffering in output - buffering handler). (Kalle) - . Removed scoped calls of non-static methods from an incompatible $this - context. (Nikita) - . Removed support for #-style comments in ini files. (Nikita) - . Removed support for assigning the result of new by reference. (Nikita) - . Invalid octal literals in source code now produce compile errors, fixes - PHPSadness #31. (Andrea) - . Removed dl() function on fpm-fcgi. (Nikita) - . Removed support for hexadecimal numeric strings. (Nikita) - . Removed obsolete extensions and SAPIs. See the full list in UPGRADING. (Anatol) - . Added NULL byte protection to exec, system and passthru. (Yasuo) - . Added error_clear_last() function. (Reeze Xia) - . Fixed bug #68797 (Number 2.2250738585072012e-308 converted incorrectly). - (Anatol) - . Improved zend_qsort(using hybrid sorting algo) for better performance, - and also renamed zend_qsort to zend_sort. (Laruence) - . Added stable sorting algo zend_insert_sort. (Laruence) - . Improved zend_memnchr(using sunday algo) for better performance. (Laruence) - . Implemented the RFC `Scalar Type Decalarations v0.5`. (Anthony) - . Implemented the RFC `Group Use Declarations`. (Marcio) - . Implemented the RFC `Continue Output Buffering`. (Mike) - . Implemented the RFC `Constructor behaviour of internal classes`. (Dan, Dmitry) - . Implemented the RFC `Fix "foreach" behavior`. (Dmitry) - . Implemented the RFC `Generator Delegation`. (Bob) - . Implemented the RFC `Anonymous Class Support`. (Joe, Nikita, Dmitry) - . Implemented the RFC `Context Sensitive Lexer`. (Marcio Almada) - . Fixed bug #69511 (Off-by-one buffer overflow in php_sys_readlink). - (Jan Starke, Anatol) - -- CLI server: - . Refactor MIME type handling to use a hash table instead of linear search. - (Adam) - . Update the MIME type list from the one shipped by Apache HTTPD. (Adam) - . Added support for SEARCH WebDav method. (Mats Lindh) - -- Curl: - . Fixed bug #68937 (Segfault in curl_multi_exec). (Laruence) - . Removed support for unsafe file uploads. (Nikita) - -- Date: - . Fixed day_of_week function as it could sometimes return negative values - internally. (Derick) - . Removed $is_dst parameter from mktime() and gmmktime(). (Nikita) - . Removed date.timezone warning - (https://wiki.php.net/rfc/date.timezone_warning_removal). (Bob) - . Added "v" DateTime format modifier to get the 3-digit version of fraction - of seconds. (Mariano Iglesias) - . Implemented FR #69089: Added DateTime::RFC3339_EXTENDED to output in - RFC3339 Extended format which includes fraction of seconds. (Mariano - Iglesias) - -- DBA: - . Fixed bug #62490 (dba_delete returns true on missing item (inifile)). (Mike) - . Fixed bug #68711 (useless comparisons). (bugreports at internot dot info) - -- DOM: - . Made DOMNode::textContent writeable. (Tjerk) - -- GD: - . Made fontFetch's path parser thread-safe. (Sara) - . Removed T1Lib support. (Kalle) - -- Fileinfo: - . Fixed bug #66242 (libmagic: don't assume char is signed). (ArdB) - -- Filter: - . New FILTER_VALIDATE_DOMAIN and better RFC conformance for FILTER_VALIDATE_URL. (Kevin Dunglas) - -- FPM: - . Fixed bug #68945 (Unknown admin values segfault pools). (Laruence) - . Fixed bug #65933 (Cannot specify config lines longer than 1024 bytes). (Chris Wright) - . Implement request #67106 (Split main fpm config). (Elan Ruusamäe, Remi) - -- FTP: - . Fixed bug #69082 (FTPS support on Windows). (Anatol) - -- Intl: - . Removed deprecated aliases datefmt_set_timezone_id() and - IntlDateFormatter::setTimeZoneID(). (Nikita) - -- JSON: - . Replace non-free JSON parser with a parser from Jsond extension, fixes #63520 - (JSON extension includes a problematic license statement). (Jakub Zelenka) - . Fixed bug #68938 (json_decode() decodes empty string without error). - (jeremy at bat-country dot us) - -- LDAP: - . Fixed bug #47222 (Implement LDAP_OPT_DIAGNOSTIC_MESSAGE). (Andreas Heigl) - -- LiteSpeed: - . Updated LiteSpeed SAPI code from V5.5 to V6.6. (George Wang) - -- libxml: - . Fixed handling of big lines in error messages with libxml >= 2.9.0. - (Christoph M. Becker) - -- Mcrypt: - . Fixed possible read after end of buffer and use after free. (Dmitry) - . Removed mcrypt_generic_end() alias. (Nikita) - . Removed mcrypt_ecb(), mcrypt_cbc(), mcrypt_cfb(), mcrypt_ofb(). (Nikita) - -- Opcache: - . Fixed bug #69688 (segfault with eval and opcache fast shutdown). - (Laruence) - . Added experimental (disabled by default) file based opcode cache. - (Dmitry, Laruence, Anatol) - . Fixed bug with try blocks being removed when extended_info opcode - generation is turned on. (Laruence) - . Fixed bug #68644 (strlen incorrect : mbstring + func_overload=2 +UTF-8 - + Opcache). (Laruence) - -- OpenSSL: - . Added "alpn_protocols" SSL context option allowing encrypted client/server - streams to negotiate alternative protocols using the ALPN TLS extension when - built against OpenSSL 1.0.2 or newer. Negotiated protocol information is - accessible through stream_get_meta_data() output. - . Removed "CN_match" and "SNI_server_name" SSL context options. Use automatic - detection or the "peer_name" option instead. (Nikita) - -- pcntl: - . Fixed bug #60509 (pcntl_signal doesn't decrease ref-count of old handler - when setting SIG_DFL). (Julien) - . Request #68505 (Added wifcontinued and wcontinued). (xilon-jul) - . Added rusage support to pcntl_wait() and pcntl_waitpid(). (Anton Stepanenko, - Tony) - -- PCRE: - . Removed support for the /e (PREG_REPLACE_EVAL) modifier. (Nikita) - -- PDO: - . Fixed bug #59450 (./configure fails with "Cannot find php_pdo_driver.h"). - (maxime dot besson at smile dot fr) - -- PDO_mysql: - . Fixed bug #68424 (Add new PDO mysql connection attr to control multi - statements option). (peter dot wolanin at acquia dot com) - -- PDO_pgsql: - . Removed PGSQL_ATTR_DISABLE_NATIVE_PREPARED_STATEMENT attribute in favor of - ATTR_EMULATE_PREPARES). (Nikita) - -- Reflection: - . Fixed inheritance chain of Reflector interface. (Tjerk) - . Added ReflectionGenerator class. (Bob) - . Added reflection support for return types and type declarations. (Sara, - Matteo) - -- Session: - . Fixed bug #67694 (Regression in session_regenerate_id()). (Tjerk) - . Fixed bug #68941 (mod_files.sh is a bash-script). (bugzilla at ii.nl, Yasuo) - -- SOAP: - . Fixed bug #68361 (Segmentation fault on SoapClient::__getTypes). (Laruence) - -- SPL: - . Changed ArrayIterator implementation using zend_hash_iterator_... API. - Allowed modification of iterated ArrayObject using the same behavior - as proposed in `Fix "foreach" behavior`. Removed "Array was modified - outside object and internal position is no longer valid" hack. (Dmitry) - . Implemented #67886 (SplPriorityQueue/SplHeap doesn't expose extractFlags - nor curruption state). (Julien) - . Fixed bug #66405 (RecursiveDirectoryIterator::CURRENT_AS_PATHNAME - breaks the RecursiveIterator). (Paul Garvin) - -- SQLite3: - . Fixed bug #68260 (SQLite3Result::fetchArray declares wrong - required_num_args). (Julien) - -- Standard: - . Fixed bug #69723 (Passing parameters by reference and array_column). - (Laruence) - . Fixed bug #69523 (Cookie name cannot be empty). (Christoph M. Becker) - . Fixed bug #69325 (php_copy_file_ex does not pass the argument). - (imbolk at gmail dot com) - . Fixed bug #69299 (Regression in array_filter's $flag argument in PHP 7). - (Laruence) - . Removed call_user_method() and call_user_method_array() functions. (Kalle) - . Fixed user session handlers (See rfc:session.user.return-value). (Sara) - . Added intdiv() function. (Andrea) - . Improved precision of log() function for base 2 and 10. (Marc Bennewitz) - . Remove string category support in setlocale(). (Nikita) - . Remove set_magic_quotes_runtime() and its alias magic_quotes_runtime(). - (Nikita) - . Fixed bug #65272 (flock() out parameter not set correctly in windows). - (Daniel Lowrey) - . Added preg_replace_callback_array function. (Wei Dai) - . Deprecated salt option to password_hash. (Anthony) - . Fixed bug #69686 (password_verify reports back error on PHP7 will null - string). (Anthony) - . Added Windows support for getrusage(). (Kalle) - . Removed hardcoded limit on number of pipes in proc_open(). (Tony) - -- Streams: - . Fixed bug #68532 (convert.base64-encode omits padding bytes). - (blaesius at krumedia dot de) - . Removed set_socket_blocking() in favor of its alias stream_set_blocking(). - (Nikita) - -- XSL: - . Fixed bug #64776 (The XSLT extension is not thread safe). (Mike) - . Removed xsl.security_prefs ini option. (Nikita) - -- Zlib: - . Added deflate_init(), deflate_add(), inflate_init(), inflate_add() - functions allowing incremental/streaming compression/decompression. - (Daniel Lowrey & Bob Weinand) - -- Zip: - . Added ZipArchive::setCompressionName and ZipArchive::setCompressionIndex - methods. (Remi, Cedric Delmas) - . Update bundled libzip to 1.0.1. (Remi, Anatol) - . Fixed bug #67161 (ZipArchive::getStream() returns NULL for certain file). - (Christoph M. Becker) <<< NOTE: Insert NEWS from last stable release here prior to actual release! >>> From 7da32cb56b877feb342bb2012ce845f9deff32bd Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Sat, 12 Sep 2015 21:37:12 +0200 Subject: [PATCH 009/856] add range check --- ext/dom/namednodemap.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ext/dom/namednodemap.c b/ext/dom/namednodemap.c index eb2fe25f01a..d2e07ba7e89 100644 --- a/ext/dom/namednodemap.c +++ b/ext/dom/namednodemap.c @@ -214,6 +214,11 @@ PHP_FUNCTION(dom_namednodemap_item) return; } if (index >= 0) { + if (ZEND_LONG_INT_OVFL(index)) { + php_error_docref(NULL, E_WARNING, "Invalid index"); + RETURN_NULL(); + } + intern = Z_DOMOBJ_P(id); objmap = (dom_nnodemap_object *)intern->ptr; From 360f96e21614956e79554297b04a5c015d8fde3c Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Mon, 14 Sep 2015 23:46:10 +0200 Subject: [PATCH 010/856] bump versions in master --- configure.in | 2 +- main/php_version.h | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/configure.in b/configure.in index 4e0d7a68e03..0d62c488b1e 100644 --- a/configure.in +++ b/configure.in @@ -118,7 +118,7 @@ int zend_sprintf(char *buffer, const char *format, ...); ]) PHP_MAJOR_VERSION=7 -PHP_MINOR_VERSION=0 +PHP_MINOR_VERSION=1 PHP_RELEASE_VERSION=0 PHP_EXTRA_VERSION="-dev" PHP_VERSION="$PHP_MAJOR_VERSION.$PHP_MINOR_VERSION.$PHP_RELEASE_VERSION$PHP_EXTRA_VERSION" diff --git a/main/php_version.h b/main/php_version.h index d48ab241411..4714e5dc4b1 100644 --- a/main/php_version.h +++ b/main/php_version.h @@ -1,8 +1,8 @@ /* automatically generated by configure */ /* edit configure.in to change version number */ #define PHP_MAJOR_VERSION 7 -#define PHP_MINOR_VERSION 0 +#define PHP_MINOR_VERSION 1 #define PHP_RELEASE_VERSION 0 #define PHP_EXTRA_VERSION "-dev" -#define PHP_VERSION "7.0.0-dev" -#define PHP_VERSION_ID 70000 +#define PHP_VERSION "7.1.0-dev" +#define PHP_VERSION_ID 70100 From 83bba5dfdd4bc608ed7a6a1001a11a6660372edd Mon Sep 17 00:00:00 2001 From: Christopher Jones Date: Tue, 15 Sep 2015 10:06:29 +1000 Subject: [PATCH 011/856] Improve row fetch changes for PHP7. Update test SKIPIFs. Add test for 11g client (Senthil) --- ext/oci8/oci8.c | 32 +-- ext/oci8/tests/bind_sqltnum_11g.phpt | 279 +++++++++++++++++++++++++++ ext/oci8/tests/drcp_cclass1.phpt | 3 + ext/oci8/tests/drcp_privileged.phpt | 3 + ext/oci8/tests/driver_name.phpt | 5 +- 5 files changed, 298 insertions(+), 24 deletions(-) create mode 100644 ext/oci8/tests/bind_sqltnum_11g.phpt diff --git a/ext/oci8/oci8.c b/ext/oci8/oci8.c index 01b2414a9e3..eed4a1c8f88 100644 --- a/ext/oci8/oci8.c +++ b/ext/oci8/oci8.c @@ -2634,7 +2634,7 @@ int php_oci_column_to_zval(php_oci_out_column *column, zval *value, int mode) void php_oci_fetch_row (INTERNAL_FUNCTION_PARAMETERS, int mode, int expected_args) { zval *z_statement, *array; - zval *placeholder; + zval *placeholder = (zval*) NULL; /* zend_array *temp_array = (zend_array *) NULL;*/ php_oci_statement *statement; /* statement that will be fetched from */ #if (OCI_MAJOR_VERSION >= 12) @@ -2655,6 +2655,12 @@ void php_oci_fetch_row (INTERNAL_FUNCTION_PARAMETERS, int mode, int expected_arg if (ZEND_NUM_ARGS() == 2) { fetch_mode = mode; } + + if (Z_ISREF_P(array)) + placeholder = Z_REFVAL_P(array); + else + placeholder = array; + } else if (expected_args == 2) { /* only for oci_fetch_array() */ @@ -2743,14 +2749,10 @@ void php_oci_fetch_row (INTERNAL_FUNCTION_PARAMETERS, int mode, int expected_arg } #endif /* OCI_MAJOR_VERSION */ - if (expected_args > 2) { - if (Z_ISREF_P(array)) - placeholder = Z_REFVAL_P(array); - else - placeholder = array; - zval_dtor(placeholder); - } else { + if (placeholder == NULL) { placeholder = return_value; + } else { + zval_dtor(placeholder); } array_init(placeholder); @@ -2792,20 +2794,6 @@ void php_oci_fetch_row (INTERNAL_FUNCTION_PARAMETERS, int mode, int expected_arg } if (expected_args > 2) { - /* Only for ocifetchinto BC. In all other cases we return array, not long */ -#if 0 - zval *temp_array; - if (Z_ISREF_P(array)) - temp_array = Z_REFVAL_P(array); - else /* PHP7 will pass user buffer through 'array' as reference type. - * So this part of code may not be reached. */ - temp_array = array; - - /* copy array content in return_value into user buffer passed through - * reference variable 'array' */ - ZVAL_ARR(temp_array, Z_ARRVAL_P(return_value)); - zval_ptr_dtor(return_value); -#endif RETURN_LONG(statement->ncolumns); } } diff --git a/ext/oci8/tests/bind_sqltnum_11g.phpt b/ext/oci8/tests/bind_sqltnum_11g.phpt new file mode 100644 index 00000000000..1969893604c --- /dev/null +++ b/ext/oci8/tests/bind_sqltnum_11g.phpt @@ -0,0 +1,279 @@ +--TEST-- +Bind with SQLT_NUM +--SKIPIF-- + +--FILE-- + +===DONE=== + +--EXPECTF-- +Test 1 - baseline test +array(2) { + ["ID"]=> + array(1) { + [0]=> + string(3) "100" + } + ["VARCHAR2_T10"]=> + array(1) { + [0]=> + string(4) "Hood" + } +} +Test 2 - SQLT_NUM to a VARCHAR2 column + +Warning: oci_execute(): ORA-12899: %s (%s: 40, %s: 10) in %sbind_sqltnum_11g.php on line %d +string(%d) "ORA-12899: %s" + +TEST41 wrong bind type SQLT_NUM + +Warning: oci_execute(): ORA-12899: %s "%s"."BIND_SQLTNUM_TAB"."VARCHAR2_T10" (%s: 40, %s: 10) in %sbind_sqltnum_11g.php on line %d + +TEST42 insert numbers SQLT_NUM +array(1) { + ["NUMBER_T"]=> + array(1) { + [0]=> + NULL + } +} + +TEST43 insert numbers SQLT_NUM +array(1) { + ["NUMBER_T"]=> + array(1) { + [0]=> + NULL + } +} + +TEST44 +array(1) { + ["NUMBER_T"]=> + array(1) { + [0]=> + string(127) "-000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } +} + +TEST45 +array(1) { + ["NUMBER_T"]=> + array(1) { + [0]=> + NULL + } +} + +TEST46 insert numbers +array(1) { + ["NUMBER_T"]=> + array(1) { + [0]=> + NULL + } +} + +TEST47 +array(1) { + ["NUMBER_T"]=> + array(1) { + [0]=> + NULL + } +} + +TEST48 +array(1) { + ["NUMBER_T92"]=> + array(1) { + [0]=> + string(1) "0" + } +} + +TEST49 +array(1) { + ["NUMBER_T92"]=> + array(1) { + [0]=> + string(1) "0" + } +} + +TEST50 + +Warning: oci_execute(): ORA-01438: %s in %sbind_sqltnum_11g.php on line %d +array(1) { + ["NUMBER_T92"]=> + array(0) { + } +} +===DONE=== diff --git a/ext/oci8/tests/drcp_cclass1.phpt b/ext/oci8/tests/drcp_cclass1.phpt index 5c78a2943e9..0a929317bb2 100644 --- a/ext/oci8/tests/drcp_cclass1.phpt +++ b/ext/oci8/tests/drcp_cclass1.phpt @@ -5,6 +5,9 @@ DRCP: Test setting connection class inline if (!extension_loaded('oci8')) die ("skip no oci8 extension"); require(dirname(__FILE__).'/connect.inc'); if (!$test_drcp) die("skip testing DRCP connection class only works in DRCP mode"); +// Looked for :pooled in EZ connect string +if (strpos($dbase, "/") !== false && stripos($dbase, ":pooled") === false) + die('skip DRCP test requires a DRCP pooled server connection'); if (strcasecmp($user, "system") && strcasecmp($user, "sys")) die("skip needs to be run as a DBA user"); preg_match('/.*Release ([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)*/', oci_server_version($c), $matches_sv); diff --git a/ext/oci8/tests/drcp_privileged.phpt b/ext/oci8/tests/drcp_privileged.phpt index 3871341bc50..c57216672f4 100644 --- a/ext/oci8/tests/drcp_privileged.phpt +++ b/ext/oci8/tests/drcp_privileged.phpt @@ -5,6 +5,9 @@ DRCP: privileged connect if (!extension_loaded('oci8')) die("skip no oci8 extension"); require(dirname(__FILE__)."/connect.inc"); if (!$test_drcp) die("skip requires DRCP connection"); +// Looked for :pooled in EZ connect string +if (strpos($dbase, "/") !== false && stripos($dbase, ":pooled") === false) + die('skip DRCP test requires a DRCP pooled server connection'); if (strcasecmp($user, "system") && strcasecmp($user, "sys")) die("skip needs to be run as a DBA user"); ob_start(); phpinfo(INFO_MODULES); diff --git a/ext/oci8/tests/driver_name.phpt b/ext/oci8/tests/driver_name.phpt index ffef0328d94..758e3979a76 100644 --- a/ext/oci8/tests/driver_name.phpt +++ b/ext/oci8/tests/driver_name.phpt @@ -8,8 +8,9 @@ if (strcasecmp($user, "system") && strcasecmp($user, "sys")) die("skip needs to if ($test_drcp) die("skip as Output might vary with DRCP"); preg_match('/.*Release ([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)*/', oci_server_version($c), $matches); -if (!(isset($matches[0]) && ($matches[1] == 12 && $matches[2] == 1 && $matches[3] >= 0 - && $matches[4] >= 2) || ($matches[1] == 12 && $matches[2] > 1))) +if (!(isset($matches[0]) && + ($matches[1] == 12 && $matches[2] == 1 && $matches[3] >= 0 + && $matches[4] >= 2) || ($matches[1] == 12 && $matches[2] > 1))) { die("skip test expected to work only with Oracle 12.1.0.2 database or its later patchsets"); } From 022866c75ff88958c4b9e0d3fa8c3913496ba1aa Mon Sep 17 00:00:00 2001 From: Sebastian Bergmann Date: Tue, 15 Sep 2015 17:47:17 +0200 Subject: [PATCH 012/856] Fugbix typo --- UPGRADING | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/UPGRADING b/UPGRADING index 7d4ccca3bea..5c8526db295 100644 --- a/UPGRADING +++ b/UPGRADING @@ -554,7 +554,7 @@ Other without SHM at all, using opcache.file_cache_only=1 (this may be useful for sharing hosting), and disable file cache consistency check, to speedup loading at the cost of safety, using opcache.file_cache_consistency_checks=0. - . Added an experemental ability to move PHP code pages (PHP TEXT segment) into + . Added an experimental ability to move PHP code pages (PHP TEXT segment) into HUGE pages. To enable it, PHP should be configured and built with --enable-huge-code-pages, OS should be configured to provide huge pages. It's possible to enable/disable this feature in php.ini through From 6bdc28dccbc48e752db0b68bc2e91388f1ea42eb Mon Sep 17 00:00:00 2001 From: "Edgar R. Sandi" Date: Wed, 16 Sep 2015 08:38:35 -0300 Subject: [PATCH 013/856] adding test scenario to improve coverage --- ext/date/tests/date_sun_info_003.phpt | 42 +++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 ext/date/tests/date_sun_info_003.phpt diff --git a/ext/date/tests/date_sun_info_003.phpt b/ext/date/tests/date_sun_info_003.phpt new file mode 100644 index 00000000000..3ff7a06df1f --- /dev/null +++ b/ext/date/tests/date_sun_info_003.phpt @@ -0,0 +1,42 @@ +--TEST-- +Test basic date_sun_info() +--CREDITS-- +edgarsandi - +--FILE-- + $elem ) { + echo "$key: " . date("H:i:s", $elem) . "\n"; +} + +echo "\n"; + +$sun_info = date_sun_info(strtotime("2015-09-12 00:00:00 UTC"), 89.00, 1.00); +foreach ($sun_info as $key => $elem ) { + echo "$key: " . date("H:i:s", $elem) . "\n"; +} + +echo "Done\n"; +?> +--EXPECTF-- +sunrise: 21:00:00 +sunset: 21:00:00 +transit: 10:04:02 +civil_twilight_begin: 21:00:00 +civil_twilight_end: 21:00:00 +nautical_twilight_begin: 21:00:00 +nautical_twilight_end: 21:00:00 +astronomical_twilight_begin: 21:00:00 +astronomical_twilight_end: 21:00:00 + +sunrise: 21:00:01 +sunset: 21:00:01 +transit: 08:52:30 +civil_twilight_begin: 21:00:01 +civil_twilight_end: 21:00:01 +nautical_twilight_begin: 21:00:01 +nautical_twilight_end: 21:00:01 +astronomical_twilight_begin: 21:00:01 +astronomical_twilight_end: 21:00:01 +Done \ No newline at end of file From 0f71d006e8335bc64275fd976fc310e43e3d8add Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Thu, 17 Sep 2015 13:19:30 +0200 Subject: [PATCH 014/856] make room for next UPGRADING notes --- UPGRADING | 727 +------------------------------------------- UPGRADING.INTERNALS | 285 +---------------- 2 files changed, 2 insertions(+), 1010 deletions(-) diff --git a/UPGRADING b/UPGRADING index aa5f82c49ab..18a69cb1908 100644 --- a/UPGRADING +++ b/UPGRADING @@ -1,4 +1,4 @@ -PHP 7.0 UPGRADE NOTES +PHP 7.1 UPGRADE NOTES 1. Backward Incompatible Changes 2. New Features @@ -19,776 +19,51 @@ 1. Backward Incompatible Changes ======================================== -Language changes -================ - -Changes to variable handling ----------------------------- - -* Indirect variable, property and method references are now interpreted with - left-to-right semantics. Some examples: - - $$foo['bar']['baz'] // interpreted as ($$foo)['bar']['baz'] - $foo->$bar['baz'] // interpreted as ($foo->$bar)['baz'] - $foo->$bar['baz']() // interpreted as ($foo->$bar)['baz']() - Foo::$bar['baz']() // interpreted as (Foo::$bar)['baz']() - - To restore the previous behavior add explicit curly braces: - - ${$foo['bar']['baz']} - $foo->{$bar['baz']} - $foo->{$bar['baz']}() - Foo::{$bar['baz']}() - -* The global keyword now only accepts simple variables. Instead of - - global $$foo->bar; - - it is now required to write the following: - - global ${$foo->bar}; - -* Parentheses around variables or function calls no longer have any influence - on behavior. For example the following code, where the result of a function - call is passed to a by-reference function - - function getArray() { return [1, 2, 3]; } - - $last = array_pop(getArray()); - // Strict Standards: Only variables should be passed by reference - $last = array_pop((getArray())); - // Strict Standards: Only variables should be passed by reference - - will now throw a strict standards error regardless of whether parentheses - are used. Previously no notice was generated in the second case. - -* Array elements or object properties that are automatically created during - by-reference assignments will now result in a different order. For example - - $array = []; - $array["a"] =& $array["b"]; - $array["b"] = 1; - var_dump($array); - - now results in the array ["a" => 1, "b" => 1], while previously the result - was ["b" => 1, "a" => 1]; - -Relevant RFCs: -* https://wiki.php.net/rfc/uniform_variable_syntax -* https://wiki.php.net/rfc/abstract_syntax_tree - -Changes to list() ------------------ - -* list() will no longer assign variables in reverse order. For example - - list($array[], $array[], $array[]) = [1, 2, 3]; - var_dump($array); - - will now result in $array == [1, 2, 3] rather than [3, 2, 1]. Note that only - the **order** of the assignments changed, but the assigned values stay the - same. E.g. a normal usage like - - list($a, $b, $c) = [1, 2, 3]; - // $a = 1; $b = 2; $c = 3; - - will retain its current behavior. - -* Empty list() assignments are no longer allowed. As such all of the following - are invalid: - - list() = $a; - list(,,) = $a; - list($x, list(), $y) = $a; - -* list() no longer supports unpacking strings (while previously this was only - supported in some cases). The code - - $string = "xy"; - list($x, $y) = $string; - - will now result in $x == null and $y == null (without notices) instead of - $x == "x" and $y == "y". Furthermore list() is now always guaranteed to - work with objects implementing ArrayAccess, e.g. - - list($a, $b) = (object) new ArrayObject([0, 1]); - - will now result in $a == 0 and $b == 1. Previously both $a and $b were null. - -Relevant RFCs: -* https://wiki.php.net/rfc/abstract_syntax_tree#changes_to_list -* https://wiki.php.net/rfc/fix_list_behavior_inconsistency - -Changes to foreach ------------------- - -* Iteration with foreach() no longer has any effect on the internal array - pointer, which can be accessed through the current()/next()/etc family of - functions. For example - - $array = [0, 1, 2]; - foreach ($array as &$val) { - var_dump(current($array)); - } - - will now print the value int(0) three times. Previously the output was int(1), - int(2) and bool(false). - -* When iterating arrays by-value, foreach will now always operate on a copy of - the array, as such changes to the array during iteration will not influence - iteration behavior. For example - - $array = [0, 1, 2]; - $ref =& $array; // Necessary to trigger the old behavior - foreach ($array as $val) { - var_dump($val); - unset($array[1]); - } - - will now print all three elements (0 1 2), while previously the second element - 1 was skipped (0 2). - -* When iterating arrays by-reference, modifications to the array will continue - to influence the iteration. However PHP will now do a better job of - maintaining a correct position in a number of cases. E.g. appending to an - array during by-reference iteration - - $array = [0]; - foreach ($array as &$val) { - var_dump($val); - $array[1] = 1; - } - - will now iterate over the appended element as well. As such the output of this - example will now be "int(0) int(1)", while previously it was only "int(0)". - -* Iteration of plain (non-Traversable) objects by-value or by-reference will - behave like by-reference iteration of arrays. This matches the previous - behavior apart from the more accurate position management mentioned in the - previous point. - -* Iteration of Traversable objects remains unchanged. - -Relevant RFC: https://wiki.php.net/rfc/php7_foreach - -Changes to parameter handling ------------------------------ - -* It is no longer possible to define two function parameters with the same name. - For example, the following method will trigger a compile-time error: - - public function foo($a, $b, $unused, $unused) { - // ... - } - - Code like this should be changed to use distinct parameter names, for example: - - public function foo($a, $b, $unused1, $unused2) { - // ... - } - -* The func_get_arg() and func_get_args() functions will no longer return the - original value that was passed to a parameter and will instead provide the - current value (which might have been modified). For example - - function foo($x) { - $x++; - var_dump(func_get_arg(0)); - } - foo(1); - - will now print "2" instead of "1". This code should be changed to either - perform modifications only after calling func_get_arg(s) - - function foo($x) { - var_dump(func_get_arg(0)); - $x++; - } - - or avoid modifying the parameters altogether: - - function foo($x) { - $newX = $x + 1; - var_dump(func_get_arg(0)); - } - -* Similarly exception backtraces will no longer display the original value that - was passed to a function and show the modified value instead. For example - - function foo($x) { - $x = 42; - throw new Exception; - } - foo("string"); - - will now result in the stack trace - - Stack trace: - #0 file.php(4): foo(42) - #1 {main} - - while previously it was: - - Stack trace: - #0 file.php(4): foo('string') - #1 {main} - - While this should not impact runtime behavior of your code, it is worthwhile - to be aware of this difference for debugging purposes. - - The same limitation also applies to debug_backtrace() and other functions - inspecting function arguments. - -Relevant RFC: https://wiki.php.net/phpng - -Changes to integer handling ---------------------------- - -* Invalid octal literals (containing digits larger than 7) now produce compile - errors. For example, the following is no longer valid: - - $i = 0781; // 8 is not a valid octal digit! - - Previously the invalid digits (and any following valid digits) were simply - ignored. As such $i previously held the value 7, because the last two digits - were silently discarded. - -* Bitwise shifts by negative numbers will now throw an ArithmeticError: - - var_dump(1 >> -1); - // ArithmeticError: Bit shift by negative number - -* Left bitwise shifts by a number of bits beyond the bit width of an integer - will always result in 0: - - var_dump(1 << 64); // int(0) - - Previously the behavior of this code was dependent on the used CPU - architecture. For example on x86 (including x86-64) the result was int(1), - because the shift operand was wrapped. - -* Similarly right bitwise shifts by a number of bits beyond the bit width of an - integer will always result in 0 or -1 (depending on sign): - - var_dump(1 >> 64); // int(0) - var_dump(-1 >> 64); // int(-1) - -Relevant RFC: https://wiki.php.net/rfc/integer_semantics - -Changes to string handling --------------------------- - -* Strings that contain hexadecimal numbers are no longer considered to be - numeric and don't receive special treatment anymore. Some examples of the - new behavior: - - var_dump("0x123" == "291"); // bool(false) (previously true) - var_dump(is_numeric("0x123")); // bool(false) (previously true) - var_dump("0xe" + "0x1"); // int(0) (previously 16) - - var_dump(substr("foo", "0x1")); // string(3) "foo" (previously "oo") - // Notice: A non well formed numeric value encountered - - filter_var() can be used to check if a string contains a hexadecimal number - or convert such a string into an integer: - - $str = "0xffff"; - $int = filter_var($str, FILTER_VALIDATE_INT, FILTER_FLAG_ALLOW_HEX); - if (false === $int) { - throw new Exception("Invalid integer!"); - } - var_dump($int); // int(65535) - -* Due to the addition of the Unicode Codepoint Escape Syntax for double-quoted - strings and heredocs, "\u{" followed by an invalid sequence will now result in - an error: - - $str = "\u{xyz}"; // Fatal error: Invalid UTF-8 codepoint escape sequence - - To avoid this the leading backslash should be escaped: - - $str = "\\u{xyz}"; // Works fine - - However, "\u" without a following { is unaffected. As such the following code - won't error and will work the same as before: - - $str = "\u202e"; // Works fine - -Relevant RFCs: -* https://wiki.php.net/rfc/remove_hex_support_in_numeric_strings -* https://wiki.php.net/rfc/unicode_escape - -Changes to error handling -------------------------- - -* There are now two exception classes: Exception and Error. Both classes - implement a new interface Throwable. Type hints in exception handling code - may need to be changed to account for this. - -* Some fatal errors and recoverable fatal errors now throw an Error instead. - As Error is a separate class from Exception, these exceptions will not be - caught by existing try/catch blocks. - - For the recoverable fatal errors which have been converted into an exception, - it is no longer possible to silently ignore the error from an error handler. - In particular, it is no longer possible to ignore type hint failures. - -* Parser errors now generate a ParseError that extends Error. Error - handling for eval()s on potentially invalid code should be changed to catch - ParseError in addition to the previous return value / error_get_last() - based handling. - -* Constructors of internal classes will now always throw an exception on - failure. Previously some constructors returned NULL or an unusable object. - -* The error level of some E_STRICT notices has been changed. - -Relevant RFCs: -* https://wiki.php.net/rfc/engine_exceptions_for_php7 -* https://wiki.php.net/rfc/throwable-interface -* https://wiki.php.net/rfc/internal_constructor_behaviour -* https://wiki.php.net/rfc/reclassify_e_strict - -Other language changes ----------------------- - -* Removed support for static calls to non-static calls form an incompatible - $this context. In this case $this will not be defined, but the call will be - allowed with a deprecation notice. An example: - - class A { - public function test() { var_dump($this); } - } - - // Note: Does NOT extend A - class B { - public function callNonStaticMethodOfA() { A::test(); } - } - - (new B)->callNonStaticMethodOfA(); - - // Deprecated: Non-static method A::test() should not be called statically - // Notice: Undefined variable $this - NULL - - Note that this only applies to calls from an incompatible context. If class B - extended from A the call would be allowed without any notices. - -* It is no longer possible to use the following class, interface and trait names - (case-insensitive): - - bool - int - float - string - null - false - true - - This applies to class/interface/trait declarations, class_alias() and use - statements. - - Furthermore the following class, interface and trait names are now reserved - for future use, but do not yet throw an error when used: - - resource - object - mixed - numeric - -* The yield language construct no longer requires parentheses when used in an - expression context. It is now a right-associative operator with precedence - between the "print" and "=>" operators. This can result in different behavior - in some cases, for example: - - echo yield -1; - // Was previously interpreted as - echo (yield) - 1; - // And is now interpreted as - echo yield (-1); - - yield $foo or die; - // Was previously interpreted as - yield ($foo or die); - // And is now interpreted as - (yield $foo) or die; - - Such cases can always be resolved by adding additional parentheses. - - . Removed ASP (<%) and script (