From f6e8ce812174343b5c9fd1860f9e2e2864428567 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Fri, 27 Oct 2017 13:16:56 +0200 Subject: [PATCH 01/26] Backport and apply upstream patch for CVE-2017-14107 --- ext/zip/lib/zip_open.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/ext/zip/lib/zip_open.c b/ext/zip/lib/zip_open.c index d91fe469dbe..3616cc54480 100644 --- a/ext/zip/lib/zip_open.c +++ b/ext/zip/lib/zip_open.c @@ -726,7 +726,12 @@ _zip_read_eocd64(FILE *f, const zip_uint8_t *eocd64loc, const zip_uint8_t *buf, _zip_error_set(error, ZIP_ER_SEEK, EFBIG); return NULL; } - if ((flags & ZIP_CHECKCONS) && offset+size != eocd_offset) { + if (offset+size > buf_offset + eocd_offset) { + /* cdir spans past EOCD record */ + _zip_error_set(error, ZIP_ER_INCONS, 0); + return NULL; + } + if ((flags & ZIP_CHECKCONS) && offset+size != buf_offset + eocd_offset) { _zip_error_set(error, ZIP_ER_INCONS, 0); return NULL; } From 10dc1950f734e41ae001f295b12b54114e247c5e Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Fri, 27 Oct 2017 13:20:15 +0200 Subject: [PATCH 02/26] Apply upstream patch for CVE-2017-14107 --- ext/zip/lib/zip_open.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/ext/zip/lib/zip_open.c b/ext/zip/lib/zip_open.c index d6209ee1e76..29409b747db 100644 --- a/ext/zip/lib/zip_open.c +++ b/ext/zip/lib/zip_open.c @@ -837,7 +837,12 @@ _zip_read_eocd64(zip_source_t *src, zip_buffer_t *buffer, zip_uint64_t buf_offse zip_error_set(error, ZIP_ER_SEEK, EFBIG); return NULL; } - if ((flags & ZIP_CHECKCONS) && offset+size != eocd_offset) { + if (offset+size > buf_offset + eocd_offset) { + /* cdir spans past EOCD record */ + zip_error_set(error, ZIP_ER_INCONS, 0); + return NULL; + } + if ((flags & ZIP_CHECKCONS) && offset+size != buf_offset + eocd_offset) { zip_error_set(error, ZIP_ER_INCONS, 0); return NULL; } From 24b1bb0abd83f59c6d8ca79a0decdfd739f5aae6 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Fri, 27 Oct 2017 14:58:43 +0200 Subject: [PATCH 03/26] Fix test compat for PostgreSQL 10 --- ext/pgsql/tests/pg_update_001.phpt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/pgsql/tests/pg_update_001.phpt b/ext/pgsql/tests/pg_update_001.phpt index 60db35c157b..85a86f3d231 100644 --- a/ext/pgsql/tests/pg_update_001.phpt +++ b/ext/pgsql/tests/pg_update_001.phpt @@ -24,7 +24,7 @@ var_dump(pg_update($conn, 'foo', array('id' => 10), array('id' => 1), PGSQL_DML_ pg_update($conn, 'phptests.foo', array('id' => 100), array('id2' => 2)); var_dump(pg_update($conn, 'phptests.foo', array('id' => 100), array('id2' => 2), PGSQL_DML_STRING)); -$rs = pg_query('SELECT * FROM foo UNION SELECT * FROM phptests.foo'); +$rs = pg_query('SELECT * FROM foo UNION SELECT * FROM phptests.foo ORDER BY id'); while ($row = pg_fetch_assoc($rs)) { var_dump($row); } From e751e6cebad959592f223f99ffd2a60cdf51bed0 Mon Sep 17 00:00:00 2001 From: Sara Golemon Date: Fri, 27 Oct 2017 10:00:17 -0400 Subject: [PATCH 04/26] Do not create a new array when slicing all of input array. --- NEWS | 2 ++ ext/standard/array.c | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/NEWS b/NEWS index 58b2e59ee09..ef0827faaf3 100644 --- a/NEWS +++ b/NEWS @@ -109,6 +109,8 @@ PHP NEWS - Standard: . Fixed unzserialize(), to disable creation of unsupported data structures through manually crafted strings. (Dmitry) + . Short circuit case where array_slice() would return its original array. + (Sara, Benjamin Coutu) - Zlib: . Added zlib/level context option for compress.zlib wrapper. (Sara) diff --git a/ext/standard/array.c b/ext/standard/array.c index 2a0053ee8b5..89f0370461c 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -3563,6 +3563,14 @@ PHP_FUNCTION(array_slice) return; } + if ((offset == 0) && (length >= num_in) && + HT_IS_PACKED(Z_ARRVAL_P(input)) && + HT_IS_WITHOUT_HOLES(Z_ARRVAL_P(input))) { + /* No real slicing, and the keys will be 0..n-1, so just copy */ + ZVAL_COPY(return_value, input); + return; + } + /* Initialize returned array */ array_init_size(return_value, (uint32_t)length); From fabb5b7a7421280b43e6f11c59d9446f6b21e3e6 Mon Sep 17 00:00:00 2001 From: Sara Golemon Date: Fri, 27 Oct 2017 10:13:17 -0400 Subject: [PATCH 05/26] array_slice() passthrough for preserve_keys=true as well --- ext/standard/array.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/ext/standard/array.c b/ext/standard/array.c index 89f0370461c..ba09225f795 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -3563,12 +3563,13 @@ PHP_FUNCTION(array_slice) return; } - if ((offset == 0) && (length >= num_in) && - HT_IS_PACKED(Z_ARRVAL_P(input)) && - HT_IS_WITHOUT_HOLES(Z_ARRVAL_P(input))) { - /* No real slicing, and the keys will be 0..n-1, so just copy */ - ZVAL_COPY(return_value, input); - return; + if ((offset == 0) && (length >= num_in)) { + zend_array *ht = Z_ARRVAL_P(input); + if (preserve_keys || (HT_IS_PACKED(ht) && HT_IS_WITHOUT_HOLES(ht))) { + /* No real slicing, and the keys will match, so just copy */ + ZVAL_COPY(return_value, input); + return; + } } /* Initialize returned array */ From 15a71fe045a476e864900657fc8d4d3586aafd02 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Fri, 27 Oct 2017 16:19:42 +0200 Subject: [PATCH 06/26] Skip test on PostgreSQL 10 The 42P18 error is not produced by the server anymore. --- ext/pdo_pgsql/tests/bug48764.phpt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/pdo_pgsql/tests/bug48764.phpt b/ext/pdo_pgsql/tests/bug48764.phpt index 715c60a68f5..d102a055b08 100644 --- a/ext/pdo_pgsql/tests/bug48764.phpt +++ b/ext/pdo_pgsql/tests/bug48764.phpt @@ -12,7 +12,7 @@ $db = PDOTest::factory(); $client_version = $db->getAttribute(PDO::ATTR_CLIENT_VERSION); $server_version = $db->getAttribute(PDO::ATTR_SERVER_VERSION); -if (version_compare($server_version, '7.4', '<') || version_compare($client_version, '7.4', '<')) { +if (version_compare($server_version, '7.4', '<') || version_compare($client_version, '7.4', '<') || version_compare($server_version, '10', '>=')) { die('skip'); } From 51ea2cfbe1c8c3cbfdc381c6f2ff4d43af520938 Mon Sep 17 00:00:00 2001 From: Fabien Villepinte Date: Fri, 27 Oct 2017 14:14:04 +0200 Subject: [PATCH 07/26] Fix bug #75307 Wrong reflection for openssl_open function --- NEWS | 1 + ext/openssl/openssl.c | 9 +++++---- ext/openssl/tests/bug75307.phpt | 18 ++++++++++++++++++ 3 files changed, 24 insertions(+), 4 deletions(-) create mode 100644 ext/openssl/tests/bug75307.phpt diff --git a/NEWS b/NEWS index e3d81786460..d1cfc0f8a4f 100644 --- a/NEWS +++ b/NEWS @@ -37,6 +37,7 @@ PHP NEWS - OpenSSL: . Fixed bug #75363 (openssl_x509_parse leaks memory). (Bob, Jakub Zelenka) + . Fixed bug #75307 (Wrong reflection for openssl_open function). (villfa) - PGSQL: . Fixed bug #75419 (Default link incorrectly cleared/linked by pg_close()). (Sara) diff --git a/ext/openssl/openssl.c b/ext/openssl/openssl.c index 9b8a2fc9682..41d65533a55 100644 --- a/ext/openssl/openssl.c +++ b/ext/openssl/openssl.c @@ -358,17 +358,18 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_openssl_seal, 0, 0, 4) ZEND_ARG_INFO(0, data) ZEND_ARG_INFO(1, sealdata) - ZEND_ARG_INFO(1, ekeys) /* arary */ + ZEND_ARG_INFO(1, ekeys) /* array */ ZEND_ARG_INFO(0, pubkeys) /* array */ ZEND_ARG_INFO(0, method) ZEND_ARG_INFO(1, iv) ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_INFO(arginfo_openssl_open, 0) +ZEND_BEGIN_ARG_INFO_EX(arginfo_openssl_open, 0, 0, 4) ZEND_ARG_INFO(0, data) ZEND_ARG_INFO(1, opendata) ZEND_ARG_INFO(0, ekey) ZEND_ARG_INFO(0, privkey) + ZEND_ARG_INFO(0, method) ZEND_ARG_INFO(0, iv) ZEND_END_ARG_INFO() @@ -5336,7 +5337,7 @@ PHP_FUNCTION(openssl_verify) } /* }}} */ -/* {{{ proto int openssl_seal(string data, &string sealdata, &array ekeys, array pubkeys) +/* {{{ proto int openssl_seal(string data, &string sealdata, &array ekeys, array pubkeys [, string method [, &string iv]])) Seals data */ PHP_FUNCTION(openssl_seal) { @@ -5465,7 +5466,7 @@ clean_exit: } /* }}} */ -/* {{{ proto bool openssl_open(string data, &string opendata, string ekey, mixed privkey) +/* {{{ proto bool openssl_open(string data, &string opendata, string ekey, mixed privkey [, string method [, string iv]]) Opens data */ PHP_FUNCTION(openssl_open) { diff --git a/ext/openssl/tests/bug75307.phpt b/ext/openssl/tests/bug75307.phpt new file mode 100644 index 00000000000..606f7a523be --- /dev/null +++ b/ext/openssl/tests/bug75307.phpt @@ -0,0 +1,18 @@ +--TEST-- +Bug #75307 Wrong reflection for openssl_open function +--SKIPIF-- + +--FILE-- +getNumberOfParameters()); +var_dump($rf->getNumberOfRequiredParameters()); +?> +===DONE=== +--EXPECT-- +int(6) +int(4) +===DONE=== From cc96166f743011c037d9915681b28c363c189e0a Mon Sep 17 00:00:00 2001 From: Sara Golemon Date: Fri, 27 Oct 2017 13:05:38 -0400 Subject: [PATCH 08/26] Don't optimize input arrays with suffix holes --- ext/standard/array.c | 7 +++++-- ext/standard/tests/array/bug75433.phpt | 17 +++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 ext/standard/tests/array/bug75433.phpt diff --git a/ext/standard/array.c b/ext/standard/array.c index 9ddbf1f3bf2..2640d27884c 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -4018,6 +4018,7 @@ PHP_FUNCTION(array_values) zval *input, /* Input array */ *entry; /* An entry in the input array */ zend_array *arrval; + zend_long arrlen; ZEND_PARSE_PARAMETERS_START(1, 1) Z_PARAM_ARRAY(input) @@ -4026,12 +4027,14 @@ PHP_FUNCTION(array_values) arrval = Z_ARRVAL_P(input); /* Return empty input as is */ - if (!zend_hash_num_elements(arrval)) { + arrlen = zend_hash_num_elements(arrval); + if (!arrlen) { RETURN_ZVAL(input, 1, 0); } /* Return vector-like packed arrays as-is */ - if (HT_IS_PACKED(arrval) && HT_IS_WITHOUT_HOLES(arrval)) { + if (HT_IS_PACKED(arrval) && HT_IS_WITHOUT_HOLES(arrval) && + arrval->nNextFreeElement == arrlen) { RETURN_ZVAL(input, 1, 0); } diff --git a/ext/standard/tests/array/bug75433.phpt b/ext/standard/tests/array/bug75433.phpt new file mode 100644 index 00000000000..650c6ca378a --- /dev/null +++ b/ext/standard/tests/array/bug75433.phpt @@ -0,0 +1,17 @@ +--TEST-- +array_values() preserves next index from source array when shallow-copying +--FILE-- + 1 + [1] => 2 + [2] => 4 +) From 938f256ed90ea8b2e371ab6a50b953aa84d2c5f8 Mon Sep 17 00:00:00 2001 From: Fabien Villepinte Date: Sat, 28 Oct 2017 10:40:00 +0200 Subject: [PATCH 09/26] Fix bug #75434 Wrong reflection for mysqli_fetch_all function --- NEWS | 4 ++++ ext/mysqli/mysqli_fe.c | 4 ++-- ext/mysqli/tests/bug75434.phpt | 24 +++++++++++++++++++ ...mysqli_class_mysqli_result_reflection.phpt | 9 ++++++- 4 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 ext/mysqli/tests/bug75434.phpt diff --git a/NEWS b/NEWS index d1cfc0f8a4f..1dc5cf632e7 100644 --- a/NEWS +++ b/NEWS @@ -29,6 +29,10 @@ PHP NEWS . Fixed bug #75317 (UConverter::setDestinationEncoding changes source instead of destination). (andrewnester) +- Mysqli: + . Fixed bug #75434 (Wrong reflection for mysqli_fetch_all function). (Fabien + Villepinte) + - OCI8: . Fixed valgrind issue. (Tianfang Yang) diff --git a/ext/mysqli/mysqli_fe.c b/ext/mysqli/mysqli_fe.c index 3ac899c6601..4f1f4a3527e 100644 --- a/ext/mysqli/mysqli_fe.c +++ b/ext/mysqli/mysqli_fe.c @@ -420,7 +420,7 @@ const zend_function_entry mysqli_functions[] = { PHP_FE(mysqli_fetch_field_direct, arginfo_mysqli_result_and_fieldnr) PHP_FE(mysqli_fetch_lengths, arginfo_mysqli_only_result) #ifdef MYSQLI_USE_MYSQLND - PHP_FE(mysqli_fetch_all, arginfo_mysqli_only_result) + PHP_FE(mysqli_fetch_all, arginfo_mysqli_fetch_array) #endif PHP_FE(mysqli_fetch_array, arginfo_mysqli_fetch_array) PHP_FE(mysqli_fetch_assoc, arginfo_mysqli_only_result) @@ -600,7 +600,7 @@ const zend_function_entry mysqli_result_methods[] = { PHP_FALIAS(fetch_fields, mysqli_fetch_fields, arginfo_mysqli_no_params) PHP_FALIAS(fetch_field_direct, mysqli_fetch_field_direct, arginfo_class_mysqli_result_and_fieldnr) #if defined(MYSQLI_USE_MYSQLND) - PHP_FALIAS(fetch_all, mysqli_fetch_all, arginfo_mysqli_no_params) + PHP_FALIAS(fetch_all, mysqli_fetch_all, arginfo_class_mysqli_fetch_array) #endif PHP_FALIAS(fetch_array, mysqli_fetch_array, arginfo_class_mysqli_fetch_array) PHP_FALIAS(fetch_assoc, mysqli_fetch_assoc, arginfo_mysqli_no_params) diff --git a/ext/mysqli/tests/bug75434.phpt b/ext/mysqli/tests/bug75434.phpt new file mode 100644 index 00000000000..88050ec4a54 --- /dev/null +++ b/ext/mysqli/tests/bug75434.phpt @@ -0,0 +1,24 @@ +--TEST-- +Bug #75434 Wrong reflection for mysqli_fetch_all function +--SKIPIF-- + +--FILE-- +getNumberOfParameters()); +var_dump($rf->getNumberOfRequiredParameters()); + +$rm = new ReflectionMethod('mysqli_result', 'fetch_all'); +var_dump($rm->getNumberOfParameters()); +var_dump($rm->getNumberOfRequiredParameters()); +?> +===DONE=== +--EXPECT-- +int(2) +int(1) +int(1) +int(0) +===DONE=== diff --git a/ext/mysqli/tests/mysqli_class_mysqli_result_reflection.phpt b/ext/mysqli/tests/mysqli_class_mysqli_result_reflection.phpt index 95400e43e0f..8f0ca211438 100644 --- a/ext/mysqli/tests/mysqli_class_mysqli_result_reflection.phpt +++ b/ext/mysqli/tests/mysqli_class_mysqli_result_reflection.phpt @@ -124,9 +124,16 @@ isInternal: yes isUserDefined: no returnsReference: no Modifiers: 256 -Number of Parameters: 0 +Number of Parameters: 1 Number of Required Parameters: 0 +Inspecting parameter 'result_type' of method 'fetch_all' +isArray: no +allowsNull: no +isPassedByReference: no +isOptional: yes +isDefaultValueAvailable: no + Inspecting method 'fetch_array' isFinal: no isAbstract: no From 7d5bf6e2695970345f11c3d137a6b5597d5f67ca Mon Sep 17 00:00:00 2001 From: Michael Kliewe Date: Thu, 26 Oct 2017 12:13:07 -0700 Subject: [PATCH 10/26] Add tests for ftp_rename --- ext/ftp/tests/ftp_rename_basic1.phpt | 23 +++++++++++++++++++++++ ext/ftp/tests/server.inc | 16 +++++++++++----- 2 files changed, 34 insertions(+), 5 deletions(-) create mode 100644 ext/ftp/tests/ftp_rename_basic1.phpt diff --git a/ext/ftp/tests/ftp_rename_basic1.phpt b/ext/ftp/tests/ftp_rename_basic1.phpt new file mode 100644 index 00000000000..3e1facc5038 --- /dev/null +++ b/ext/ftp/tests/ftp_rename_basic1.phpt @@ -0,0 +1,23 @@ +--TEST-- +FTP basic ftp_rename calls +--SKIPIF-- + +--FILE-- + +--EXPECTF-- +bool(true) + +Warning: ftp_rename(): No such file or directory in %sftp_rename_basic1.php on line 10 +bool(false) diff --git a/ext/ftp/tests/server.inc b/ext/ftp/tests/server.inc index a1bf074f90c..11f6e8fa785 100644 --- a/ext/ftp/tests/server.inc +++ b/ext/ftp/tests/server.inc @@ -471,11 +471,17 @@ if ($pid) { }elseif (preg_match('/^LIST no_exists\//', $buf, $matches)) { fputs($s, "425 Error establishing connection\r\n"); - }elseif (preg_match('/^REST (\d+)/', $buf, $matches)) { - $GLOBALS['rest_pos'] = $matches[1]; + }elseif (preg_match('/^REST (\d+)/', $buf, $matches)) { + $GLOBALS['rest_pos'] = $matches[1]; fputs($s, "350 OK\r\n"); - }elseif (preg_match('/^SIZE largefile/', $buf)) { - fputs($s, "213 5368709120\r\n"); + }elseif (preg_match('/^SIZE largefile/', $buf)) { + fputs($s, "213 5368709120\r\n"); + }elseif (preg_match('/^RNFR existing_file/', $buf, $matches)) { + fputs($s, "350 File or directory exists, ready for destination name\r\n"); + }elseif (preg_match('/^RNFR nonexisting_file/', $buf, $matches)) { + fputs($s, "550 No such file or directory\r\n"); + }elseif (preg_match('/^RNTO nonexisting_file/', $buf, $matches)) { + fputs($s, "250 Rename successful\r\n"); }elseif (preg_match('/^MLSD no_exists\//', $buf, $matches)) { fputs($s, "425 Error establishing connection\r\n"); }elseif (preg_match("~^MLSD(?: ([A-Za-z./]+))?\r\n$~", $buf, $m)) { @@ -518,7 +524,7 @@ if ($pid) { fputs($s, "226 Closing data Connection.\r\n"); fclose($fs); - }else { + }else { fputs($s, "500 Syntax error, command unrecognized.\r\n"); dump_and_exit($buf); } From ba0ef9139cd49949a248f469ea7857e57562897f Mon Sep 17 00:00:00 2001 From: Michael Kliewe Date: Thu, 26 Oct 2017 12:21:29 -0700 Subject: [PATCH 11/26] convert spaces to tabs in ext/ftp/tests/server.inc --- ext/ftp/tests/server.inc | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/ext/ftp/tests/server.inc b/ext/ftp/tests/server.inc index 11f6e8fa785..0b161de221b 100644 --- a/ext/ftp/tests/server.inc +++ b/ext/ftp/tests/server.inc @@ -286,7 +286,7 @@ if ($pid) { file_put_contents(__DIR__.'/'.$m[1], $data, FILE_APPEND); fputs($s, "226 Closing data Connection.\r\n"); fclose($fs); - } + } }elseif (preg_match("~^CWD ([A-Za-z./]+)\r\n$~", $buf, $m)) { change_dir($m[1]); @@ -395,17 +395,17 @@ if ($pid) { $transfer_type = $ascii? 'ASCII' : 'BINARY' ; fputs($fs, "Bar\r\n"); fputs($s, "226 Closing data Connection.\r\n"); - break; - case "fget_large": + break; + case "fget_large": fputs($s, "150 File status okay; about to open data connection.\r\n"); - $transfer_type = $ascii? 'ASCII' : 'BINARY' ; - if ($GLOBALS['rest_pos'] == '5368709119') { - fputs($fs, "X"); - } else { - fputs($fs, "Y"); - } + $transfer_type = $ascii? 'ASCII' : 'BINARY' ; + if ($GLOBALS['rest_pos'] == '5368709119') { + fputs($fs, "X"); + } else { + fputs($fs, "Y"); + } fputs($s, "226 Closing data Connection.\r\n"); - break; + break; case "mediumfile": fputs($s, "150 File status okay; about to open data connection.\r\n"); for($i = 0; $i < 150; $i++){ @@ -471,11 +471,11 @@ if ($pid) { }elseif (preg_match('/^LIST no_exists\//', $buf, $matches)) { fputs($s, "425 Error establishing connection\r\n"); - }elseif (preg_match('/^REST (\d+)/', $buf, $matches)) { + }elseif (preg_match('/^REST (\d+)/', $buf, $matches)) { $GLOBALS['rest_pos'] = $matches[1]; fputs($s, "350 OK\r\n"); - }elseif (preg_match('/^SIZE largefile/', $buf)) { - fputs($s, "213 5368709120\r\n"); + }elseif (preg_match('/^SIZE largefile/', $buf)) { + fputs($s, "213 5368709120\r\n"); }elseif (preg_match('/^RNFR existing_file/', $buf, $matches)) { fputs($s, "350 File or directory exists, ready for destination name\r\n"); }elseif (preg_match('/^RNFR nonexisting_file/', $buf, $matches)) { @@ -524,7 +524,7 @@ if ($pid) { fputs($s, "226 Closing data Connection.\r\n"); fclose($fs); - }else { + }else { fputs($s, "500 Syntax error, command unrecognized.\r\n"); dump_and_exit($buf); } From 557edb75c0b80648ad3233b7252b592ba772ee74 Mon Sep 17 00:00:00 2001 From: Fabien Villepinte Date: Wed, 25 Oct 2017 09:49:54 +0200 Subject: [PATCH 12/26] Add tests for UConverter::getStandards() --- .../tests/uconverter_getstandards_basic.phpt | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 ext/intl/tests/uconverter_getstandards_basic.phpt diff --git a/ext/intl/tests/uconverter_getstandards_basic.phpt b/ext/intl/tests/uconverter_getstandards_basic.phpt new file mode 100644 index 00000000000..0ec859327f1 --- /dev/null +++ b/ext/intl/tests/uconverter_getstandards_basic.phpt @@ -0,0 +1,19 @@ +--TEST-- +Basic UConverter::getStandards() usage +--SKIPIF-- + +--FILE-- + 0, '$standards must not be empty'); +assertTrue($standards === array_values($standards), '$standards keys must be numeric'); +assertTrue($standards === array_unique($standards), '$standards values must be unique'); +assertTrue(array_reduce($standards, function($carry, $item) { return $carry && is_string($item); }, true), '$standards values must be strings'); +?> +===DONE=== +--EXPECT-- +===DONE=== From 1a9e64362cdfc6911ecda32d507dab0994909e0a Mon Sep 17 00:00:00 2001 From: Xinchen Hui Date: Sat, 28 Oct 2017 21:38:26 +0800 Subject: [PATCH 13/26] Fixed bug #75451 (Assertion fails while foreach on empty xpath query) --- ext/dom/tests/bug75451.phpt | 18 ++++++++++++++++++ ext/dom/xpath.c | 5 +---- 2 files changed, 19 insertions(+), 4 deletions(-) create mode 100644 ext/dom/tests/bug75451.phpt diff --git a/ext/dom/tests/bug75451.phpt b/ext/dom/tests/bug75451.phpt new file mode 100644 index 00000000000..dae7cde98b5 --- /dev/null +++ b/ext/dom/tests/bug75451.phpt @@ -0,0 +1,18 @@ +--TEST-- +Bug #75451 (Assertion fails while foreach on empty xpath query) +--SKIPIF-- + +--FILE-- +loadXML(''); +$xpath = new DOMXpath($dom); +foreach($xpath->query('/root/noexist') as $child) { + var_dump($child); +} +?> +okey +--EXPECT-- +okey diff --git a/ext/dom/xpath.c b/ext/dom/xpath.c index f0b908ccf3f..31e4dc98b4f 100644 --- a/ext/dom/xpath.c +++ b/ext/dom/xpath.c @@ -432,9 +432,8 @@ static void php_xpath_eval(INTERNAL_FUNCTION_PARAMETERS, int type) /* {{{ */ int i; xmlNodeSetPtr nodesetp; + array_init(&retval); if (xpathobjp->type == XPATH_NODESET && NULL != (nodesetp = xpathobjp->nodesetval) && nodesetp->nodeNr) { - - array_init(&retval); for (i = 0; i < nodesetp->nodeNr; i++) { xmlNodePtr node = nodesetp->nodeTab[i]; zval child; @@ -460,8 +459,6 @@ static void php_xpath_eval(INTERNAL_FUNCTION_PARAMETERS, int type) /* {{{ */ php_dom_create_object(node, &child, &intern->dom); add_next_index_zval(&retval, &child); } - } else { - ZVAL_EMPTY_ARRAY(&retval); } php_dom_create_interator(return_value, DOM_NODELIST); nodeobj = Z_DOMOBJ_P(return_value); From 5c5bd3033997583887bd990e54c68adb2934bbdb Mon Sep 17 00:00:00 2001 From: Peter Kokot Date: Sun, 8 Oct 2017 21:11:53 +0200 Subject: [PATCH 14/26] Remove --with-libmbfl configure option The bundled libmbfl library is no longer API or ABI compatible with the (currently unmaintained) upstream library. As such, building against an external libmbfl is no longer possible. --- ext/mbstring/config.m4 | 263 ++++++++++++++++++---------------------- ext/mbstring/config.w32 | 87 ++++++------- 2 files changed, 152 insertions(+), 198 deletions(-) diff --git a/ext/mbstring/config.m4 b/ext/mbstring/config.m4 index a20ef92f70a..d1054928b76 100644 --- a/ext/mbstring/config.m4 +++ b/ext/mbstring/config.m4 @@ -37,7 +37,7 @@ AC_DEFUN([PHP_MBSTRING_EXTENSION], [ for dir in $PHP_MBSTRING_EXTRA_BUILD_DIRS; do PHP_ADD_BUILD_DIR([$ext_builddir/$dir], 1) done - + for dir in $PHP_MBSTRING_EXTRA_INCLUDES; do PHP_ADD_INCLUDE([$ext_srcdir/$dir]) PHP_ADD_INCLUDE([$ext_builddir/$dir]) @@ -54,8 +54,8 @@ AC_DEFUN([PHP_MBSTRING_EXTENSION], [ out="php_config.h" fi fi - - if test "$PHP_MBSTRING_BUNDLED_ONIG" = "1"; then + + if test "$PHP_MBSTRING_BUNDLED_ONIG" = "1"; then cp $ext_srcdir/oniguruma/src/oniguruma.h $ext_srcdir/oniguruma/oniguruma.h fi @@ -83,12 +83,12 @@ AC_DEFUN([PHP_MBSTRING_SETUP_MBREGEX], [ AC_TRY_RUN([ #include int foo(int x, ...) { - va_list va; - va_start(va, x); - va_arg(va, int); - va_arg(va, char *); - va_arg(va, double); - return 0; + va_list va; + va_start(va, x); + va_arg(va, int); + va_arg(va, char *); + va_arg(va, double); + return 0; } int main() { return foo(10, "", 3.14); } ], [php_cv_mbstring_stdarg=yes], [php_cv_mbstring_stdarg=no], [ @@ -101,21 +101,21 @@ int main() { return foo(10, "", 3.14); } AC_CHECK_SIZEOF(short, 2) AC_CHECK_SIZEOF(long, 4) AC_C_CONST - AC_HEADER_TIME + AC_HEADER_TIME AC_FUNC_ALLOCA AC_FUNC_MEMCMP AC_CHECK_HEADER([stdarg.h], [ AC_DEFINE([HAVE_STDARG_PROTOTYPES], [1], [Define to 1 if you have the header file.]) ], []) AC_DEFINE([PHP_ONIG_BUNDLED], [1], [Define to 1 if the bundled oniguruma is used]) - AC_DEFINE([HAVE_ONIG], [1], [Define to 1 if the oniguruma library is available]) + AC_DEFINE([HAVE_ONIG], [1], [Define to 1 if the oniguruma library is available]) PHP_MBSTRING_ADD_CFLAG([-DNOT_RUBY]) PHP_MBSTRING_ADD_BUILD_DIR([oniguruma]) PHP_MBSTRING_ADD_BUILD_DIR([oniguruma/src]) PHP_MBSTRING_ADD_INCLUDE([oniguruma]) PHP_MBSTRING_ADD_CONFIG_HEADER([oniguruma/src/config.h]) PHP_MBSTRING_ADD_SOURCES([ - oniguruma/src/ascii.c + oniguruma/src/ascii.c oniguruma/src/big5.c oniguruma/src/cp1251.c oniguruma/src/euc_jp.c @@ -180,7 +180,7 @@ int main() { return foo(10, "", 3.14); } PHP_CHECK_LIBRARY(onig, onig_init, [ PHP_ADD_LIBRARY_WITH_PATH(onig, $PHP_ONIG/$PHP_LIBDIR, MBSTRING_SHARED_LIBADD) - AC_DEFINE([HAVE_ONIG], [1], [Define to 1 if the oniguruma library is available]) + AC_DEFINE([HAVE_ONIG], [1], [Define to 1 if the oniguruma library is available]) ],[ AC_MSG_ERROR([Problem with oniguruma. Please check config.log for more information.]) ], [ @@ -214,135 +214,108 @@ return (int)(ONIG_ENCODING_KOI8 + 1); ]) AC_DEFUN([PHP_MBSTRING_SETUP_LIBMBFL], [ - dnl libmbfl is required and can not be disabled - if test "$PHP_LIBMBFL" = "yes" || test "$PHP_LIBMBFL" = "no"; then - dnl - dnl Bundled libmbfl - dnl - PHP_MBSTRING_ADD_BUILD_DIR([libmbfl]) - PHP_MBSTRING_ADD_BUILD_DIR([libmbfl/mbfl]) - PHP_MBSTRING_ADD_BUILD_DIR([libmbfl/filters]) - PHP_MBSTRING_ADD_BUILD_DIR([libmbfl/nls]) - PHP_MBSTRING_ADD_INCLUDE([libmbfl]) - PHP_MBSTRING_ADD_INCLUDE([libmbfl/mbfl]) - PHP_MBSTRING_ADD_CONFIG_HEADER([libmbfl/config.h]) + dnl + dnl Bundled libmbfl is required and can not be disabled + dnl + PHP_MBSTRING_ADD_BUILD_DIR([libmbfl]) + PHP_MBSTRING_ADD_BUILD_DIR([libmbfl/mbfl]) + PHP_MBSTRING_ADD_BUILD_DIR([libmbfl/filters]) + PHP_MBSTRING_ADD_BUILD_DIR([libmbfl/nls]) + PHP_MBSTRING_ADD_INCLUDE([libmbfl]) + PHP_MBSTRING_ADD_INCLUDE([libmbfl/mbfl]) + PHP_MBSTRING_ADD_CONFIG_HEADER([libmbfl/config.h]) - PHP_MBSTRING_ADD_SOURCES([ - libmbfl/filters/html_entities.c - libmbfl/filters/mbfilter_7bit.c - libmbfl/filters/mbfilter_ascii.c - libmbfl/filters/mbfilter_base64.c - libmbfl/filters/mbfilter_big5.c - libmbfl/filters/mbfilter_byte2.c - libmbfl/filters/mbfilter_byte4.c - libmbfl/filters/mbfilter_cp1251.c - libmbfl/filters/mbfilter_cp1252.c - libmbfl/filters/mbfilter_cp1254.c - libmbfl/filters/mbfilter_cp5022x.c - libmbfl/filters/mbfilter_cp51932.c - libmbfl/filters/mbfilter_cp850.c - libmbfl/filters/mbfilter_cp866.c - libmbfl/filters/mbfilter_cp932.c - libmbfl/filters/mbfilter_cp936.c - libmbfl/filters/mbfilter_gb18030.c - libmbfl/filters/mbfilter_euc_cn.c - libmbfl/filters/mbfilter_euc_jp.c - libmbfl/filters/mbfilter_euc_jp_2004.c - libmbfl/filters/mbfilter_euc_jp_win.c - libmbfl/filters/mbfilter_euc_kr.c - libmbfl/filters/mbfilter_euc_tw.c - libmbfl/filters/mbfilter_htmlent.c - libmbfl/filters/mbfilter_hz.c - libmbfl/filters/mbfilter_iso2022_jp_ms.c - libmbfl/filters/mbfilter_iso2022jp_2004.c - libmbfl/filters/mbfilter_iso2022jp_mobile.c - libmbfl/filters/mbfilter_iso2022_kr.c - libmbfl/filters/mbfilter_iso8859_1.c - libmbfl/filters/mbfilter_iso8859_10.c - libmbfl/filters/mbfilter_iso8859_13.c - libmbfl/filters/mbfilter_iso8859_14.c - libmbfl/filters/mbfilter_iso8859_15.c - libmbfl/filters/mbfilter_iso8859_16.c - libmbfl/filters/mbfilter_iso8859_2.c - libmbfl/filters/mbfilter_iso8859_3.c - libmbfl/filters/mbfilter_iso8859_4.c - libmbfl/filters/mbfilter_iso8859_5.c - libmbfl/filters/mbfilter_iso8859_6.c - libmbfl/filters/mbfilter_iso8859_7.c - libmbfl/filters/mbfilter_iso8859_8.c - libmbfl/filters/mbfilter_iso8859_9.c - libmbfl/filters/mbfilter_jis.c - libmbfl/filters/mbfilter_koi8r.c - libmbfl/filters/mbfilter_armscii8.c - libmbfl/filters/mbfilter_qprint.c - libmbfl/filters/mbfilter_sjis.c - libmbfl/filters/mbfilter_sjis_open.c - libmbfl/filters/mbfilter_sjis_mobile.c - libmbfl/filters/mbfilter_sjis_mac.c - libmbfl/filters/mbfilter_sjis_2004.c - libmbfl/filters/mbfilter_tl_jisx0201_jisx0208.c - libmbfl/filters/mbfilter_ucs2.c - libmbfl/filters/mbfilter_ucs4.c - libmbfl/filters/mbfilter_uhc.c - libmbfl/filters/mbfilter_utf16.c - libmbfl/filters/mbfilter_utf32.c - libmbfl/filters/mbfilter_utf7.c - libmbfl/filters/mbfilter_utf7imap.c - libmbfl/filters/mbfilter_utf8.c - libmbfl/filters/mbfilter_utf8_mobile.c - libmbfl/filters/mbfilter_uuencode.c - libmbfl/filters/mbfilter_koi8u.c - libmbfl/mbfl/mbfilter.c - libmbfl/mbfl/mbfilter_8bit.c - libmbfl/mbfl/mbfilter_pass.c - libmbfl/mbfl/mbfilter_wchar.c - libmbfl/mbfl/mbfl_convert.c - libmbfl/mbfl/mbfl_encoding.c - libmbfl/mbfl/mbfl_filter_output.c - libmbfl/mbfl/mbfl_ident.c - libmbfl/mbfl/mbfl_language.c - libmbfl/mbfl/mbfl_memory_device.c - libmbfl/mbfl/mbfl_string.c - libmbfl/mbfl/mbfl_allocators.c - libmbfl/nls/nls_de.c - libmbfl/nls/nls_en.c - libmbfl/nls/nls_ja.c - libmbfl/nls/nls_kr.c - libmbfl/nls/nls_neutral.c - libmbfl/nls/nls_ru.c - libmbfl/nls/nls_uni.c - libmbfl/nls/nls_zh.c - libmbfl/nls/nls_hy.c - libmbfl/nls/nls_tr.c - libmbfl/nls/nls_ua.c - ]) - PHP_MBSTRING_ADD_CFLAG([-DHAVE_CONFIG_H]) - PHP_MBSTRING_ADD_INSTALL_HEADERS([libmbfl/config.h libmbfl/mbfl/eaw_table.h libmbfl/mbfl/mbfilter.h libmbfl/mbfl/mbfilter_8bit.h libmbfl/mbfl/mbfilter_pass.h libmbfl/mbfl/mbfilter_wchar.h libmbfl/mbfl/mbfl_allocators.h libmbfl/mbfl/mbfl_consts.h libmbfl/mbfl/mbfl_convert.h libmbfl/mbfl/mbfl_defs.h libmbfl/mbfl/mbfl_encoding.h libmbfl/mbfl/mbfl_filter_output.h libmbfl/mbfl/mbfl_ident.h libmbfl/mbfl/mbfl_language.h libmbfl/mbfl/mbfl_memory_device.h libmbfl/mbfl/mbfl_string.h]) - else - dnl - dnl External libmfl - dnl - for inc in include include/mbfl-1.0 include/mbfl; do - if test -f "$PHP_LIBMBFL/$inc/mbfilter.h"; then - PHP_LIBMBFL_INCLUDE="$inc" - break - fi - done - - if test -z "$PHP_LIBMBFL_INCLUDE"; then - AC_MSG_ERROR([mbfilter.h not found. Please reinstall libmbfl library.]) - else - PHP_ADD_INCLUDE([$PHP_LIBMBFL_INCLUDE]) - fi - - PHP_CHECK_LIBRARY(mbfl, mbfl_buffer_converter_new, [ - PHP_ADD_LIBRARY_WITH_PATH(mbfl, $PHP_LIBMBFL/$PHP_LIBDIR, MBSTRING_SHARED_LIBADD) - ],[ - AC_MSG_ERROR([Problem with libmbfl. Please check config.log for more information.]) - ], [ - -L$PHP_LIBMBFL/$PHP_LIBDIR - ]) - fi + PHP_MBSTRING_ADD_SOURCES([ + libmbfl/filters/html_entities.c + libmbfl/filters/mbfilter_7bit.c + libmbfl/filters/mbfilter_ascii.c + libmbfl/filters/mbfilter_base64.c + libmbfl/filters/mbfilter_big5.c + libmbfl/filters/mbfilter_byte2.c + libmbfl/filters/mbfilter_byte4.c + libmbfl/filters/mbfilter_cp1251.c + libmbfl/filters/mbfilter_cp1252.c + libmbfl/filters/mbfilter_cp1254.c + libmbfl/filters/mbfilter_cp5022x.c + libmbfl/filters/mbfilter_cp51932.c + libmbfl/filters/mbfilter_cp850.c + libmbfl/filters/mbfilter_cp866.c + libmbfl/filters/mbfilter_cp932.c + libmbfl/filters/mbfilter_cp936.c + libmbfl/filters/mbfilter_gb18030.c + libmbfl/filters/mbfilter_euc_cn.c + libmbfl/filters/mbfilter_euc_jp.c + libmbfl/filters/mbfilter_euc_jp_2004.c + libmbfl/filters/mbfilter_euc_jp_win.c + libmbfl/filters/mbfilter_euc_kr.c + libmbfl/filters/mbfilter_euc_tw.c + libmbfl/filters/mbfilter_htmlent.c + libmbfl/filters/mbfilter_hz.c + libmbfl/filters/mbfilter_iso2022_jp_ms.c + libmbfl/filters/mbfilter_iso2022jp_2004.c + libmbfl/filters/mbfilter_iso2022jp_mobile.c + libmbfl/filters/mbfilter_iso2022_kr.c + libmbfl/filters/mbfilter_iso8859_1.c + libmbfl/filters/mbfilter_iso8859_10.c + libmbfl/filters/mbfilter_iso8859_13.c + libmbfl/filters/mbfilter_iso8859_14.c + libmbfl/filters/mbfilter_iso8859_15.c + libmbfl/filters/mbfilter_iso8859_16.c + libmbfl/filters/mbfilter_iso8859_2.c + libmbfl/filters/mbfilter_iso8859_3.c + libmbfl/filters/mbfilter_iso8859_4.c + libmbfl/filters/mbfilter_iso8859_5.c + libmbfl/filters/mbfilter_iso8859_6.c + libmbfl/filters/mbfilter_iso8859_7.c + libmbfl/filters/mbfilter_iso8859_8.c + libmbfl/filters/mbfilter_iso8859_9.c + libmbfl/filters/mbfilter_jis.c + libmbfl/filters/mbfilter_koi8r.c + libmbfl/filters/mbfilter_armscii8.c + libmbfl/filters/mbfilter_qprint.c + libmbfl/filters/mbfilter_sjis.c + libmbfl/filters/mbfilter_sjis_open.c + libmbfl/filters/mbfilter_sjis_mobile.c + libmbfl/filters/mbfilter_sjis_mac.c + libmbfl/filters/mbfilter_sjis_2004.c + libmbfl/filters/mbfilter_tl_jisx0201_jisx0208.c + libmbfl/filters/mbfilter_ucs2.c + libmbfl/filters/mbfilter_ucs4.c + libmbfl/filters/mbfilter_uhc.c + libmbfl/filters/mbfilter_utf16.c + libmbfl/filters/mbfilter_utf32.c + libmbfl/filters/mbfilter_utf7.c + libmbfl/filters/mbfilter_utf7imap.c + libmbfl/filters/mbfilter_utf8.c + libmbfl/filters/mbfilter_utf8_mobile.c + libmbfl/filters/mbfilter_uuencode.c + libmbfl/filters/mbfilter_koi8u.c + libmbfl/mbfl/mbfilter.c + libmbfl/mbfl/mbfilter_8bit.c + libmbfl/mbfl/mbfilter_pass.c + libmbfl/mbfl/mbfilter_wchar.c + libmbfl/mbfl/mbfl_convert.c + libmbfl/mbfl/mbfl_encoding.c + libmbfl/mbfl/mbfl_filter_output.c + libmbfl/mbfl/mbfl_ident.c + libmbfl/mbfl/mbfl_language.c + libmbfl/mbfl/mbfl_memory_device.c + libmbfl/mbfl/mbfl_string.c + libmbfl/mbfl/mbfl_allocators.c + libmbfl/nls/nls_de.c + libmbfl/nls/nls_en.c + libmbfl/nls/nls_ja.c + libmbfl/nls/nls_kr.c + libmbfl/nls/nls_neutral.c + libmbfl/nls/nls_ru.c + libmbfl/nls/nls_uni.c + libmbfl/nls/nls_zh.c + libmbfl/nls/nls_hy.c + libmbfl/nls/nls_tr.c + libmbfl/nls/nls_ua.c + ]) + PHP_MBSTRING_ADD_CFLAG([-DHAVE_CONFIG_H]) + PHP_MBSTRING_ADD_INSTALL_HEADERS([libmbfl/config.h libmbfl/mbfl/eaw_table.h libmbfl/mbfl/mbfilter.h libmbfl/mbfl/mbfilter_8bit.h libmbfl/mbfl/mbfilter_pass.h libmbfl/mbfl/mbfilter_wchar.h libmbfl/mbfl/mbfl_allocators.h libmbfl/mbfl/mbfl_consts.h libmbfl/mbfl/mbfl_convert.h libmbfl/mbfl/mbfl_defs.h libmbfl/mbfl/mbfl_encoding.h libmbfl/mbfl/mbfl_filter_output.h libmbfl/mbfl/mbfl_ident.h libmbfl/mbfl/mbfl_language.h libmbfl/mbfl/mbfl_memory_device.h libmbfl/mbfl/mbfl_string.h]) ]) dnl @@ -359,15 +332,11 @@ PHP_ARG_ENABLE([mbregex_backtrack], [whether to check multibyte regex backtrack] [ --disable-mbregex-backtrack MBSTRING: Disable multibyte regex backtrack check], yes, no) -PHP_ARG_WITH(libmbfl, [for external libmbfl], -[ --with-libmbfl[=DIR] MBSTRING: Use external libmbfl. DIR is the libmbfl base - install directory [BUNDLED]], no, no) - PHP_ARG_WITH(onig, [for external oniguruma], [ --with-onig[=DIR] MBSTRING: Use external oniguruma. DIR is the oniguruma install prefix. If DIR is not set, the bundled oniguruma will be used], no, no) -if test "$PHP_MBSTRING" != "no"; then +if test "$PHP_MBSTRING" != "no"; then AC_DEFINE([HAVE_MBSTRING],1,[whether to have multibyte string support]) PHP_MBSTRING_ADD_BASE_SOURCES([mbstring.c php_unicode.c mb_gpc.c]) @@ -375,7 +344,7 @@ if test "$PHP_MBSTRING" != "no"; then if test "$PHP_MBREGEX" != "no"; then PHP_MBSTRING_SETUP_MBREGEX fi - + dnl libmbfl is required PHP_MBSTRING_SETUP_LIBMBFL PHP_MBSTRING_EXTENSION diff --git a/ext/mbstring/config.w32 b/ext/mbstring/config.w32 index bb321e60385..11fc88ebeec 100644 --- a/ext/mbstring/config.w32 +++ b/ext/mbstring/config.w32 @@ -1,7 +1,6 @@ // $Id$ // vim:ft=javascript -ARG_WITH("libmbfl", "use external libmbfl", "no"); ARG_ENABLE("mbstring", "multibyte string functions", "no"); ARG_ENABLE("mbregex", "multibyte regex support", "no"); ARG_ENABLE("mbregex-backtrack", "check multibyte regex backtrack", "yes"); @@ -13,62 +12,48 @@ if (PHP_MBSTRING != "no") { FSO.CopyFile("ext\\mbstring\\oniguruma\\src\\oniguruma.h", "ext\\mbstring\\oniguruma\\oniguruma.h", true); - if (PHP_LIBMBFL != "no" && - CHECK_HEADER_ADD_INCLUDE("mbfl/mbfilter.h", "CFLAGS_LIBMBFL", PHP_LIBMBFL + "\\include") && - CHECK_LIB("mbfl.lib", "libmbfl", PHP_LIBMBFL + "\\lib")) { + STDOUT.WriteLine("Using bundled libmbfl..."); - ADD_FLAG("LIBS_MBSTRING", get_define("LIBS_LIBMBFL")); - ADD_FLAG("LDFLAGS_MBSTRING", get_define("LDFLAGS_LIBMBFL")); - ADD_FLAG("CFLAGS_MBSTRING", get_define("CFLAGS_LIBMBFL") + - " /I ext/mbstring/oniguruma /D NOT_RUBY=1 \ - /D HAVE_STDARG_PROTOTYPES=1 /D HAVE_STDLIB_H \ - /D HAVE_STRICMP /D EXPORT /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1"); + ADD_FLAG("CFLAGS_MBSTRING", "-Iext/mbstring/libmbfl -Iext/mbstring/libmbfl/mbfl \ + -Iext/mbstring/oniguruma /D NOT_RUBY=1 /D LIBMBFL_EXPORTS=1 \ + /D HAVE_STDARG_PROTOTYPES=1 /D HAVE_CONFIG_H /D HAVE_STDLIB_H \ + /D HAVE_STRICMP /D MBFL_DLL_EXPORT=1 /D EXPORT /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1") - PHP_INSTALL_HEADERS("ext/mbstring", "mbstring.h oniguruma/oniguruma.h php_mbregex.h php_onig_compat.h"); - } else { - STDOUT.WriteLine("Using bundled libmbfl..."); + FSO.CopyFile("ext\\mbstring\\libmbfl\\config.h.w32", + "ext\\mbstring\\libmbfl\\config.h", true); - ADD_FLAG("CFLAGS_MBSTRING", "-Iext/mbstring/libmbfl -Iext/mbstring/libmbfl/mbfl \ - -Iext/mbstring/oniguruma /D NOT_RUBY=1 /D LIBMBFL_EXPORTS=1 \ - /D HAVE_STDARG_PROTOTYPES=1 /D HAVE_CONFIG_H /D HAVE_STDLIB_H \ - /D HAVE_STRICMP /D MBFL_DLL_EXPORT=1 /D EXPORT /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1") + ADD_SOURCES("ext/mbstring/libmbfl/filters", "html_entities.c \ + mbfilter_7bit.c mbfilter_ascii.c mbfilter_base64.c mbfilter_big5.c \ + mbfilter_byte2.c mbfilter_byte4.c mbfilter_cp1251.c mbfilter_cp1252.c \ + mbfilter_cp866.c mbfilter_cp932.c mbfilter_cp936.c mbfilter_cp51932.c \ + mbfilter_euc_cn.c mbfilter_euc_jp.c mbfilter_euc_jp_win.c mbfilter_euc_kr.c \ + mbfilter_euc_tw.c mbfilter_htmlent.c mbfilter_hz.c mbfilter_iso2022_kr.c \ + mbfilter_iso8859_1.c mbfilter_iso8859_10.c mbfilter_iso8859_13.c \ + mbfilter_iso8859_14.c mbfilter_iso8859_15.c mbfilter_iso8859_16.c \ + mbfilter_iso8859_2.c mbfilter_iso8859_3.c mbfilter_iso8859_4.c \ + mbfilter_iso8859_5.c mbfilter_iso8859_6.c mbfilter_iso8859_7.c \ + mbfilter_iso8859_8.c mbfilter_iso8859_9.c mbfilter_jis.c \ + mbfilter_iso2022_jp_ms.c mbfilter_gb18030.c mbfilter_sjis_2004.c \ + mbfilter_koi8r.c mbfilter_qprint.c mbfilter_sjis.c mbfilter_ucs2.c \ + mbfilter_ucs4.c mbfilter_uhc.c mbfilter_utf16.c mbfilter_utf32.c \ + mbfilter_utf7.c mbfilter_utf7imap.c mbfilter_utf8.c mbfilter_utf8_mobile.c \ + mbfilter_koi8u.c mbfilter_cp1254.c mbfilter_euc_jp_2004.c \ + mbfilter_uuencode.c mbfilter_armscii8.c mbfilter_cp850.c \ + mbfilter_cp5022x.c mbfilter_sjis_open.c mbfilter_sjis_mobile.c \ + mbfilter_sjis_mac.c \ + mbfilter_iso2022jp_2004.c mbfilter_iso2022jp_mobile.c \ + mbfilter_tl_jisx0201_jisx0208.c", "mbstring"); - FSO.CopyFile("ext\\mbstring\\libmbfl\\config.h.w32", - "ext\\mbstring\\libmbfl\\config.h", true); + ADD_SOURCES("ext/mbstring/libmbfl/mbfl", "mbfilter.c mbfilter_8bit.c \ + mbfilter_pass.c mbfilter_wchar.c mbfl_convert.c mbfl_encoding.c \ + mbfl_filter_output.c mbfl_ident.c mbfl_language.c mbfl_memory_device.c \ + mbfl_string.c mbfl_allocators.c", "mbstring"); - ADD_SOURCES("ext/mbstring/libmbfl/filters", "html_entities.c \ - mbfilter_7bit.c mbfilter_ascii.c mbfilter_base64.c mbfilter_big5.c \ - mbfilter_byte2.c mbfilter_byte4.c mbfilter_cp1251.c mbfilter_cp1252.c \ - mbfilter_cp866.c mbfilter_cp932.c mbfilter_cp936.c mbfilter_cp51932.c \ - mbfilter_euc_cn.c mbfilter_euc_jp.c mbfilter_euc_jp_win.c mbfilter_euc_kr.c \ - mbfilter_euc_tw.c mbfilter_htmlent.c mbfilter_hz.c mbfilter_iso2022_kr.c \ - mbfilter_iso8859_1.c mbfilter_iso8859_10.c mbfilter_iso8859_13.c \ - mbfilter_iso8859_14.c mbfilter_iso8859_15.c mbfilter_iso8859_16.c \ - mbfilter_iso8859_2.c mbfilter_iso8859_3.c mbfilter_iso8859_4.c \ - mbfilter_iso8859_5.c mbfilter_iso8859_6.c mbfilter_iso8859_7.c \ - mbfilter_iso8859_8.c mbfilter_iso8859_9.c mbfilter_jis.c \ - mbfilter_iso2022_jp_ms.c mbfilter_gb18030.c mbfilter_sjis_2004.c \ - mbfilter_koi8r.c mbfilter_qprint.c mbfilter_sjis.c mbfilter_ucs2.c \ - mbfilter_ucs4.c mbfilter_uhc.c mbfilter_utf16.c mbfilter_utf32.c \ - mbfilter_utf7.c mbfilter_utf7imap.c mbfilter_utf8.c mbfilter_utf8_mobile.c \ - mbfilter_koi8u.c mbfilter_cp1254.c mbfilter_euc_jp_2004.c \ - mbfilter_uuencode.c mbfilter_armscii8.c mbfilter_cp850.c \ - mbfilter_cp5022x.c mbfilter_sjis_open.c mbfilter_sjis_mobile.c \ - mbfilter_sjis_mac.c \ - mbfilter_iso2022jp_2004.c mbfilter_iso2022jp_mobile.c \ - mbfilter_tl_jisx0201_jisx0208.c", "mbstring"); + ADD_SOURCES("ext/mbstring/libmbfl/nls", "nls_de.c nls_en.c nls_ja.c \ + nls_kr.c nls_neutral.c nls_ru.c nls_uni.c nls_zh.c nls_hy.c \ + nls_ua.c nls_tr.c", "mbstring"); - ADD_SOURCES("ext/mbstring/libmbfl/mbfl", "mbfilter.c mbfilter_8bit.c \ - mbfilter_pass.c mbfilter_wchar.c mbfl_convert.c mbfl_encoding.c \ - mbfl_filter_output.c mbfl_ident.c mbfl_language.c mbfl_memory_device.c \ - mbfl_string.c mbfl_allocators.c", "mbstring"); - - ADD_SOURCES("ext/mbstring/libmbfl/nls", "nls_de.c nls_en.c nls_ja.c \ - nls_kr.c nls_neutral.c nls_ru.c nls_uni.c nls_zh.c nls_hy.c \ - nls_ua.c nls_tr.c", "mbstring"); - - PHP_INSTALL_HEADERS("ext/mbstring", "mbstring.h oniguruma/oniguruma.h php_mbregex.h php_onig_compat.h libmbfl/config.h libmbfl/mbfl/eaw_table.h libmbfl/mbfl/mbfilter.h libmbfl/mbfl/mbfilter_8bit.h libmbfl/mbfl/mbfilter_pass.h libmbfl/mbfl/mbfilter_wchar.h libmbfl/mbfl/mbfl_allocators.h libmbfl/mbfl/mbfl_consts.h libmbfl/mbfl/mbfl_convert.h libmbfl/mbfl/mbfl_defs.h libmbfl/mbfl/mbfl_encoding.h libmbfl/mbfl/mbfl_filter_output.h libmbfl/mbfl/mbfl_ident.h libmbfl/mbfl/mbfl_language.h libmbfl/mbfl/mbfl_memory_device.h libmbfl/mbfl/mbfl_string.h"); - } + PHP_INSTALL_HEADERS("ext/mbstring", "mbstring.h oniguruma/oniguruma.h php_mbregex.h php_onig_compat.h libmbfl/config.h libmbfl/mbfl/eaw_table.h libmbfl/mbfl/mbfilter.h libmbfl/mbfl/mbfilter_8bit.h libmbfl/mbfl/mbfilter_pass.h libmbfl/mbfl/mbfilter_wchar.h libmbfl/mbfl/mbfl_allocators.h libmbfl/mbfl/mbfl_consts.h libmbfl/mbfl/mbfl_convert.h libmbfl/mbfl/mbfl_defs.h libmbfl/mbfl/mbfl_encoding.h libmbfl/mbfl/mbfl_filter_output.h libmbfl/mbfl/mbfl_ident.h libmbfl/mbfl/mbfl_language.h libmbfl/mbfl/mbfl_memory_device.h libmbfl/mbfl/mbfl_string.h"); AC_DEFINE('HAVE_MBSTRING', 1, 'Have mbstring support'); AC_DEFINE('HAVE_MBSTR_CN', 1, 'CN'); From 251c1b1a44f1150b27c682ab0c183a1b3aa4b2ea Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Sat, 28 Oct 2017 16:44:32 +0200 Subject: [PATCH 15/26] Fix invalid read in mb_ord() --- ext/mbstring/mbstring.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ext/mbstring/mbstring.c b/ext/mbstring/mbstring.c index 7bb4304aff7..40938d88e84 100644 --- a/ext/mbstring/mbstring.c +++ b/ext/mbstring/mbstring.c @@ -4838,14 +4838,15 @@ static inline zend_long php_mb_ord(const char* str, size_t str_len, const char* mbfl_convert_filter_feed_string(filter, (const unsigned char *) str, str_len); mbfl_convert_filter_flush(filter); - mbfl_convert_filter_delete(filter); if (dev.pos < 1 || filter->num_illegalchar || dev.buffer[0] >= MBFL_WCSGROUP_UCS4MAX) { + mbfl_convert_filter_delete(filter); mbfl_wchar_device_clear(&dev); return -1; } cp = dev.buffer[0]; + mbfl_convert_filter_delete(filter); mbfl_wchar_device_clear(&dev); return cp; } From 10900a89ad16f2ee00d6e02d4d4fa49f77eb9b05 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Sat, 28 Oct 2017 16:55:23 +0200 Subject: [PATCH 16/26] Fix invalid read in zend_use_undefined_constant() --- Zend/zend_execute_API.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c index 24ad86b1f16..b4bbb9ce1ee 100644 --- a/Zend/zend_execute_API.c +++ b/Zend/zend_execute_API.c @@ -568,8 +568,9 @@ ZEND_API int zend_use_undefined_constant(zend_string *name, zend_ast_attr attr, if (EG(exception)) { return FAILURE; } else { + zend_string *result_str = zend_string_init(actual, actual_len, 0); zval_ptr_dtor_nogc(result); - ZVAL_STRINGL(result, actual, actual_len); + ZVAL_NEW_STR(result, result_str); } } return SUCCESS; From c4c4056041e26244dd511b0f36d7e3d14b1182c4 Mon Sep 17 00:00:00 2001 From: "Christoph M. Becker" Date: Sat, 28 Oct 2017 18:00:10 +0200 Subject: [PATCH 17/26] Remove implicit constants from test case `FILTER_FLAG_SCHEME_REQUIRED` and `FILTER_FLAG_HOST_REQUIRED` are implicitly used for `FILTER_VALIDATE_URL` so there is no need to specify them explicitly. Cf. https://bugs.php.net/75442. --- ext/filter/tests/015.phpt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ext/filter/tests/015.phpt b/ext/filter/tests/015.phpt index 44926a1cacb..03a78a86454 100644 --- a/ext/filter/tests/015.phpt +++ b/ext/filter/tests/015.phpt @@ -54,11 +54,11 @@ foreach ($values as $value) { } -var_dump(filter_var("qwe", FILTER_VALIDATE_URL, FILTER_FLAG_SCHEME_REQUIRED)); -var_dump(filter_var("http://qwe", FILTER_VALIDATE_URL, FILTER_FLAG_SCHEME_REQUIRED)); -var_dump(filter_var("http://", FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED)); -var_dump(filter_var("/tmp/test", FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED)); -var_dump(filter_var("http://www.example.com", FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED)); +var_dump(filter_var("qwe", FILTER_VALIDATE_URL)); +var_dump(filter_var("http://qwe", FILTER_VALIDATE_URL)); +var_dump(filter_var("http://", FILTER_VALIDATE_URL)); +var_dump(filter_var("/tmp/test", FILTER_VALIDATE_URL)); +var_dump(filter_var("http://www.example.com", FILTER_VALIDATE_URL)); var_dump(filter_var("http://www.example.com", FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED)); var_dump(filter_var("http://www.example.com/path/at/the/server/", FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED)); var_dump(filter_var("http://www.example.com/index.html", FILTER_VALIDATE_URL, FILTER_FLAG_QUERY_REQUIRED)); From 59d413ceb84f9bb83536f5c716dd49090663d84c Mon Sep 17 00:00:00 2001 From: Joe Watkins Date: Sun, 29 Oct 2017 04:37:21 +0000 Subject: [PATCH 18/26] make sure run-tests reports exit status upon prerequisite error --- run-tests.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/run-tests.php b/run-tests.php index d50e4b78615..333b5179c40 100755 --- a/run-tests.php +++ b/run-tests.php @@ -43,7 +43,7 @@ if (!extension_loaded('pcre')) { +-----------------------------------------------------------+ NO_PCRE_ERROR; -exit; +exit(1); } if (!function_exists('proc_open')) { @@ -56,7 +56,7 @@ if (!function_exists('proc_open')) { +-----------------------------------------------------------+ NO_PROC_OPEN_ERROR; -exit; +exit(1); } // Version constants only available as of 5.2.8 From 123b1d79eb4d056b3b13c539968e9c128d20d313 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Sun, 29 Oct 2017 10:08:31 +0100 Subject: [PATCH 19/26] Re-enable AppVeyor cache --- .appveyor.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.appveyor.yml b/.appveyor.yml index 85a7c002ccd..e55c2adab27 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -16,9 +16,9 @@ skip_commits: clone_depth: 64 -#cache: -# - c:\build-cache -# - c:\build-cache\sdk -> .appveyor.yml +cache: + - c:\build-cache + - c:\build-cache\sdk -> .appveyor.yml environment: PHP_BUILD_CACHE_BASE_DIR: c:\build-cache From 09f829d9968815e307a13fed5bb839769a2f438c Mon Sep 17 00:00:00 2001 From: Kalle Sommer Nielsen Date: Sun, 29 Oct 2017 16:36:34 +0100 Subject: [PATCH 20/26] Remove these old comments, as for the TODO, there is already a FR for this --- ext/exif/exif.c | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/ext/exif/exif.c b/ext/exif/exif.c index 306b94dbe2b..ae6569da83f 100644 --- a/ext/exif/exif.c +++ b/ext/exif/exif.c @@ -19,20 +19,6 @@ /* $Id$ */ -/* ToDos - * - * See if example images from http://www.exif.org have illegal - * thumbnail sizes or if code is corrupt. - * Create/Update exif headers. - * Create/Remove/Update image thumbnails. - */ - -/* Security - * - * At current time i do not see any security problems but a potential - * attacker could generate an image with recursive ifd pointers...(Marcus) - */ - #ifdef HAVE_CONFIG_H #include "config.h" #endif From 85fa3aa4c0e86f09e1f16357491cc81c73595e16 Mon Sep 17 00:00:00 2001 From: Kalle Sommer Nielsen Date: Sun, 29 Oct 2017 16:42:13 +0100 Subject: [PATCH 21/26] We don't use a specific model for a MAKERNOTE so remove these checks that doesn't do anything anyway --- ext/exif/exif.c | 45 +++++++++++++++++++++------------------------ 1 file changed, 21 insertions(+), 24 deletions(-) diff --git a/ext/exif/exif.c b/ext/exif/exif.c index ae6569da83f..3ef004bdb17 100644 --- a/ext/exif/exif.c +++ b/ext/exif/exif.c @@ -1,4 +1,4 @@ -/* +/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ @@ -1335,7 +1335,6 @@ typedef enum mn_offset_mode_t { typedef struct { tag_table_type tag_table; char * make; - char * model; char * id_string; int id_string_len; int offset; @@ -1345,27 +1344,27 @@ typedef struct { /* Remember to update PHP_MINFO if updated */ static const maker_note_type maker_note_array[] = { - { tag_table_VND_CANON, "Canon", NULL, NULL, 0, 0, MN_ORDER_INTEL, MN_OFFSET_NORMAL}, - { tag_table_VND_CASIO, "CASIO", NULL, NULL, 0, 0, MN_ORDER_MOTOROLA, MN_OFFSET_NORMAL}, - { tag_table_VND_FUJI, "FUJIFILM", NULL, "FUJIFILM\x0C\x00\x00\x00", 12, 12, MN_ORDER_INTEL, MN_OFFSET_MAKER}, - { tag_table_VND_NIKON, "NIKON", NULL, "Nikon\x00\x01\x00", 8, 8, MN_ORDER_NORMAL, MN_OFFSET_NORMAL}, - { tag_table_VND_NIKON_990, "NIKON", NULL, NULL, 0, 0, MN_ORDER_NORMAL, MN_OFFSET_NORMAL}, - { tag_table_VND_OLYMPUS, "OLYMPUS OPTICAL CO.,LTD", NULL, "OLYMP\x00\x01\x00", 8, 8, MN_ORDER_NORMAL, MN_OFFSET_NORMAL}, - { tag_table_VND_SAMSUNG, "SAMSUNG", NULL, NULL, 0, 0, MN_ORDER_NORMAL, MN_OFFSET_NORMAL}, - { tag_table_VND_PANASONIC, "Panasonic", NULL, "Panasonic\x00\x00\x00", 12, 12, MN_ORDER_NORMAL, MN_OFFSET_NORMAL}, - { tag_table_VND_DJI, "DJI", NULL, NULL, 0, 0, MN_ORDER_NORMAL, MN_OFFSET_NORMAL}, - { tag_table_VND_SONY, "SONY", NULL, "SONY DSC \x00\x00\x00", 12, 12, MN_ORDER_NORMAL, MN_OFFSET_NORMAL}, - { tag_table_VND_PENTAX, "PENTAX", NULL, "AOC\x00", 6, 6, MN_ORDER_NORMAL, MN_OFFSET_NORMAL}, - { tag_table_VND_MINOLTA, "Minolta, KONICA MINOLTA", NULL, NULL, 0, 0, MN_ORDER_NORMAL, MN_OFFSET_NORMAL}, - { tag_table_VND_SIGMA, "SIGMA, FOVEON", NULL, "SIGMA\x00\x00\x00", 10, 10, MN_ORDER_NORMAL, MN_OFFSET_NORMAL}, - { tag_table_VND_SIGMA, "SIGMA, FOVEON", NULL, "FOVEON\x00\x00\x00", 10, 10, MN_ORDER_NORMAL, MN_OFFSET_NORMAL}, - { tag_table_VND_KYOCERA, "KYOCERA, CONTAX", NULL, "KYOCERA \x00\x00\x00", 22, 22, MN_ORDER_NORMAL, MN_OFFSET_MAKER}, - { tag_table_VND_RICOH, "RICOH", NULL, "Ricoh", 5, 5, MN_ORDER_MOTOROLA, MN_OFFSET_NORMAL}, - { tag_table_VND_RICOH, "RICOH", NULL, "RICOH", 5, 5, MN_ORDER_MOTOROLA, MN_OFFSET_NORMAL}, + { tag_table_VND_CANON, "Canon", NULL, 0, 0, MN_ORDER_INTEL, MN_OFFSET_NORMAL}, + { tag_table_VND_CASIO, "CASIO", NULL, 0, 0, MN_ORDER_MOTOROLA, MN_OFFSET_NORMAL}, + { tag_table_VND_FUJI, "FUJIFILM", "FUJIFILM\x0C\x00\x00\x00", 12, 12, MN_ORDER_INTEL, MN_OFFSET_MAKER}, + { tag_table_VND_NIKON, "NIKON", "Nikon\x00\x01\x00", 8, 8, MN_ORDER_NORMAL, MN_OFFSET_NORMAL}, + { tag_table_VND_NIKON_990, "NIKON", NULL, 0, 0, MN_ORDER_NORMAL, MN_OFFSET_NORMAL}, + { tag_table_VND_OLYMPUS, "OLYMPUS OPTICAL CO.,LTD", "OLYMP\x00\x01\x00", 8, 8, MN_ORDER_NORMAL, MN_OFFSET_NORMAL}, + { tag_table_VND_SAMSUNG, "SAMSUNG", NULL, 0, 0, MN_ORDER_NORMAL, MN_OFFSET_NORMAL}, + { tag_table_VND_PANASONIC, "Panasonic", "Panasonic\x00\x00\x00", 12, 12, MN_ORDER_NORMAL, MN_OFFSET_NORMAL}, + { tag_table_VND_DJI, "DJI", NULL, 0, 0, MN_ORDER_NORMAL, MN_OFFSET_NORMAL}, + { tag_table_VND_SONY, "SONY", "SONY DSC \x00\x00\x00", 12, 12, MN_ORDER_NORMAL, MN_OFFSET_NORMAL}, + { tag_table_VND_PENTAX, "PENTAX", "AOC\x00", 6, 6, MN_ORDER_NORMAL, MN_OFFSET_NORMAL}, + { tag_table_VND_MINOLTA, "Minolta, KONICA MINOLTA", NULL, 0, 0, MN_ORDER_NORMAL, MN_OFFSET_NORMAL}, + { tag_table_VND_SIGMA, "SIGMA, FOVEON", "SIGMA\x00\x00\x00", 10, 10, MN_ORDER_NORMAL, MN_OFFSET_NORMAL}, + { tag_table_VND_SIGMA, "SIGMA, FOVEON", "FOVEON\x00\x00\x00", 10, 10, MN_ORDER_NORMAL, MN_OFFSET_NORMAL}, + { tag_table_VND_KYOCERA, "KYOCERA, CONTAX", "KYOCERA \x00\x00\x00", 22, 22, MN_ORDER_NORMAL, MN_OFFSET_MAKER}, + { tag_table_VND_RICOH, "RICOH", "Ricoh", 5, 5, MN_ORDER_MOTOROLA, MN_OFFSET_NORMAL}, + { tag_table_VND_RICOH, "RICOH", "RICOH", 5, 5, MN_ORDER_MOTOROLA, MN_OFFSET_NORMAL}, /* These re-uses existing formats */ - { tag_table_VND_OLYMPUS, "AGFA", NULL, "AGFA \x00\x01", 8, 8, MN_ORDER_NORMAL, MN_OFFSET_NORMAL}, - { tag_table_VND_OLYMPUS, "EPSON", NULL, "EPSON\x00\x01\x00", 8, 8, MN_ORDER_NORMAL, MN_OFFSET_NORMAL} + { tag_table_VND_OLYMPUS, "AGFA", "AGFA \x00\x01", 8, 8, MN_ORDER_NORMAL, MN_OFFSET_NORMAL}, + { tag_table_VND_OLYMPUS, "EPSON", "EPSON\x00\x01\x00", 8, 8, MN_ORDER_NORMAL, MN_OFFSET_NORMAL} }; /* }}} */ @@ -3124,11 +3123,9 @@ static int exif_process_IFD_in_MAKERNOTE(image_info_type *ImageInfo, char * valu maker_note = maker_note_array+i; - /*exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "check (%s,%s)", maker_note->make?maker_note->make:"", maker_note->model?maker_note->model:"");*/ + /*exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "check (%s)", maker_note->make?maker_note->make:"");*/ if (maker_note->make && (!ImageInfo->make || strcmp(maker_note->make, ImageInfo->make))) continue; - if (maker_note->model && (!ImageInfo->model || strcmp(maker_note->model, ImageInfo->model))) - continue; if (maker_note->id_string && strncmp(maker_note->id_string, value_ptr, maker_note->id_string_len)) continue; break; From 6b88b3bc2591f926b28975c07a43eb16b11bb2a8 Mon Sep 17 00:00:00 2001 From: Kalle Sommer Nielsen Date: Sun, 29 Oct 2017 16:43:21 +0100 Subject: [PATCH 22/26] Fix compiler warnings --- ext/exif/exif.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ext/exif/exif.c b/ext/exif/exif.c index 3ef004bdb17..84e5bea958c 100644 --- a/ext/exif/exif.c +++ b/ext/exif/exif.c @@ -1514,12 +1514,12 @@ static void php_ifd_set32u(char *data, size_t value, int motorola_intel) { if (motorola_intel) { data[0] = (value & 0xFF000000) >> 24; - data[1] = (value & 0x00FF0000) >> 16; + data[1] = (char) ((value & 0x00FF0000) >> 16); data[2] = (value & 0x0000FF00) >> 8; data[3] = (value & 0x000000FF); } else { data[3] = (value & 0xFF000000) >> 24; - data[2] = (value & 0x00FF0000) >> 16; + data[2] = (char) ((value & 0x00FF0000) >> 16); data[1] = (value & 0x0000FF00) >> 8; data[0] = (value & 0x000000FF); } From e6aea3dc78ca8ab1634163cdb82a1140b9b97eb4 Mon Sep 17 00:00:00 2001 From: Fabien Villepinte Date: Sun, 29 Oct 2017 09:14:56 +0100 Subject: [PATCH 23/26] Fix bug #75453 Incorrect reflection on ibase_connect and ibase_pconnect --- NEWS | 3 +++ ext/interbase/interbase.c | 8 ++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index 1dc5cf632e7..6d579a378f0 100644 --- a/NEWS +++ b/NEWS @@ -29,6 +29,9 @@ PHP NEWS . Fixed bug #75317 (UConverter::setDestinationEncoding changes source instead of destination). (andrewnester) +- interbase: + . Fixed bug #75453 (Incorrect reflection for ibase_[p]connect). (villfa) + - Mysqli: . Fixed bug #75434 (Wrong reflection for mysqli_fetch_all function). (Fabien Villepinte) diff --git a/ext/interbase/interbase.c b/ext/interbase/interbase.c index 50851b9cf02..ac870598ac6 100644 --- a/ext/interbase/interbase.c +++ b/ext/interbase/interbase.c @@ -53,7 +53,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO(arginfo_ibase_errcode, 0) ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_connect, 0, 0, 1) +ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_connect, 0, 0, 0) ZEND_ARG_INFO(0, database) ZEND_ARG_INFO(0, username) ZEND_ARG_INFO(0, password) @@ -63,7 +63,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_connect, 0, 0, 1) ZEND_ARG_INFO(0, role) ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_pconnect, 0, 0, 1) +ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_pconnect, 0, 0, 0) ZEND_ARG_INFO(0, database) ZEND_ARG_INFO(0, username) ZEND_ARG_INFO(0, password) @@ -1030,7 +1030,7 @@ static void _php_ibase_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent) /* } /* }}} */ -/* {{{ proto resource ibase_connect(string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]]) +/* {{{ proto resource ibase_connect([string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]]]) Open a connection to an InterBase database */ PHP_FUNCTION(ibase_connect) { @@ -1038,7 +1038,7 @@ PHP_FUNCTION(ibase_connect) } /* }}} */ -/* {{{ proto resource ibase_pconnect(string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]]) +/* {{{ proto resource ibase_pconnect([string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]]]) Open a persistent connection to an InterBase database */ PHP_FUNCTION(ibase_pconnect) { From 230e505fd8decde99af720fd640e70aaa297b5e2 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Mon, 30 Oct 2017 10:41:27 +0300 Subject: [PATCH 24/26] Fixed type inference --- ext/opcache/Optimizer/zend_inference.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/ext/opcache/Optimizer/zend_inference.c b/ext/opcache/Optimizer/zend_inference.c index 6e0d0cb5d91..d333947c660 100644 --- a/ext/opcache/Optimizer/zend_inference.c +++ b/ext/opcache/Optimizer/zend_inference.c @@ -3075,7 +3075,13 @@ static int zend_update_type_info(const zend_op_array *op_array, } j = zend_ssa_next_use(ssa_ops, ssa_ops[i].result_def, j); } - UPDATE_SSA_TYPE(tmp, ssa_ops[i].op1_def); + if ((tmp & MAY_BE_ARRAY) + && (tmp & (MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING))) { + UPDATE_SSA_TYPE(tmp, ssa_ops[i].op1_def); + } else { + /* invalid key type */ + UPDATE_SSA_TYPE(t1, ssa_ops[i].op1_def); + } COPY_SSA_OBJ_TYPE(ssa_ops[i].op1_use, ssa_ops[i].op1_def); } /* FETCH_LIST on a string behaves like FETCH_R on null */ From 741efa78074388c9aebf9be9789b68fe0ab3ec24 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Mon, 30 Oct 2017 08:42:59 +0100 Subject: [PATCH 25/26] Catch with the latest AppVeyor unzip errors --- appveyor/build.bat | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/appveyor/build.bat b/appveyor/build.bat index 31081bbe064..a27abc26603 100644 --- a/appveyor/build.bat +++ b/appveyor/build.bat @@ -17,10 +17,17 @@ if not exist "%PHP_BUILD_CACHE_SDK_DIR%" ( echo Cloning remote SDK repository git clone --branch %SDK_BRANCH% %SDK_REMOTE% "%PHP_BUILD_CACHE_SDK_DIR%" 2>&1 ) else ( - echo Fetching remote SDK repository - git --git-dir="%PHP_BUILD_CACHE_SDK_DIR%\.git" --work-tree="%PHP_BUILD_CACHE_SDK_DIR%" fetch --prune origin 2>&1 - echo Checkout SDK repository branch - git --git-dir="%PHP_BUILD_CACHE_SDK_DIR%\.git" --work-tree="%PHP_BUILD_CACHE_SDK_DIR%" checkout --force %SDK_BRANCH% + git --git-dir="%PHP_BUILD_CACHE_SDK_DIR%\.git" --work-tree="%PHP_BUILD_CACHE_SDK_DIR%" status 2>&1 + if %errorlevel% neq 0 ( + rmdir /s /q "%PHP_BUILD_CACHE_SDK_DIR%" + echo Cloning remote SDK repository + git clone --branch %SDK_BRANCH% %SDK_REMOTE% "%PHP_BUILD_CACHE_SDK_DIR%" 2>&1 + ) else ( + echo Fetching remote SDK repository + git --git-dir="%PHP_BUILD_CACHE_SDK_DIR%\.git" --work-tree="%PHP_BUILD_CACHE_SDK_DIR%" fetch --prune origin 2>&1 + echo Checkout SDK repository branch + git --git-dir="%PHP_BUILD_CACHE_SDK_DIR%\.git" --work-tree="%PHP_BUILD_CACHE_SDK_DIR%" checkout --force %SDK_BRANCH% + ) ) set SDK_RUNNER=%PHP_BUILD_CACHE_SDK_DIR%\phpsdk-vc14-%PLATFORM%.bat From 2065d51a18e3aa4e08ff806b5a8994fd4ad05746 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Mon, 30 Oct 2017 12:04:15 +0300 Subject: [PATCH 26/26] Better fix for bug #75451 (Assertion fails while foreach on empty xpath query) --- ext/dom/dom_iterators.c | 8 ++++---- ext/dom/php_dom.h | 1 + ext/dom/xpath.c | 5 ++++- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/ext/dom/dom_iterators.c b/ext/dom/dom_iterators.c index 02f1e3c4720..27bd960c4a9 100644 --- a/ext/dom/dom_iterators.c +++ b/ext/dom/dom_iterators.c @@ -197,8 +197,8 @@ static void php_dom_iterator_move_forward(zend_object_iterator *iter) /* {{{ */ objmap->nodetype != XML_NOTATION_NODE) { if (objmap->nodetype == DOM_NODESET) { nodeht = HASH_OF(&objmap->baseobj_zv); - zend_hash_move_forward(nodeht); - if ((entry = zend_hash_get_current_data(nodeht))) { + zend_hash_move_forward_ex(nodeht, &iterator->pos); + if ((entry = zend_hash_get_current_data_ex(nodeht, &iterator->pos))) { zval_ptr_dtor(&iterator->curobj); ZVAL_UNDEF(&iterator->curobj); ZVAL_COPY(&iterator->curobj, entry); @@ -281,8 +281,8 @@ zend_object_iterator *php_dom_get_iterator(zend_class_entry *ce, zval *object, i objmap->nodetype != XML_NOTATION_NODE) { if (objmap->nodetype == DOM_NODESET) { nodeht = HASH_OF(&objmap->baseobj_zv); - zend_hash_internal_pointer_reset(nodeht); - if ((entry = zend_hash_get_current_data(nodeht))) { + zend_hash_internal_pointer_reset_ex(nodeht, &iterator->pos); + if ((entry = zend_hash_get_current_data_ex(nodeht, &iterator->pos))) { ZVAL_COPY(&iterator->curobj, entry); } } else { diff --git a/ext/dom/php_dom.h b/ext/dom/php_dom.h index 30d143c3513..8bcbcd83062 100644 --- a/ext/dom/php_dom.h +++ b/ext/dom/php_dom.h @@ -93,6 +93,7 @@ typedef struct _dom_nnodemap_object { typedef struct { zend_object_iterator intern; zval curobj; + HashPosition pos; } php_dom_iterator; #include "dom_fe.h" diff --git a/ext/dom/xpath.c b/ext/dom/xpath.c index 31e4dc98b4f..f0b908ccf3f 100644 --- a/ext/dom/xpath.c +++ b/ext/dom/xpath.c @@ -432,8 +432,9 @@ static void php_xpath_eval(INTERNAL_FUNCTION_PARAMETERS, int type) /* {{{ */ int i; xmlNodeSetPtr nodesetp; - array_init(&retval); if (xpathobjp->type == XPATH_NODESET && NULL != (nodesetp = xpathobjp->nodesetval) && nodesetp->nodeNr) { + + array_init(&retval); for (i = 0; i < nodesetp->nodeNr; i++) { xmlNodePtr node = nodesetp->nodeTab[i]; zval child; @@ -459,6 +460,8 @@ static void php_xpath_eval(INTERNAL_FUNCTION_PARAMETERS, int type) /* {{{ */ php_dom_create_object(node, &child, &intern->dom); add_next_index_zval(&retval, &child); } + } else { + ZVAL_EMPTY_ARRAY(&retval); } php_dom_create_interator(return_value, DOM_NODELIST); nodeobj = Z_DOMOBJ_P(return_value);