Compare commits

..
Author SHA1 Message Date
Sara Golemon 5da717d502 Update versions for PHP 8.0.7RC1 2021-05-19 17:58:53 +00:00
Sara Golemon 63998d3512 Mark for RC1 2021-05-19 17:57:54 +00:00
Sara Golemon c65a552288 Remove 8.0.8 on this branch 2021-05-19 17:51:45 +00:00
Sara Golemon 2242d15b5d Update NEWS for 8.0.8 2021-05-18 13:29:48 +00:00
Sara Golemon 122ad9c5c9 Update NEWS for PHP 8.0.7 2021-05-18 13:22:34 +00:00
Derick Rethans 6bc7370532 Merge branch 'PHP-8.0' of github.com:php/php-src into PHP-8.0 2021-05-18 13:46:04 +01:00
Derick Rethans 8cd6acd69b Merge branch 'PHP-7.4' into PHP-8.0 2021-05-18 13:45:14 +01:00
Derick Rethans 3938bfb564 The PHP 7.4 branch is now for 7.4.21 2021-05-18 13:44:01 +01:00
Máté Kocsis eedc988a4e Fix some nullable return types in ext/simplexml
Closes GH-7004
2021-05-18 14:43:36 +02:00
Christoph M. Becker 6c3896b1e9 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  [ci skip] Removed incorrect news entry
2021-05-18 12:36:21 +02:00
Graham Campbell 66c3a174f5 [ci skip] Removed incorrect news entry
Closes GH-7007.
2021-05-18 12:34:46 +02:00
Nikita Popov 0bff67c0ab Fixed bug #81019
Before the zval -> zend_object migration, this code used macros
like FORMATTER_METHOD_FETCH_OBJECT_NO_CHECK, which internally
clear the error. Now that they are no longer used, we need to
manually clear the error.
2021-05-17 16:33:35 +02:00
Nikita Popov c446d68f7c Fixed bug #81046
Literal compaction was incorrectly assuming that literals with
the same base literal and the same number of related literals
would be equal. Maybe that was the case historically, but at
least it isn't true in PHP 8, where FETCH_CONSTANT and INIT_METHOD
have distinct literals at the second position.

Fix this by making the cache key a concatenation of all literals,
rather than just the base literal. We still distinguish the number
of related literals based on a bias added to the string hash.
2021-05-17 15:46:49 +02:00
Máté Kocsis f0736631d9 Fix some types in ext/oci8
Closes GH-6992
2021-05-16 16:26:54 +02:00
Christoph M. Becker a75a4a4a70 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Properly push test artifacts
2021-05-16 14:46:31 +02:00
Christoph M. Becker fb86a176ba Properly push test artifacts
Cf. https://www.appveyor.com/docs/packaging-artifacts/#pushing-artifacts-from-scripts.

Closes GH-6990.
2021-05-16 14:45:06 +02:00
Kamil Tekiela 5c164a2223 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix NEWS
2021-05-14 12:34:46 +01:00
Kamil Tekiela ead72aabfb Fix NEWS 2021-05-14 12:33:32 +01:00
Kamil Tekiela 574b551567 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fixed bug #81037 PDO discards error message text from prepared statement
2021-05-14 11:59:36 +01:00
Kamil Tekiela 6afbb74194 Fixed bug #81037 PDO discards error message text from prepared statement 2021-05-14 11:54:49 +01:00
Christoph M. Becker c455f49a6a Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #81032: GD install is affected by external libgd installation
2021-05-14 12:26:40 +02:00
Flavio Heleno 28e7addb9d Fix #81032: GD install is affected by external libgd installation
This PR replaces the bundled libgd includes from #include <foo.h> with
#include "foo.h" for gd-related headers to avoid including headers that
may be available in system directories instead of the expected local
headers.

Closes GH-6975.
2021-05-14 12:24:45 +02:00
Christoph M. Becker b300c6b87f Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Disable LSan for all PDO_Firebird tests
2021-05-13 23:34:37 +02:00
Christoph M. Becker f6c15e2caf Disable LSan for all PDO_Firebird tests
The tests leak memory, likely due to a slightly unclean shutdown of
libfbclient.  To avoid failing CI, we disable LSan for all the tests.

Closes GH-6966.
2021-05-13 23:30:17 +02:00
Christoph M. Becker 63c558bcbb Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #44643: bound parameters ignore explicit type definitions
2021-05-12 13:47:01 +02:00
Christoph M. Becker 23a3bbb468 Fix #44643: bound parameters ignore explicit type definitions
If `SQLDescribeParam()` fails for a parameter, we must not assume
`SQL_LONGVARCHAR` for any param which is not `PDO_PARAM_LOB`.  At least
mapping `PDO_PARAM_INT` to `SQL_INTEGER` should be safe, and not
introduce a BC break.

Closes GH-6973.
2021-05-12 13:30:51 +02:00
Dmitry Stogov e96b984026 Fixed JIT on first function execution (opcache.jit=1215) with CALL VM 2021-05-12 12:24:18 +03:00
Dmitry Stogov 6fa4493f7b Fixed incorrect stack size calculation (sizeof(zval) == 16) 2021-05-12 02:08:53 +03:00
Joe Watkins 33a93b5ed7 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  missing ;
2021-05-11 11:10:52 +02:00
Joe Watkins ef3e0ee08a missing ; 2021-05-11 11:10:38 +02:00
Joe Watkins 6ccbaa12e0 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  php-fpm: fix Solaris port events.mechanism
2021-05-11 11:07:47 +02:00
Joe Watkins 2558acbd66 Fixed bug #65800 php-fpm: fix Solaris port events.mechanism 2021-05-11 11:05:39 +02:00
Petr Sumbera 04078a597c php-fpm: fix Solaris port events.mechanism
Bug #65800
Fix by: rainer.jung@kippdata.de
2021-05-11 11:01:38 +02:00
Paragon Initiative Enterprises 0c57ebb116 Correct the argument names for ext/sodium functions
Closes GH-6969.
2021-05-10 17:22:02 +02:00
Nikita Popov 7fbfcfa851 Don't autoload classes during covariant type check against mixed
mixed should be behaving the same way as no type here, and not
require X to be autoloaded. Everything apart from "void" is trivially
covariant to "mixed".
2021-05-10 09:45:48 +02:00
Nikita Popov 090627048c Revert "Remove no longer used "log_errors_max_len" ini directive (#6838)"
This reverts commit d2d227e547.

This is an ABI break.
2021-05-08 20:54:53 +02:00
Ben Ramsey c2b5284734 Add entries for log_errors_max_len INI directive removal 2021-05-08 13:35:35 -05:00
Michael Voříšek d2d227e547 Remove no longer used "log_errors_max_len" ini directive (#6838) 2021-05-08 13:05:13 -05:00
Nikita Popov 1c2e7b4ea0 Fix zip build 2021-05-07 22:42:31 +02:00
Christoph M. Becker ab3052ab26 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #80863: ZipArchive::extractTo() ignores references
2021-05-07 19:21:58 +02:00
Christoph M. Becker 57918b1a1b Fix #80863: ZipArchive::extractTo() ignores references
We need to cater to references, when traversing the files to extract.
While we're at it, we move the `zval_file` declaration into a narrower
scope.

Closes GH-6959.
2021-05-07 19:15:29 +02:00
Nikita Popov f547bddcc0 Update msan job to Ubuntu 20.04
Also don't explicitly specify symbolizer path. This doesn't appear
to be necessary anymore, and avoids a dependence on the specific
LLVM version used.
2021-05-07 16:28:01 +02:00
Nikita Popov af948ae24c Skip some tests under msan
These test functions which don't have msan interceptors. This
results in false positives running msan on ubuntu 20.04.
2021-05-07 16:26:49 +02:00
Máté Kocsis 54e2ef0b81 Fix return type of UConverter::fromUCallback() and UConverter::toUCallback()
Closes GH-6950
2021-05-07 15:21:58 +02:00
Máté Kocsis e8361eb0e3 Fix return type of mysqli::init() 2021-05-07 15:21:41 +02:00
Máté Kocsis a3c38c2596 Fix return type of php_user_filter::onCreate() 2021-05-07 15:21:11 +02:00
Nikita Popov 12118d592a Remove getservbyname() variation tests
These are zpp variations, which we no longer test.
2021-05-07 14:55:27 +02:00
Nikita Popov 0413cf3c20 Use SOL_TCP instead of getprotobyname() in tests
This is more idiomatic anyway, and works on msan, which misses
interceptors for getprotobyname().
2021-05-07 14:55:18 +02:00
Nikita Popov 9bf1224d07 Remove custom curl build on community job
This should no longer be necessary now that we're on Ubuntu 20.04.
2021-05-07 12:40:28 +02:00
Nikita Popov 674b884c7a Update community, coverage and file cache jobs to Ubuntu 20.04
This fixes the issue with apt, and seems like a good idea in
general. The msan job is now the only one on 18.04, but that one
needs more work.
2021-05-07 11:29:34 +02:00
Nikita Popov bcea74fd13 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix azure build
2021-05-07 10:26:59 +02:00
Nikita Popov 8deadfa31b Fix azure build
This is only needed on ubuntu-18.04, it works fine on ubuntu-20.04.
2021-05-07 10:26:04 +02:00
Christoph M. Becker fb2bf8bd58 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Add simple Firebird payload fake server to test suite
2021-05-06 14:50:22 +02:00
Christoph M. Becker f95f8a3c1e Add simple Firebird payload fake server to test suite
This is meant to test against certain fixed responses of Firebird
servers.  For now we add just a most basic test which verifies a
connection attempt.

Closes GH-6940.
2021-05-06 14:47:57 +02:00
David Carlier d87d2f006c opcache: more reliable way to get the current binary on solaris/illumos
Closes GH-6920.
2021-05-06 14:33:53 +02:00
Nikita Popov dd3e56ba24 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fixed bug #81015
2021-05-06 10:46:30 +02:00
Nikita Popov 178bbe3478 Fixed bug #81015
Make sure that the previous opline is part of the same block,
otherwise it may be non-dominating.

The test case does not fail on PHP-7.4, but I think the general
problem can appear on 7.4 as well, so I'm applying the patch to
that branch.
2021-05-06 10:46:00 +02:00
Nikita Popov bf9dc53435 Fixed bug #81007
Backport a change from the master branch. We usually test 32-bit
using -m32 from an x86-64 host, probably nobody tried using an
actual 32-bit host.
2021-05-05 16:53:43 +02:00
Máté KocsisandNikita Popov 068c8db276 Fix the signature of PDOStatement::fetchObject()
The ?array $ctorArgs = null parameter is changed to array $constructorArgs = [], and an additional memory leak revealed by the new test case is fixed.

Closes GH-6937

Co-Authored-By: Nikita Popov <nikita.ppv@gmail.com>
2021-05-05 16:48:22 +02:00
Christoph M. Becker 9e51b487f3 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Add CONFLICTS file for PDO firebird tests
2021-05-05 15:24:58 +02:00
Nikita Popov 896e4d3428 Add CONFLICTS file for PDO firebird tests
Just in case anybody executes these test in parallel on PHP 7.4.

(cherry picked from commit b4ffe54174)

Closes GH-6943.
2021-05-05 15:24:30 +02:00
Christoph M. Becker 8294ad3295 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Update version in php_version.h as well
2021-05-05 15:20:37 +02:00
Christoph M. Becker 125fc0b8d4 Update version in php_version.h as well
The version there is automatically updated during `./configure`, but
not on Windows.
2021-05-05 15:18:46 +02:00
Vincent JARDIN bb0107b63d openssl_pkcs7_read: input is data not filename
The argument should be an input string and not a filename.

Fix: https://github.com/php/doc-en/pull/559
Suggested-by: George Peter Banyard <girgias@php.net>

Closes GH-6942.
2021-05-05 09:49:53 +02:00
Sara Golemon f020d537b0 Reset for 8.0.7 2021-05-04 17:17:20 +00:00
Christoph M. Becker d1c0cbdcb1 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #81011: mb_convert_encoding removes references from arrays
2021-05-04 18:39:39 +02:00
Christoph M. Becker 0cafd53d18 Fix #81011: mb_convert_encoding removes references from arrays
We need to dereference references.

Closes GH-6938.
2021-05-04 18:37:40 +02:00
Nikita Popov 398cfb982e Don't treat failed assignment as initialization
Only reset the uninitialized property flag once the type check
has succeeded. Previously the property was treated as unset rather
than uninitialized after a failed assignment.

Noticed this edge-case while working on accessors...
2021-05-04 14:46:04 +02:00
Derick Rethans 5ce0fa2129 Merge branch 'PHP-7.4' into PHP-8.0 2021-05-04 12:18:41 +01:00
Derick Rethans 0328ff49cc Reset PHP-7.4 for 7.4.20 2021-05-04 12:18:27 +01:00
Christoph M. Becker c2a06f5d9a Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #79100: Wrong FTP error messages
2021-05-03 15:24:17 +02:00
Christoph M. Becker 42c72ef463 Fix #79100: Wrong FTP error messages
First we need to properly clear the `inbuf`, what is an amendment to
commit d2881adcbc[1].

Then we need to report `php_pollfd_for_ms()` failures right away; just
setting `errno` does not really help, since at least in some cases it
would have been overwritten before we actually could check it.  We use
`php_socket_strerror()` to get a proper error message, and define
`ETIMEDOUT` to the proper value on Windows; otherwise we catch the
definition in errno.h, which is not compatible with WinSock.  The
proper solution for this issue would likely be to include something
like ext/sockets/windows_common.h.

Finally, we ensure that we only report warnings using `inbuf`, if it is
not empty.

[1] <http://git.php.net/?p=php-src.git;a=commit;h=d2881adcbc9be60de7e7d45a3316b0e11b7eb1e8>.

Closes GH-6718.
2021-05-03 15:19:57 +02:00
Máté Kocsis 30d3062c9b Fix the default value of $mode in PDOStatement::fetch*()
Closes GH-6933
2021-05-03 13:06:38 +02:00
Christoph M. Becker 645815c5b7 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #73246: XMLReader: encoding length not checked
2021-05-03 12:29:24 +02:00
Christoph M. Becker 272df442f5 Fix #73246: XMLReader: encoding length not checked
libxml2 expects the passed encoding to be NUL terminated, so we reject
strings with NUL bytes right away.

Closes GH-6899.
2021-05-03 12:26:37 +02:00
Matteo Beccati 7bc9df4af2 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Revert "Fix #80892: PDO::PARAM_INT is treated the same as PDO::PARAM_STR"
2021-04-29 12:05:49 +02:00
Matteo Beccati b8e49fe872 Revert "Fix #80892: PDO::PARAM_INT is treated the same as PDO::PARAM_STR"
This reverts commit 340a06778c.
2021-04-29 11:59:16 +02:00
Nikita Popov 47bed58a53 Show used git commit in community tests
So we know exactly which revision was tested.
2021-04-29 11:03:48 +02:00
Nikita Popov 2ceef24f4a Remove incorrect func info for array_reduce() and pos()
These are both clearly not rc1 functions. As they are otherwise
UNKNOWN_INFO, I'm just dropping them entirely.
2021-04-28 11:41:21 +02:00
Nikita Popov 028dd891f9 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  filter_var_array() may return array_of_ref
2021-04-28 11:27:55 +02:00
Nikita Popov 5acab7ebb4 filter_var_array() may return array_of_ref
This function preserves references in the input array.
2021-04-28 11:27:14 +02:00
Nikita Popov 220ffb90d0 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  fetch_assoc may return array_key_long
2021-04-28 11:20:38 +02:00
Nikita Popov 67c4d1f5b9 fetch_assoc may return array_key_long
If the column name is a number (which is possible at least via
AS clauses), then symtable canonicalization will convert it into
an integer key.
2021-04-28 11:18:36 +02:00
Nikita Popov 76d1120a48 Remove assert_options() return value info
The ASSERT_CALLBACK value is not validated at all -- it's possible
to set it to an arbitrary value. As such, the function can also
return any value or type (even without outright abuse, the opcache
func info was wrong in that the return can be rcn, and the array
can be array_of_ref).
2021-04-28 11:05:05 +02:00
Nikita Popov af9fadc55a Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  password_get_info() may return array_of_null
2021-04-28 10:55:43 +02:00
Nikita Popov c340f97ab0 password_get_info() may return array_of_null
The algo key is set to null if the algorithm can't be detected.
2021-04-28 10:54:31 +02:00
Nikita Popov 4a5bda6a8d Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  getdate() may return array_key_long
2021-04-28 10:47:45 +02:00
Nikita Popov c7387ab92f getdate() may return array_key_long
This function mostly uses string keys, but the timestamp is
returned at key 0 (why???)
2021-04-28 10:46:37 +02:00
Nikita Popov 98a071e880 pg_connect() may return rcn
Without CONNECT_FORCE_NEW, pg_connect() may resuse an existing
connection and refcount may be larger than one.
2021-04-28 10:36:48 +02:00
Nikita Popov 9ce5776922 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Remove incorrect format argument
2021-04-27 22:23:06 +02:00
Nikita Popov 3f71ba2611 Remove incorrect format argument
rc is not used by the printf format.
2021-04-27 22:22:32 +02:00
Christoph M. Becker 4c80e439a8 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #80460: ODBC doesn't account for SQL_NO_TOTAL indicator
2021-04-27 17:12:01 +02:00
Christoph M. Becker 7f83976200 Fix #80460: ODBC doesn't account for SQL_NO_TOTAL indicator
The `StrLen_or_IndPtr` parameter usually may be `SQL_NO_TOTAL`; we need
to cater to that possibility to avoid working with negative string
lengths and other issues.  A noteable exemption are calls to
`SQLGetData()` which return `SQL_SUCCESS`; in that case `SQL_NO_TOTAL`
can not occur.

Closes GH-6809.
2021-04-27 17:09:36 +02:00
Christoph M. Becker 606b2c39fc Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  7.3.29 is next
2021-04-27 16:58:32 +02:00
Christoph M. Becker 66308af539 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  7.3.29 is next
2021-04-27 16:56:53 +02:00
Christoph M. Becker 98c8ad9218 7.3.29 is next 2021-04-27 16:55:20 +02:00
Christoph M. Becker e1f8763a2c Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix ./makedist wrt. to GH move
2021-04-27 15:50:54 +02:00
Christoph M. Becker 20b62ade29 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix ./makedist wrt. to GH move
2021-04-27 15:49:59 +02:00
Christoph M. BeckerandRemi Collet 096f148c61 Fix ./makedist wrt. to GH move
We can no longer export from git.php.net, and apparently exporting from
Github is not supported.  We apply a quick fix to export from the local
clone by default, still leaving an option to export from some other
repo.  This is, unfortunately, a minor BC break in a security release.

Co-authored-by: Remi Collet <remi@php.net>

Closes GH-6919.
2021-04-27 15:48:58 +02:00
Christoph M. Becker 3e518e069d Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Add missing NEWS entry for #80710
2021-04-27 13:43:12 +02:00
Christoph M. Becker 12e15be921 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Add missing NEWS entry for #80710
2021-04-27 13:41:20 +02:00
Christoph M. Becker 60a68a45c3 Add missing NEWS entry for #80710 2021-04-27 13:38:39 +02:00
Nikita Popov 7544f66da9 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix build warning
2021-04-27 10:10:55 +02:00
Nikita Popov 310c0561a9 Fix build warning
This causes the build to fail on PHP-8.0 and higher.
2021-04-27 10:10:22 +02:00
Stanislav Malyshev a4d9ccbcd6 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #80710: imap_mail_compose() header injection
2021-04-26 21:49:38 -07:00
Stanislav Malyshev 568df31698 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #80710: imap_mail_compose() header injection
2021-04-26 21:48:16 -07:00
Christoph M. Becker 37962c61d2 Fix #80710: imap_mail_compose() header injection
Like `mail()` and `mb_send_mail()`, `imap_mail_compose()` must prevent
header injection.  For maximum backward compatibility, we still allow
header folding for general headers, and still accept trailing line
breaks for address lists.
2021-04-26 21:43:03 -07:00
Stanislav Malyshev eed03fce59 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Revert "Fix #80852: Stack-overflow when json_encode()'ing SimpleXMLElement"
2021-04-26 21:02:09 -07:00
Stanislav Malyshev 2b3346208a Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Revert "Fix #80852: Stack-overflow when json_encode()'ing SimpleXMLElement"
2021-04-26 21:02:03 -07:00
Stanislav Malyshev 1b88c85cd8 Revert "Fix #80852: Stack-overflow when json_encode()'ing SimpleXMLElement"
Sorry, this solution seems to have BC breaks, will need to look
for better one.

This reverts commit 9f7e8b777c.
2021-04-26 21:01:25 -07:00
Stanislav Malyshev 6de2d54425 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #80852: Stack-overflow when json_encode()'ing SimpleXMLElement
2021-04-26 20:50:29 -07:00
Stanislav Malyshev 76637017ac Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #80852: Stack-overflow when json_encode()'ing SimpleXMLElement
2021-04-26 20:50:15 -07:00
Christoph M. Becker 9f7e8b777c Fix #80852: Stack-overflow when json_encode()'ing SimpleXMLElement
We ignore `XML_ENTITY_DECL` nodes when getting the hash of the
properties of a `SimpleXMLElement`.
2021-04-26 20:43:45 -07:00
Máté Kocsis d1e590fe72 Fix pg_get_notify() parameter name
Closes GH-6916
2021-04-26 19:37:41 +02:00
Christoph M. Becker 2bce26f2aa Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #80901: Info leak in ftp extension
2021-04-26 15:08:44 +02:00
Christoph M. Becker c0ae3a7fb7 Fix #80901: Info leak in ftp extension
We ensure that inbuf is NUL terminated on `ftp_readline()` failure.

Closes GH-6894.
2021-04-26 15:07:08 +02:00
Christoph M. Becker bc6fc61c04 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix typo in NEWS
2021-04-26 15:03:10 +02:00
Christoph M. Becker 7f9183ce20 Fix typo in NEWS 2021-04-26 15:02:13 +02:00
Christoph M. Becker 361df6d39c Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix Bug #80972: Memory exhaustion on invalid string offset
2021-04-26 14:59:18 +02:00
Christoph M. Becker 33d49551d1 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #80901: Info leak in ftp extension
2021-04-26 14:45:55 +02:00
Christoph M. Becker 09696eee9d Fix #80901: Info leak in ftp extension
We ensure that inbuf is NUL terminated on `ftp_readline()` failure.

Closes GH-6894.
2021-04-26 14:23:04 +02:00
George Peter Banyard 97f8ca52fa Fix Bug #80972: Memory exhaustion on invalid string offset
Closes GH-6909
2021-04-26 13:22:12 +01:00
George Peter Banyard 418fcd22e8 Fix Bug #80972: Memory exhaustion on invalid string offset
Closes GH-6890
2021-04-26 13:21:40 +01:00
Christoph M. Becker fe219d912e Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Export gzfwrite()
2021-04-26 12:12:04 +02:00
Christoph M. Becker a2771296c0 Export gzfwrite()
Extensions calling `gzfwrite()` cannot be built when linked against
php.dll (built with zlib support) otherwise.

Closes GH-6880.
2021-04-26 12:09:31 +02:00
Máté Kocsis cb84e5c332 Fix arginfo/ZPP mismatch for simplexml_import_dom
Closes GH-6905
2021-04-26 11:09:30 +02:00
Christoph M. Becker 23a192d12d Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #67792: HTTP Authorization schemes are treated as case-sensitive
2021-04-23 15:57:11 +02:00
Christoph M. Becker 39ddf6b89c Fix #67792: HTTP Authorization schemes are treated as case-sensitive
We use `zend_binary_strncasecmp()` to avoid any locale issues, and
refactor.  We also add a test case for Digest authentication.

Closes GH-6900.
2021-04-23 15:54:17 +02:00
Nikita Popov b0f030509a Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  PHPDBG: fix bug parsing 3-word opcodes
2021-04-22 10:12:25 +02:00
David Rans 054fad6d63 PHPDBG: fix bug parsing 3-word opcodes
PHPDBG won't parse opcodes correctly if they are more than two words
separated by underscores (as many opcodes, like ZEND_POST_INC, are).

Now opcodes that have more than one underscore (e.g. ZEND_POST_INC) are
parsed correctly.

Closes GH-6895.
2021-04-22 10:11:26 +02:00
Christoph M. Becker 3c6480552d Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix php_pgsql_fd_cast() wrt. php_stream_can_cast()
2021-04-20 18:30:25 +02:00
Christoph M. Becker 1fcea24efb Fix php_pgsql_fd_cast() wrt. php_stream_can_cast()
`php_stream_can_cast()` forwards to `_php_stream_cast()` with `ret` set
to `NULL`.  `php_pgsql_fd_cast()` needs to cater to that, because
otherwise the stream would report that it is not castable.

This *might* fix https://bugs.php.net/73903.

Closes GH-6888.
2021-04-20 18:29:12 +02:00
Christoph M. Becker 0f40426450 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix misleading error message
2021-04-20 15:43:04 +02:00
Christoph M. Becker 263f14ac60 Fix misleading error message
Closes GH-6889.
2021-04-20 15:41:42 +02:00
Máté Kocsis ffb1ff371c Fix return type of SessionHandler::read() 2021-04-20 11:56:54 +02:00
Christoph M. Becker 8a7b786b7f Fix expected error message
These are slightly changed as of PHP 8.0.0.
2021-04-19 18:48:44 +02:00
Christoph M. Becker cb262cd974 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #80960: opendir() warning wrong info when failed on Windows
2021-04-19 16:17:01 +02:00
Christoph M. Becker ea3c992bff Fix #80960: opendir() warning wrong info when failed on Windows
Firstly, we must not forget to set appropriate error codes for "manual"
checks in `virtual_file_ex()`.

Secondly, we must not call `php_error_docref2()` for warnings regarding
unary functions; thus, we introduce `php_win32_docref1_from_error()`.

Closes GH-6872.
2021-04-19 16:12:22 +02:00
twosee d4a206b276 Backport "ignore some opcodes in the JIT check"
This is a backport of fc64a7bef4 to the PHP-8.0 branch so that extensions don’t have to bypass the JIT check in a hacky way.
2021-04-19 14:28:15 +08:00
Christoph M. Becker d918c1443e Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Update php_version.h
2021-04-16 17:45:41 +02:00
Christoph M. Becker 0071c7ed7e Update php_version.h 2021-04-16 17:42:29 +02:00
twosee ecc4bf14f0 Fixed bug #80958
Missing check after zval_try_get_string().

Closes GH-6871.
2021-04-16 16:17:37 +08:00
twosee 09f55604ec Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fixed bug #80929
2021-04-16 09:49:36 +08:00
twosee c0b1bdcdc3 Fixed bug #80929
The function name should be kept if Closure was created from the function which is marked as ZEND_ACC_CALL_VIA_TRAMPOLINE, because it is not a one-time thing and it may be called multiple times.

Closes GH-6867.
2021-04-16 09:48:36 +08:00
Nikita Popov d0fd118f9b Remove AMD64 jobs from Travis
We're only interested in the ARM64 and S390X jobs, x86 is already
extensively tested on Azure.
2021-04-15 15:16:18 +02:00
Nikita Popov 46f9fed0d8 Handle ref return from Iterator::key()
Handle this in the implementation of get_current_key of user_it,
so that the callers may assume that the key is not a reference.

Fixes oss-fuzz #33018.
2021-04-15 13:05:48 +02:00
Nikita Popov f40c8fdf67 Fix return-by-ref from array_reduce callback
Fixes oss-fuzz #32990.
2021-04-15 12:32:05 +02:00
twosee a3e6735999 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fixed bug #80900

# Conflicts:
#	ext/opcache/Optimizer/sccp.c
2021-04-14 00:15:06 +08:00
twosee 7c6cf09463 Fixed bug #80900
SCCP optimization marks the wrong target feasible when the constant is of the incorrect type.

Closes GH-6861.
2021-04-14 00:07:32 +08:00
Christoph M. Becker 80f921d7e0 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #80933: SplFileObject::DROP_NEW_LINE is broken for NUL and CR
2021-04-13 16:49:57 +02:00
Christoph M. BeckerandNikita Popov 976e71a2fa Fix #80933: SplFileObject::DROP_NEW_LINE is broken for NUL and CR
`buf` may contain NUL bytes, so we must not use `strcspn()` but rather
a binary safe variant.  However, we also must not detect a stray CR as
line ending, and since we only need to check line endings at the end
of the buffer, we can nicely optimize.

Co-authored-by: Nikita Popov <nikita.ppv@gmail.com>

Closes GH-6836.
2021-04-13 16:49:06 +02:00
Levi Morrison 6fd13d0afd Fix function/file mixup in backtrace printing
The error says "Function name" is not a string, but it's actually
investigating the "file" field, not "function".

Closes GH-6768.
2021-04-13 16:33:30 +02:00
Nikita Popov ec24f14820 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix return type of sparc atomic helper
2021-04-13 14:37:18 +02:00
David Carlier 5ccb5fd91e Fix return type of sparc atomic helper
Closes GH-6808.
2021-04-13 14:36:58 +02:00
Derick Rethans f20ca94b1c Merge branch 'PHP-7.4' into PHP-8.0 2021-04-13 11:50:20 +01:00
Derick Rethans f99926f554 Put back inadvertedly removed NEWS entries 2021-04-13 11:48:50 +01:00
Gabriel Caruso 79872ac9c2 8.0.6 is the next version 2021-04-13 12:41:21 +02:00
Derick Rethans 3c06794e93 Merge branch 'PHP-7.4' into PHP-8.0 2021-04-13 11:34:55 +01:00
Derick Rethans 8e48895f48 Prepare for 7.4.19 2021-04-13 11:34:40 +01:00
Noriko Yamamoto 2ebd1c4e86 change PHP_EGG_LOGO_DATA_URI to php8 elePHPant called InPHPinity
Closes GH-6827.
2021-04-13 11:49:42 +02:00
Derick Rethans fac39fa36d Merge branch 'PHP-7.4' into PHP-8.0 2021-04-13 10:00:54 +01:00
Derick Rethans d4f7e8cedc Prepare NEWS for 7.4.18RC1 2021-04-13 10:00:45 +01:00
Nikita Popov 1395b874f4 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fixed bug #80950
2021-04-12 16:06:50 +02:00
Nikita Popov a1fdfa700b Fixed bug #80950
Function info for curl_exec() incorrect specified that the
function cannot return true. This is already fixed in PHP 8,
as the func info entry was removed there.
2021-04-12 16:05:37 +02:00
Nikita Popov 8effbd1cb0 PDO: Respect connection transaction state for dtor rollback
As mentioned in bug #80949, if a transaction is implicitly
committed, then PDO may still issue a ROLLBACK when the PDO
object is destroyed, as the transaction is still marked as active
in PDO's (inaccurate) transaction emulation.

Make sure we use the connection transaction state also for that
final ROLLBACK. A caveat here is that the connection might have
been dropped already, which may be the case for some drivers if
construction fails. Make sure we don't crash in that case.
2021-04-12 12:39:44 +02:00
Christoph M. Becker d74c61c133 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #79812: Potential integer overflow in pcntl_exec()
2021-04-12 12:15:07 +02:00
Christoph M. Becker 0a36d417e8 Fix #79812: Potential integer overflow in pcntl_exec()
We use the proper type, and make sure that no overflow can occur by
using `safe_emalloc()` (we can assume that neither string length is
`SIZE_MAX`).

Closes GH-6845.
2021-04-12 12:12:40 +02:00
Nikita Popov 6700198d64 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Disable ifunc support on openbsd
2021-04-12 11:28:24 +02:00
David Carlier a04fac84e7 Disable ifunc support on openbsd
Enabling it leads to segfault when resolvers are used e.g.
php_stripslashes.

Closes GH-6851.
2021-04-12 11:27:50 +02:00
Rowan Tommins 4e98e65d53 Remove the "getdir" function which was introduced accidentally
The actual name of this function is dir(), but ever since it was
introduced in PHP 3, its internal name was "getdir", leading to it
being mistaken for an alias. This went unnoticed until the switch
to stubs for generating arginfo, at which point getdir() became a
real but undocumented function.

Fixes bug #80914.

Closes GH-6855.
2021-04-12 11:13:57 +02:00
Dmitry Stogov 9c6b926dae Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Update zend_alloc.c
2021-04-12 09:28:41 +03:00
fishmore 600402d986 Update zend_alloc.c
Don't free main thunk.  It will crash.
2021-04-12 09:28:24 +03:00
Matteo Beccati 4f236635e7 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #80892: PDO::PARAM_INT is treated the same as PDO::PARAM_STR
2021-04-12 08:05:41 +02:00
Matteo Beccati 340a06778c Fix #80892: PDO::PARAM_INT is treated the same as PDO::PARAM_STR 2021-04-12 08:03:07 +02:00
Matteo Beccati 7f4784c1c9 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Increased test compatibility
2021-04-11 17:32:13 +02:00
Matteo Beccati da3a807f22 Increased test compatibility
The test expects no masked signals at the beginning, but when run as part
of a Bamboo build, SIGQUIT is already masked and the test fails.
2021-04-11 17:19:58 +02:00
Nikita Popov 26d417d758 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix gidlist allocation leak on error
2021-04-11 10:38:07 +02:00
Nikita Popov 454d297564 Fix gidlist allocation leak on error 2021-04-11 10:37:40 +02:00
Dmitry Stogov 61e385a358 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fixed type inference for OP_DATA
2021-04-09 14:53:34 +03:00
Dmitry Stogov 7a8ffcec7d Fixed type inference for OP_DATA 2021-04-09 14:52:55 +03:00
Nikita Popov 332a367538 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Don't mark non-refcounted phi as live
2021-04-08 18:21:00 +02:00
Nikita Popov 29fa4d203a Don't mark non-refcounted phi as live
If the value is not refcounted, then it doesn't matter if the
FREE gets dropped.
2021-04-08 18:20:09 +02:00
Nikita Popov 59b2a899ca Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix DCE of FREE of COALESCE
2021-04-08 17:01:19 +02:00
Nikita Popov 0826a54836 Fix DCE of FREE of COALESCE
When encountering the following SSA graph:

    BB1:
    #2.T1 [string] = COALESCE #1.CV0($str) [null, string] BB2

    BB2:
    #5.T1 [string] = QM_ASSIGN string("")

    BB3:
    #7.X1 [string] = Phi(#2.X1 [string], #5.X1 [string])
    FREE #7.T1 [string]

We would currently determine that #7, #5 are dead, and eliminate
the FREE and QM_ASSIGN. However, we cannot eliminate #2, as
COALESCE is also responsible for control flow.

Fix this my marking all non-CV phis as live to start with. This
can be relaxed to check the kind of the source instruction, but
I couldn't immediately come up with a case where it would be
useful.
2021-04-08 17:01:13 +02:00
Remi Collet f421ebc056 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Improve fix for #80783
2021-04-08 15:28:29 +02:00
Remi Collet 25f5a1b2e1 Improve fix for #80783 2021-04-08 15:28:03 +02:00
Nikita Popov 032905b5a0 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Support more than NGROUPS_MAX groups on macos
2021-04-08 12:25:16 +02:00
Nikita Popov eebcfeb68e Support more than NGROUPS_MAX groups on macos
I suspect this is the cause for our recent CI failures. Apparently,
on macos it is possible for getgroups() to return more than
NGROUPS_MAX groups. We avoid an EINVAL in that case by fetching
the exact number of groups in advance. This should work on both
macos and posix systems.
2021-04-08 12:23:39 +02:00
Christoph M. Becker ba6714a200 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Update version in main/php_version.h as well
2021-04-07 12:52:44 +02:00
Christoph M. Becker 0a181ca27a Update version in main/php_version.h as well
Otherwise the file is modified by each new build, what is confusing.
2021-04-07 12:45:21 +02:00
Christoph M. Becker de9734a5bb Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #80880: SSL_read on shutdown, ftp/proc_open
2021-04-06 14:07:25 +02:00
Christoph M. Becker 9688071679 Fix #80880: SSL_read on shutdown, ftp/proc_open
When `SSL_read()` after `SSL_shutdown()` fails with `SSL_ERROR_SYSCALL`,
we should not warn about this, because it is likely caused by the peer
having closed the connection without having sent a close_notify
shutdown alert.

Signed-off-by: Christoph M. Becker <cmbecker69@gmx.de>

Closes GH-6803.
2021-04-06 14:03:19 +02:00
Nikita Popov 304190c49d Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  .gdbinit: make zbacktrace show the correct stack when switching threads
2021-04-05 21:11:19 +02:00
Dylan K. Taylor 50f476591f .gdbinit: make zbacktrace show the correct stack when switching threads
I found this mainly to be a problem when working with threading
extensions. zbacktrace doesn't show the correct stack when switching
threads.

Closes GH-6814.
2021-04-05 21:10:52 +02:00
Dmitry Stogov e0996decc3 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Changed PowerPC CPU registers used by Zend VM to work around GCC bug.
2021-03-31 13:11:11 +03:00
Dmitry Stogov 39d8fc1edc Changed PowerPC CPU registers used by Zend VM to work around GCC bug.
Old registers (r28/r29) might be clobbered by _restgpr routine used for return from C function compiled with -Os.
2021-03-31 13:10:21 +03:00
Christoph M. Becker 443478109b Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Handle reference zvals when outputting superglobals in phpinfo()

Signed-off-by: Christoph M. Becker <cmbecker69@gmx.de>
2021-03-30 13:52:38 +02:00
Rowan Tommins 206fd35a98 Handle reference zvals when outputting superglobals in phpinfo()
Fixes <https://bugs.php.net/80915>.

Closes GH-80915.

Signed-off-by: Christoph M. Becker <cmbecker69@gmx.de>
2021-03-30 13:49:22 +02:00
Nikita Popov b95b553489 Remove zero size special case for copy_to_stream
This doesn't seem to serve a purpose anymore. Stats are expensive,
so doing an unnecessary stat just to short-circuit the zero size
case is rather dubious. It can also break with stream wrappers
that return inaccurate sizes (symfony/symfony#40574) and probably
can also break with stream filters.

Drop the special case and adjust code to make it more obvious that
it will still be handled correctly.

Closes GH-6807.
2021-03-29 15:21:59 +02:00
Christoph M. Becker dd227f61df Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #69668: SOAP special XML characters in namespace URIs not encoded

Signed-off-by: Christoph M. Becker <cmbecker69@gmx.de>
2021-03-29 14:19:39 +02:00
Christoph M. Becker 75cb678206 Fix #69668: SOAP special XML characters in namespace URIs not encoded
`xmlNewNs()` does not XML encode the passed `href`, so we need to do
that manually.

Closes GH-6804.

Signed-off-by: Christoph M. Becker <cmbecker69@gmx.de>
2021-03-29 14:17:55 +02:00
Máté Kocsis d7ae64627f Fix PDOStatement::bindColumn() parameter default value 2021-03-25 19:31:04 +01:00
Dmitry Stogov 6800f0a3c2 XFAIL on WIN64 because of problem in libffi
(cherry picked from commit 6689bedd17)
2021-03-24 13:57:31 +01:00
Christoph M. Becker 5832be768c Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #73533: Invalid memory access in php_libxml_xmlCheckUTF8
2021-03-24 11:52:54 +01:00
Christoph M. Becker 498eb8e052 Fix #73533: Invalid memory access in php_libxml_xmlCheckUTF8
A string passed to `php_libxml_xmlCheckUTF8()` may be longer than
1<<31-1 bytes, so we're better using a `size_t`.

Closes GH-6802.
2021-03-24 11:50:50 +01:00
Christoph M. Becker 733b514326 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Properly initialize PS(mod) on RINIT
2021-03-23 13:13:43 +01:00
Christoph M. Becker 688e56d0ac Properly initialize PS(mod) on RINIT
We need to do that in case a user handler has been set.  However, we
can't do that in `php_rinit_session_globals()` since that function is
called by PHP function `session_destroy()` too, but in that case we
don't want to reset PS(mod).

Closes GH-6795.
2021-03-23 13:12:19 +01:00
Christoph M. Becker 90be86fc91 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #80889: amendment
2021-03-22 22:49:46 +01:00
Christoph M. Becker 838951c2d6 Fix #80889: amendment
`session_set_save_handler()` may be called with callables instead of an
object; we need to cater to that as well.

We also extract a set_user_save_handler_ini() function to avoid code
duplication.

Closes GH-6796.
2021-03-22 22:17:35 +01:00
Jakub Zelenka 4dca1140cf Merge branch 'PHP-7.4' into PHP-8.0 2021-03-21 21:21:05 +00:00
Jakub Zelenka bc7ea73da5 Use ServerClientTestCase in a test for default_socket_timeout=-1 2021-03-21 21:19:40 +00:00
Jakub Zelenka 713b82131b Merge branch 'PHP-7.4' into PHP-8.0 2021-03-21 19:00:38 +00:00
Jakub Zelenka 538f95b1b7 Fix NEWS entry position for the latest FPM fix 2021-03-21 18:58:57 +00:00
Jakub Zelenka c483b59124 Fix bug #80024: Duplication of info about inherited socket after pool removing 2021-03-21 18:52:07 +00:00
Christoph M. Becker 2a1ed81ffc Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #80889: Cannot set save handler when save_handler is invalid
2021-03-19 17:03:54 +01:00
Christoph M. Becker 06bfada99b Fix #80889: Cannot set save handler when save_handler is invalid
There is no need to require a (valid) save_handler to be set, when a
user handler is supposed to be set.  We just have to make sure, that
no user handler is already set in this case.

Closes GH-6788.
2021-03-19 16:59:54 +01:00
Christoph M. Becker 97cfdcd73b Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #80783: PDO ODBC truncates BLOB records at every 256th byte
2021-03-18 15:18:53 +01:00
Christoph M. Becker bccca0b53a Fix #80783: PDO ODBC truncates BLOB records at every 256th byte
It is not guaranteed, that the driver inserts only a single NUL byte at
the end of the buffer.  Apparently, there is no way to find out the
actual data length in the buffer after calling `SQLGetData()`, so we
adjust after the next `SQLGetData()` call.

We also prevent PDO::ODBC_ATTR_ASSUME_UTF8 from fetching garbage, by
fetching all chunks with the same C type.

Closes GH-6716.
2021-03-18 15:13:27 +01:00
Dmitry Stogov 465cfc499b Additional fix for bug #80847.
On x86_64 part of structure may be passed in CPU registers.
2021-03-18 16:13:42 +03:00
Nikita Popov 4dce2f83f5 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix locale switch back to C in pcre
2021-03-18 10:50:57 +01:00
Nikita Popov 4be867e910 Fix locale switch back to C in pcre
The compile context is shared between patterns, so we need to set
the character tables unconditionally in case we switched from
a non-C locale to the C locale.
2021-03-18 10:48:43 +01:00
Dmitry Stogov 7e494d9225 Fixed bug #80861 (erronous array key overflow in 2D array with JIT) 2021-03-17 22:59:59 +03:00
Nikita Popov 34e39ebaf5 Fix signed/unsigned warnings in PDO ODBC
Add add skipif to test.

(cherry picked from commit aa58db7232)
2021-03-17 16:33:32 +01:00
Nikita Popov d80118dc16 imagecolortransparent() cannot return null 2021-03-17 15:09:06 +01:00
Nikita Popov c17434429d Return bool from imageinterlace()
The function accepts a bool since PHP 8.0, so it should also return
a bool to keep things consistent.

Furthermore a null return from this functions is not possible.
2021-03-17 15:05:09 +01:00
Dmitry Stogov faf1567212 Fixed bug #80839 (PHP problem with JIT) 2021-03-17 16:55:09 +03:00
Christoph M. Becker fddd0ac552 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #66783: UAF when appending DOMDocument to element
2021-03-17 12:40:03 +01:00
Christoph M. Becker a08847ab39 Fix #66783: UAF when appending DOMDocument to element
According to the DOM standard, elements may only contain element, text,
processing instruction and comment nodes[1].  It is also specified that
a HierarchyRequestError should be thrown if a document is to be
inserted[2].  We follow that standard, and prevent the use-after-free
this way.

[1] <https://dom.spec.whatwg.org/#node-trees>
[2] <https://dom.spec.whatwg.org/#mutation-algorithms>

Closes GH-6765.
2021-03-17 12:37:18 +01:00
Christoph M. Becker c7fadd2328 8.0.5 is next
We also move the NEWS entry for bug 80847 to the proper version.
2021-03-17 12:14:26 +01:00
Dmitry Stogov 38ebb55c7c Fixed bug #80847 (CData structs with fields of type struct can't be passed as C function argument) 2021-03-17 09:55:20 +03:00
Nikita Popov 82622d7583 Fix refcount inference for typed properties
We were not adding RC1/RCN if the MAY_BE_OBJECT came from a class
type and there was no other refcounted type in the union.
2021-03-16 11:17:18 +01:00
Derick Rethans c2ff964de0 Merge branch 'PHP-7.4' into PHP-8.0 2021-03-16 09:41:40 +00:00
Derick Rethans 4adc08a403 Fix build version too 2021-03-16 09:41:21 +00:00
Derick Rethans 7dbe27222c Merge branch 'PHP-7.4' into PHP-8.0 2021-03-16 09:40:21 +00:00
Derick Rethans 5e4ee3d0bd NEWS for 7.4.18 2021-03-16 09:40:05 +00:00
Derick Rethans eb1d1fe373 Prepare for 7.4.17RC1 2021-03-16 09:33:33 +00:00
Máté Kocsis 465aa1d38f Fix ldap_next_entry() parameter name 2021-03-16 09:31:46 +01:00
Máté Kocsis b03438ba3a Fix crash in LDAP search functions during argument validation 2021-03-16 09:31:37 +01:00
Máté Kocsis 5ecc078a17 Add missing skipif sections to ext/dom tests 2021-03-15 23:45:37 +01:00
Christoph M. Becker eae69fcf71 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #80817: dba_popen() may cause segfault during RSHUTDOWN
2021-03-15 18:39:26 +01:00
Christoph M. Becker f448b0e6dd Fix #80817: dba_popen() may cause segfault during RSHUTDOWN
We need to close persistent streams with the proper flag.
2021-03-15 18:37:44 +01:00
Nikita Popov 50254de0a2 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix bug #80866
2021-03-15 14:48:02 +01:00
Dharman 282355efd5 Fix bug #80866
Closes GH-6774.
2021-03-15 14:47:45 +01:00
Nikita Popov 6493b516f9 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix bug #80837
2021-03-15 14:38:49 +01:00
Dharman c93b461ad7 Fix bug #80837
The error needs to be reported on the statement, not the connection.
2021-03-15 14:38:09 +01:00
Nikita Popov 3306baca50 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Update ubuntu on i386 job
  Downgrade security level in tests using TLS < 1.2
2021-03-15 14:12:42 +01:00
Nikita Popov fc4cd598a2 Update ubuntu on i386 job
There is a failure with apt on PHP-7.4 that's not present on
PHP-8.0/master. Switching to a newer ubuntu version on PHP-7.4
avoids the issue.
2021-03-15 14:11:19 +01:00
Nikita Popov 703bbf5210 Downgrade security level in tests using TLS < 1.2
A few additional tests have been added on master that require
lower security level.

(cherry picked from commit c2a6395dcb)
2021-03-15 14:11:12 +01:00
Michael Heimpold eaf9421df6 ext/opcache: fix configure output while checking mmap MAP_ANON support
It seems that f3efb9e3fb introduced a "typo" which may result
in the following confusing message:

checking for mmap() using MAP_ANON shared memory support... no=yes

Let's fix this.

Signed-off-by: Michael Heimpold <mhei@heimpold.de>

Closes GH-6758.
2021-03-15 10:52:57 +01:00
Dmitry Stogov 3b377b51a2 Fixed bug #80814 (threaded mod_php won't load on FreeBSD: No space available for static Thread Local Storage) 2021-03-10 16:03:47 +03:00
Christoph M. Becker 7931956805 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #51903: simplexml_load_file() doesn't use HTTP headers
2021-03-08 15:15:59 +01:00
Christoph M. BeckerandMichael Wallner f901bec494 Fix #51903: simplexml_load_file() doesn't use HTTP headers
The `encoding` attribute of the XML declaration is optional; it is good
practice to use external encoding information where available if it is
missing.  Thus, we check for `charset` info of `Content-Type` headers,
and see whether the encoding is supported.

We cater to trailing parameters and quoted-strings, but not to escaped
backslashes and quotes in quoted-strings, since no known character
encoding contains these anyway.

Co-authored-by: Michael Wallner <mike@php.net>

Closes GH-6747.
2021-03-08 15:07:01 +01:00
Christoph M. Becker 3880b8785b Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #80838: HTTP wrapper waits for HTTP 1 response after HTTP 101
2021-03-08 14:51:45 +01:00
manuel 5787f91c55 Fix #80838: HTTP wrapper waits for HTTP 1 response after HTTP 101
Don't wait for further responses after a HTTP 101 (Switching Protocols) response

Closes GH-6730.
2021-03-08 14:36:31 +01:00
Máté Kocsis 0f8312342f Fix the error message of attribute flag validation 2021-03-06 00:56:25 +01:00
George Wang 8462a3de1a Merge branch 'PHP-7.4' into PHP-8.0 2021-03-05 11:00:53 -05:00
George Wang 8fc0bdfb0a Merge branch 'PHP-7.4' of git.php.net:php-src into PHP-7.4 2021-03-05 10:57:46 -05:00
George Wang 797edd6211 LiteSpeed SAPI v7.9: Process manager keeps forked child process alive for longer time based on load. Reduces PM overhead for busy setup. 2021-03-05 10:46:12 -05:00
David Carlier ae23852e41 Add supports for FreeBSD's PROT_MAX to let mprotect knows X flag can be applied in addition.
Closes GH-6738.
2021-03-05 16:44:08 +01:00
Christoph M. Becker 1c16749eaa Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Print error code if CreateMutex() fails
2021-03-05 15:08:24 +01:00
Christoph M. Becker e0e167e581 Print error code if CreateMutex() fails
This issue came up recently in a bug report[1]; without the error code,
users can barely guess why the function failed.

[1] <https://bugs.php.net/80812>

Closes GH-6745.
2021-03-05 15:06:18 +01:00
Dmitry Stogov 187ba4353a Fix ASAN warning (Zend/zend_string.h:165:2: runtime error: null pointer passed as argument 2 of memcpy(), which is declared to never be null) 2021-03-04 17:27:26 +03:00
Christoph M. Becker 4f478af16d Fix #80825: ZipArchive::isCompressionMethodSupported does not exist
`HAVE_METHOD_SUPPORTED` should have been defined after we updated to
libzip 1.7.1 months ago.
2021-03-03 22:56:42 +01:00
Christoph M. Becker 303a4ae44a Fix test wrt. server.inc changes 2021-03-03 12:04:06 +01:00
Christoph M. Becker 90b24401d6 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #78719: http wrapper silently ignores long Location headers
2021-03-03 10:47:51 +01:00
Christoph M. Becker 51e2015af3 Fix #78719: http wrapper silently ignores long Location headers
When opening HTTP streams, and reading the headers, we currently
discard header lines longer than `HTTP_HEADER_BLOCK_SIZE` (1024 bytes).
While this is not generally forbidden by RFC 7230, section 3.2.5, it
is not generally allowed either, since that may change the "message
framing or response semantics".

We thus fix this by allowing arbitrarily long header lines.

Closes GH-6720.
2021-03-03 10:45:25 +01:00
Dmitry Stogov 957cb13a49 Fixed bug #80802: (zend_jit_fetch_indirect_var assert failure with tracing JIT) 2021-03-01 23:57:20 +03:00
Christoph M. Becker 37c9728615 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #80751: Comma in recipient name breaks email delivery
2021-03-01 18:50:11 +01:00
Christoph M. BeckerandNikita Popov 71297a254b Fix #80751: Comma in recipient name breaks email delivery
So far, `SendText()` simply separates potential email address lists at
any comma, disregarding that commas inside a quoted-string do not
delimit addresses.  We fix that by introducing an own variant of
`strtok_r()` which caters to quoted-strings.

We also make `FormatEmailAddress()` aware of quoted strings.

We do not cater to email address comments, and potentially other quirks
of RFC 5322 email addresses, but catering to quoted-strings is supposed
to solve almost all practical use cases.

Co-authored-by: Nikita Popov <nikita.ppv@gmail.com>

Closes GH-6735.
2021-03-01 18:46:21 +01:00
Nikita Popov 75a4f484f0 Fixed bug #80811
When filling in defaults for skipped params, make sure that
reference parameters get the expected reference wrapper.
2021-03-01 16:30:01 +01:00
Nikita Popov 5875bf754e Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Always remove HT iterators, even for uninit HT
2021-03-01 16:22:29 +01:00
Nikita Popov 2c508c4d40 Always remove HT iterators, even for uninit HT
Fixes oss-fuzz #31423.
2021-03-01 16:22:11 +01:00
Nikita Popov 2c182a77f7 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fixed bug #80805
2021-03-01 15:13:25 +01:00
Nikita Popov e857936518 Fixed bug #80805
Handle missing result_var in binary_op_result_type.

(cherry picked from commit 8446e28275)
2021-03-01 15:13:15 +01:00
George Peter Banyard 1ee6aad248 Fix Bug #80800 imap_open() fails when the flags parameter includes CL_EXPUNGE
This also affected imap_reopen().
Add a supplementary test that the CL_EXPUNGE flag does have
the intended effect.

Closes GH-6732
2021-02-27 13:12:22 +00:00
Felipe Pena 8813f2e0c3 Merge branch 'PHP-7.4' into PHP-8.0 2021-02-25 20:54:24 +00:00
Felipe Pena 988c3f9659 Fix memleak on ReflectionFunction and ReflectionGenerator classes when calling __construct after instantiation 2021-02-25 20:53:14 +00:00
Remi Collet 18071aaa08 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  skip test with openssl < 1.1.0
2021-02-25 13:54:19 +01:00
Remi Collet ae0585c98e skip test with openssl < 1.1.0
The test fails, but without any crash
(this test is designed to catch a crash)
2021-02-25 13:52:35 +01:00
Christoph M. Becker fb683030bf Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Capture Microsoft-defined HRESULT exit codes exit codes
2021-02-25 12:03:43 +01:00
Dylan K. Taylor a480bf8093 Capture Microsoft-defined HRESULT exit codes exit codes
The lack of such a check leads to false-passes of tests on Windows
which expect no output, but produce a segfault or similar issue. I
discovered this a while ago due to bad tests in an extension I maintain.

Closes GH-6722.
2021-02-25 12:01:04 +01:00
David CARLIER ddea5c0816 crc32 module, clang spurious warning removal.
Closes GH-6725.
2021-02-25 10:17:21 +01:00
Nikita Popov f06efce387 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  mysqlnd pam fix test error message
2021-02-25 09:52:07 +01:00
Daniel Black 8309c04464 mysqlnd pam fix test error message
Closes GH-6727.
2021-02-25 09:51:51 +01:00
Nikita Popov 44ef32ff2c Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix potential file collision in dom tests
2021-02-24 21:30:44 +01:00
Nikita Popov 766f827e26 Fix potential file collision in dom tests 2021-02-24 21:30:20 +01:00
Felipe Pena aaea81de7c Merge branch 'PHP-7.4' into PHP-8.0 2021-02-24 19:07:22 +00:00
Felipe Pena 3ec37a74a2 Fix bug #80757 (Exit code is 0 when could not open file) 2021-02-24 18:50:27 +00:00
Felipe Pena 78b0a85de6 Update NEWS 2021-02-24 18:40:32 +00:00
Dmitry Stogov b7fa5268e4 Fixed bug #80782 (DASM_S_RANGE_VREG on PHP_INT_MIN-1) 2021-02-24 12:20:20 +03:00
Christoph M. Becker 8162c3d1fd Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  run-tests: fixed exit code not being set on BORKED tests
2021-02-23 13:22:50 +01:00
Christoph M. Becker 67bb06cc9b Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  run-tests: fixed exit code not being set on BORKED tests
2021-02-23 13:15:30 +01:00
Dylan K. Taylor 729cd8bacd run-tests: fixed exit code not being set on BORKED tests
When no test paths are specified this shows up when 'make test' is used on a PECL extension without specifying tests to run (or in php-src too, I guess...)

Closes GH-6717.
2021-02-23 12:50:03 +01:00
Christoph M. Becker 3f282e57ec Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Update php_version.h to proper version number
2021-02-23 12:16:15 +01:00
Christoph M. Becker 81396ea890 Update php_version.h to proper version number 2021-02-23 12:09:06 +01:00
Nikita Popov 79cf2c56d3 Fixed bug #80786
Don't use r0 as temporary register in math_double_long if it is
already used for a memory result.

This was already done in one branch, but not the other.
2021-02-23 10:22:00 +01:00
Christoph M. Becker b418fe266d Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #75776: Flushing streams with compression filter is broken
2021-02-22 15:32:17 +01:00
Christoph M. Becker 963e50c8c4 Fix #75776: Flushing streams with compression filter is broken
First, the `bzip2.compress` filter has the same issue as `zlib.deflate`
so we port the respective fix[1] to ext/bz2.

Second, there is still an issue, if a stream with an attached
compression filter is flushed before it is closed, without any writes
in between.  In that case, the compression is never finalized.  We fix
this by enforcing a `_php_stream_flush()` with the `closing` flag set
in `_php_stream_free()`, whenever a write filter is attached.  This
call is superfluous for most write filters, but does not hurt, even
when it is unnecessary.

[1] <http://git.php.net/?p=php-src.git;a=commit;h=20e75329f2adb11dd231852c061926d0e4080929>

Closes GH-6703.
2021-02-22 15:28:46 +01:00
Christoph M. Becker 1d2bbce532 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #80771: phpinfo(INFO_CREDITS) displays nothing in CLI
2021-02-22 14:34:21 +01:00
Christoph M. Becker 073b6ea818 Fix #80771: phpinfo(INFO_CREDITS) displays nothing in CLI
There is no good reason not to show the credits in text based SAPIs,
except for brevity.  Thus, we suppress the credits from `php -i`.

Closes GH-6710.
2021-02-22 14:31:51 +01:00
Christoph M. Becker 6dcd640f35 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #80774: session_name() problem with backslash
2021-02-22 12:35:23 +01:00
Christoph M. Becker d7c98ca1ac Fix #80774: session_name() problem with backslash
Since we do no longer URL decode cookie names[1], we must not URL
encode the session name.  We need to prevent broken Set-Cookie headers,
by rejecting names which contain invalid characters.

[1] <http://git.php.net/?p=php-src.git;a=commit;h=6559fe912661ca5ce5f0eeeb591d928451428ed0>

Closes GH-6711.
2021-02-22 12:32:56 +01:00
Nikita Popov ab98944195 Fix trampoline leak on dynamic static call of non-static method
Fixes oss-fuzz #30317.
2021-02-22 10:32:59 +01:00
Nikita Popov ed4f90f0c7 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fixed bug #80781
2021-02-22 09:38:34 +01:00
Nikita Popov 6dd85f83f7 Fixed bug #80781
zend_find_array_dim_slow() may throw, make sure to handle this.
This backports the code we already use for this on PHP-8.0,
and also backports an exception check that makes this easier to
catch.
2021-02-22 09:36:43 +01:00
Nikita Popov 85ffe8dcdc Avoid signed integer overflow in substr()
Perform negation after the (size_t) cast rather than before,
so as to avoid a signed integer overflow for PHP_INT_MIN.

Fixes oss-fuzz #31069.
2021-02-18 10:34:54 +01:00
Christoph M. Becker 553a0c52b1 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #80763: msgfmt_format() does not accept DateTime references
2021-02-17 17:30:47 +01:00
Christoph M. Becker 84b6152842 Fix #80763: msgfmt_format() does not accept DateTime references
`intl_zval_to_millis()` needs to cater to references.

Closes GH-6707.
2021-02-17 17:26:48 +01:00
Nikita Popov cbdd21a22d Color LEAK&FAIL like a failure 2021-02-17 16:40:19 +01:00
Sara Golemon 8c6db654e7 Prep for 8.0.4 2021-02-17 15:24:43 +00:00
Dmitry Stogov 7f68a7afe6 Fixed bug #80745 (JIT produces Assert failure and UNKNOWN:0 var_dumps in code involving bitshifts) 2021-02-17 11:51:13 +03:00
Dylan T 408272b8d9 Remove generated zend_jit_x86.c on make clean
Not removing this causes build failure when reconfiguring and rebuilding after a `make clean`, e.g. enabling/disabling ZTS.

This makes https://bugs.php.net/bug.php?id=80561 more bearable. Ideally it would be rebuilt automatically on configuration change if necessary, but I have no idea how to implement this.

Closes GH-6702.
2021-02-17 09:45:12 +01:00
Dmitry Stogov fad87a24da Fixed bug #80742 (Opcache JIT makes some boolean logic unexpectedly be true) 2021-02-16 20:02:12 +03:00
Nikita Popov edb9229b8b Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Handle incomplete result set metadata more gracefully
2021-02-16 15:34:47 +01:00
Nikita Popov 9552cf6b84 Handle incomplete result set metadata more gracefully
Rather than segfaulting because sname is missing lateron, report
a FAIL here. As this indicates a server bug, the errors is reported
as an out of band warning, rather than a client error.

This fixes the PHP side of bug #80713.
2021-02-16 15:34:14 +01:00
Nikita Popov b63ea1047a Mark resource-like objects as non-comparable
As these hold on to some internal resource, there can't be two
"equal" objects with different identity. Make sure the lack of
public properties doesn't result in these being treated as always
equal.
2021-02-16 14:20:45 +01:00
Nikita Popov cb9785add1 Fixed bug #80723
This fixes the issue just for the Socket class. Presumably we'll
want to do the same for other "resource" objects.
2021-02-16 12:33:50 +01:00
Derick Rethans 2dc75a9e93 Merge branch 'PHP-7.4' into PHP-8.0 2021-02-16 11:31:43 +00:00
Derick Rethans 2d858fbfb1 Fixed dates 2021-02-16 11:31:34 +00:00
Derick Rethans f73e419996 Merge branch 'PHP-7.4' into PHP-8.0 2021-02-16 11:27:17 +00:00
Derick Rethans 6d3d9104e6 PHP-7.4 is now 7.4.17-dev 2021-02-16 11:26:47 +00:00
Nikita Popov 2d7ada2c0b Increase timeout on asan job
Regularly runs against the 5:10 hour limit on master. Increase it
to 6:00 hours.
2021-02-16 10:15:08 +01:00
Nikita Popov 4fb8252186 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Suppress OpenSSL error on missing optional config
2021-02-16 10:12:42 +01:00
Nikita Popov 7566742754 Suppress OpenSSL error on missing optional config
openssl_pkey_new() fetches various options from the config file --
most of these are optional, and not specifying them is not an error
condition from the perspective of the user. Unfortunately, the
CONF_get_string() API pushes an error when accessing a key that
doesn't exist (_CONF_get_string does not, but that is presumably a
private API). This commit adds a helper php_openssl_conf_get_string()
that automatically clears the error in this case. I've found that
OpenSSL occasionally does the same thing internally:
https://github.com/openssl/openssl/blob/22040fb790c854cefb04bed98ed38ea6357daf83/apps/req.c#L515-L517

Closes GH-6699.
2021-02-16 10:11:00 +01:00
Christoph M. Becker afe17cc1b6 Adapt test case for libcurl 7.75.0+
libcurl 7.75.0 finally adds support for `gophers://`, i.e. gopher over
TLS.  The protocol is neither standardized, nor is the protocol
registered with IANA, but well, it is there and the test case should
cater to that.
2021-02-16 00:28:34 +01:00
Nikita Popov f43097a2d7 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fixed bug #80747
2021-02-15 15:34:21 +01:00
Nikita Popov 64b1085464 Fixed bug #80747
If RSA key generation fails, actually report that failure.
2021-02-15 15:34:01 +01:00
Nikita Popov 882862563a Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix symtable cache being used while cleaning symtable
2021-02-15 14:58:59 +01:00
Nikita Popov 7b7d99839c Fix symtable cache being used while cleaning symtable
We need to first clean the symtable and then check whether a cache
slot is available for it. Otherwise, it may happen that a destructor
runs while cleaning the table and uses up all the remaining slots
in the cache.

This is particularly insidious because once we overflow the cache,
the first pointer we modify is symtable_cache_ptr, making it hard
to understand what happened after the fact.

Fixes oss-fuzz #30815.
2021-02-15 14:58:38 +01:00
Nikita Popov c70220205e Fix assertion failure in cufa optimization with named args
Fixes oss-fuzz#30764.
2021-02-15 12:43:31 +01:00
Nikita Popov 8b9dd0a301 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #78680: mysqlnd pam plugin missing terminating null
2021-02-15 11:32:54 +01:00
Daniel Black 3646604203 Fix #78680: mysqlnd pam plugin missing terminating null
The PAM service requires the terminating null to be part
of the communication.

Tested with MariaDB-10.4(pam) and Percona Server 5.7.32(auth_pam_compat).

Also changed MySQL Enterprise test to the server side plugin, authentication_pam
as opposed to the client plugin mysql_clear_password.

Add additional check for pamtest user and pam service file as
all are required for the test.

More importantly, test result should actually succeed.

Thanks Geoff Montee for bug report.

Closes GH-78680.
2021-02-15 11:32:07 +01:00
Nikita Popov 8e9eeca0b3 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix leak when breaking out of FilesystemIterator
2021-02-15 10:38:21 +01:00
Nikita Popov 44a80b64b9 Fix leak when breaking out of FilesystemIterator
We need to always destroy current, not just when iter.data is not
set.

Take this opportunity to clean up the iterator destructor code a
bit, to remove redundant checks and incorrect comments.
2021-02-15 10:37:59 +01:00
Benjamin Eberlei 6ec25f386f Fixed bug #80600 2021-02-12 17:16:48 +01:00
Nikita Popov 5199686873 Fixed bug #80718 2021-02-11 16:49:39 +01:00
Nikita Popov 226395a335 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fixed bug #80719
2021-02-11 16:13:56 +01:00
Nikita Popov c34c523467 Fixed bug #80719 2021-02-11 16:12:06 +01:00
Nikita Popov 7215261349 Update func info after password_get_info() change 2021-02-11 11:44:14 +01:00
Nikita Popov cec5e30889 Don't return null from password_get_info()
The get_info() handler should never fail, but even if it does,
we should still return a proper info array -- it doesn't make
sense that a completely incorrect hash returns an info array,
but a hash that is recognized but for which the options can't
be extracted would return null.
2021-02-11 10:21:31 +01:00
Nikita Popov d80d918547 Don't throw additional Error in require_once if exception already thrown
As pointed out in comments on bug #66216.
2021-02-11 09:41:19 +01:00
Nikita Popov 39c6aaa9cc Make mysqli_ssl_set() arguments nullable
This function internally converts zero length arguments to NULL
argument -- but we should also accept them in the first place.

Null arguments being accepted was actually documented, before
bug #78399 adjusted the docs to match current behavior.
2021-02-10 15:31:27 +01:00
Nikita Popov fd5ff37db7 Make finfo_open() $magic_database nullable
Empty string was interpreted as a special value here, which indicates
that the default magic database should be used. It makes more sense
to use null for this purpose.

The documentation also explicitly mentions that null can be used.
2021-02-10 12:18:42 +01:00
Nikita Popov ce7935e82a Don't pass null action to __doRequest
The parameter is not nullable, so it will be interpreted as
an empty string anyway.

The entire code here is pretty confusing though, and probably
deserves a second loop. The HTTP code only send SOAPAction/action
if soapaction is non-NULL -- but it always is, because it is
accepted through a non-nullable string parameter.

Regarding the SOAPAction header, it appears that always sending
it is actually a requirement of the standard:
> An HTTP client MUST use this header field when issuing a SOAP
> HTTP Request.
Although it does make a distinction between absence of value and
an empty string:
> The header field value of empty string ("") means that the intent
> of the SOAP message is provided by the HTTP Request-URI. No value
> means that there is no indication of the intent of the message.
The empty string interpretation appears to be the desired one.

However, for the action MIME tag the SOAP 1.2 Part 2 specification
says that
> The media type specifies an optional action parameter, which can
> be used to optimize dispatch or routing, among other things.
but also
> The SOAP Action feature defines a single property, which is
> described in Table 14. The value of this property MUST be an
> absolute URI[RFC 3986] and MUST NOT be empty.
which would indicate that we should not be sending an empty
action here.

As I'm not familiar with SOAP and this is long-standing behavior,
I'm just leaving this alone for now...
2021-02-10 12:00:20 +01:00
Nikita Popov 40ba9f6a1a Clarify that location is required in do_request
As far as I can tell, the location is always non-null here,
and the code wouldn't be able to meaningfully work without a
location.
2021-02-10 11:18:20 +01:00
Nikita Popov cff35ca0b2 Regenerate arginfo file
Somehow missed this in the previous commit.
2021-02-10 11:18:06 +01:00
Nikita Popov 788abb8cc8 Accept null $location in SoapClient::__setLocation()
Currently an empty string is used to unset the location. Once
again, it makes more sense to use a null value for this purpose
(though the special behavior of empty strings is retained).

The code comment above the function also explicitly indicates
that null should be accepted, and the function does return null
rather than an empty string for the old location value (if it
is missing).
2021-02-10 10:50:42 +01:00
Nikita Popov 32d128d219 Make SoapVar arguments nullable
$typeName, $typeNamespace, $nodeName and $nodeNamespace all
special-case the empty string and don't set the property entirely
in that case. It makes more sense to use null to indicate absence
here (though of course the empty string behavior is retained).
2021-02-10 10:36:32 +01:00
Máté Kocsis 45fa7596dc Add missing classes to stubs 2021-02-09 22:38:06 +01:00
Nikita Popov 57cb01a927 Properly check imagegd() signature
Unlike imagegd2(), this function only accepts two parameters,
so we should be checking for that.
2021-02-09 15:18:59 +01:00
Nikita Popov 838ae016d7 Make imagegd $file parameter nullable
It is explicitly documented to be nullable, and this matches other
functions like imagepng. It is also documented to accept a stream,
which it currently does not...
2021-02-09 15:15:20 +01:00
Nikita Popov d4aff25473 Use E_ERROR to report arginfo/zpp mismatch
When E_CORE_ERROR is used, we don't get correct file/line information.
2021-02-09 14:36:44 +01:00
Nikita Popov f5768eaa2e Make NumberFormatter ctor $pattern nullable
Whether the pattern is needed depends on the used style. If no
pattern is needed, null is a more sensible value than an empty
string.

fixup
2021-02-09 14:36:41 +01:00
Nikita Popov 186f9bab45 Make IntlDateFormatter ctor $pattern nullable
The implementation already made this argument nullable, but it
was not reflected in the stub.
2021-02-09 14:25:30 +01:00
Nikita Popov 44192ce80b Make Phar $fileNotFoundScript nullable
While "" is already treated the same way as absence, null is the
logically correct default here. Making this one argument non-nullable
is particularly pecular when considering that the preceding $alias
and $index arguments are both nullable.
2021-02-09 12:55:33 +01:00
Nikita Popov 3549f48edc Make createDocument() $namespace nullable
According to the DOM specification, this argument should be
nullable. It's also supposed to be a required argument, but
not changing that at this point.
2021-02-09 12:28:28 +01:00
Nikita Popov ab92ffee22 Make getElementsByTagNameNS $namespace nullable
According to the DOM specification, this argument is supposed to
be nullable.
2021-02-09 12:19:44 +01:00
Christoph M. Becker ff8da0dcff Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Avoid C4090 level 1 warning
2021-02-08 23:12:49 +01:00
Christoph M. Becker 4f508003a9 Avoid C4090 level 1 warning
This breaks the build for PHP 8 by default.
2021-02-08 23:11:37 +01:00
Christoph M. Becker 92f71d9d42 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix locale dependent parsing of PostgreSQL version number
2021-02-08 19:00:37 +01:00
Christoph M. Becker 03713ace23 Fix locale dependent parsing of PostgreSQL version number
Version numbers are not supposed to be localized, so we must not apply
locale dependent parsing with `atof()`.

Using `php_version_compare()` might even be better.

Closes GH-6668.
2021-02-08 18:57:08 +01:00
Christoph M. Becker f731477cd7 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #80706: mail(): Headers after Bcc headers may be ignored
2021-02-08 18:43:51 +01:00
Christoph M. Becker ca7547c9e2 Fix #80706: mail(): Headers after Bcc headers may be ignored
We need to handle the case where a CRLF after a Bcc header is not the
beginning of a folding marker, because in that case the Bcc header was
not the last "thing".

Closes GH-6666.
2021-02-08 18:42:31 +01:00
Nikita Popov e2c30c6a2e Restore Laravel test workaround
I accidentally dropped this during a merge, making the Laravel
job fail.
2021-02-07 18:02:19 +01:00
Tyson Andre 5e06dad411 Properly render 2+ namespaces functions in build/gen_stub.php
Affects ZEND_NS_FE

Add test cases of the global function

Backported to php 8.0 from GH-6664
2021-02-06 14:17:14 -05:00
Christoph M. Becker f23bfc4b43 Fix test expectation for PHP 8.0
Since float to string conversion is no longer locale dependent, we have
to expect a dot as decimal separator.
2021-02-05 14:55:26 +01:00
Christoph M. Becker 95e405023e Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Use ST_Y() instead of the deprecated/removed Y() in test
2021-02-05 14:54:25 +01:00
Christoph M. Becker 4ff2665509 Use ST_Y() instead of the deprecated/removed Y() in test 2021-02-05 14:53:19 +01:00
Christoph M. Becker 4be5b4aa25 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #74779: x() and y() truncating floats to integers
2021-02-05 13:12:03 +01:00
Christoph M. Becker 3f8d21b922 Fix #74779: x() and y() truncating floats to integers
We must not use the locale dependent `atof()`, but instead use the
(hopefully) locale independent `zend_strtod()`, when converting string
representations of floating point numbers which are sent by the server.

Closes GH-6665.
2021-02-05 13:09:59 +01:00
Nikita Popov 0c6ff5eafa Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Try SIGTERM before SIGKILL in opcache restart
2021-02-04 17:07:30 +01:00
Nikita Popov 8b7aaad7d6 Try SIGTERM before SIGKILL in opcache restart
SIGTERM is subject to HANDLE_BLOCK_INTERRUPTIONS(), which will
allow code to exit critical sections before it gets terminated.

Closes GH-6493.
2021-02-04 17:07:18 +01:00
Nikita Popov 5cb25a2d32 Fix CLI server worker support
If we create separate listening sockets in each worker using
SO_REUSEADDR, then an incoming connection may be load-balanced
to a process that is already busy, either due to a long-running
request, or because it is a recursive request (in which case we
would deadlock).

Instead, only create one listening socket, and only create worker
forks afterwards. This way the incoming request will be served
by one of the workers that is currently listening for an incoming
connection.
2021-02-04 15:22:34 +01:00
Christoph M. Becker 767ddb1cd5 [ci skip] Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix newly introduced compiler warning
2021-02-03 12:45:31 +01:00
Christoph M. Becker 958e3b93c3 [ci skip] Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix newly introduced compiler warning
2021-02-03 12:43:40 +01:00
Nikita Popov 06c9633b43 Fix newly introduced compiler warning
(cherry picked from commit ab8177de2c)
2021-02-03 12:42:28 +01:00
Christoph M. Becker f4332a36b4 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #53467: Phar cannot compress large archives
2021-02-03 11:24:36 +01:00
Christoph M. Becker 1bb2a4f91c Fix #53467: Phar cannot compress large archives
When Phars are flushed, a new temporary file is created for each entry
which should be compressed, and the `compressed_filesize` is retrieved.
Afterwards, the Phar manifest is written, and only after that the files
are copied to the actual Phar.  So for each such entry there is an open
temp file, what easily exceeds the limit.

Therefore, we use a single temporary file for all entries, and store
the start offset in the otherwise unused `header_offset` member.  We
ensure that the `cfp` members are properly set to NULL even if flushing
fails, to avoid use after free scenarios.

This solution is based on a suggestion by @lserni[1].

Closes GH-6643.

[1] <https://github.com/box-project/box2/issues/80#issuecomment-77147371>
2021-02-03 11:22:37 +01:00
Benjamin Eberlei 665e1f324a Fix bug #80600 DOMChildNode::remove does not work on DOMCharacterData.
Closes GH-6660
2021-02-02 20:26:52 +01:00
Christoph M. Becker 37ab72768f [ci skip] Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  7.3.28 is next
2021-02-02 17:11:01 +01:00
Christoph M. Becker 3d09626f0d [ci skip] Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  7.3.28 is next
2021-02-02 17:07:16 +01:00
Christoph M. Becker 039ca4e219 7.3.28 is next 2021-02-02 17:01:55 +01:00
Nikita Popov f1cf553437 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Update year to 2021
2021-02-02 16:46:52 +01:00
Peter Kokot 8c04944b66 Update year to 2021
Closes GH-6636.
2021-02-02 16:46:16 +01:00
Nikita Popov b20362c24b Remove unnecessary cast in snmp_set_oid_output_format
This cast isn't needed, and could result in the ValueError being
skipped due to truncation.
2021-02-02 16:43:43 +01:00
Nikita Popov 0ec7bfaa43 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Add missing derefs in CurlFile
2021-02-02 10:32:11 +01:00
Nikita Popov 54fa0a69f8 Add missing derefs in CurlFile
As pointed out on GH-6456.
2021-02-02 10:31:16 +01:00
Nikita Popov f1a988af4b Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix persistent leak on load_wsdl_ex failure
2021-02-02 10:07:04 +01:00
Nikita Popov 51d76c346e Fix persistent leak on load_wsdl_ex failure
Move the load_wsdl_ex call into the zend_try that destroys the
docs hash table. The wsdl will be inserted into docs early on,
and will thus be released on subsequent bailout.
2021-02-02 10:05:35 +01:00
Christoph M. Becker efe69168b4 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Revert "Updated to version 2021.1 (2021a)"
2021-02-01 13:43:57 +01:00
Christoph M. Becker 675a9b2831 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Revert "Updated to version 2021.1 (2021a)"
2021-02-01 13:42:43 +01:00
Christoph M. Becker 57257a4335 Revert "Updated to version 2021.1 (2021a)"
This reverts commit 491488d217, since
PHP-7.3 is in security mode, and this does not look security related.
2021-02-01 13:41:32 +01:00
Christoph M. Becker 766d5846b1 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #80654: file_get_contents() maxlen fails above (2**31)-1 bytes
2021-02-01 13:00:22 +01:00
Christoph M. Becker 7e9479083d Fix #80654: file_get_contents() maxlen fails above (2**31)-1 bytes
We remove the arbitrary restriction to `INT_MAX`; it is superfluous on
32bit systems where `ZEND_LONG_MAX == INT_MAX` anyway, and not useful
on 64bit systems, where larger files should be readable, if the
`memory_limit` is large enough.

Closes GH-6648.
2021-02-01 12:57:40 +01:00
Nikita Popov cab1ea46e7 XFAIL observer_error_05.phpt test 2021-02-01 10:24:00 +01:00
Nikita Popov 9efd7ddd0a Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix Laravel build on community job
2021-02-01 09:49:13 +01:00
Nikita Popov 217b9e7b41 Fix Laravel build on community job
Now requires PHP 7.4, so use php7.4 to run composer everywhere.
2021-02-01 09:48:14 +01:00
Nikita Popov c72957b409 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix build
2021-02-01 09:46:27 +01:00
Nikita Popov ab8177de2c Fix build 2021-02-01 09:46:17 +01:00
David CARLIER 12d08db913 crc32 mac build fix
Closes GH-6651.
2021-02-01 09:43:12 +01:00
Stanislav Malyshev d94d0dda29 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix bug #80672 - Null Dereference in SoapClient
2021-01-31 21:42:48 -08:00
Stanislav Malyshev 86de4d7af6 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix bug #80672 - Null Dereference in SoapClient
2021-01-31 21:42:41 -08:00
Stanislav Malyshev 3c939e3f69 Fix bug #80672 - Null Dereference in SoapClient 2021-01-31 21:15:23 -08:00
Christoph M. Becker 49ef8bc026 Add missing stub for SodiumException
Closes GH-6649.
2021-01-28 23:25:59 +01:00
Remi Collet b23a4256a6 NEWS 2021-01-28 16:26:46 +01:00
Remi Collet 4a35f4a476 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  NEWS
  Fix #80682 opcache doesn't honour pcre.jit option
2021-01-28 16:26:26 +01:00
Remi Collet aeb4f21549 NEWS 2021-01-28 16:25:35 +01:00
Remi Collet 067f7e4150 Fix #80682 opcache doesn't honour pcre.jit option 2021-01-28 16:24:39 +01:00
Michael Voříšek 27eb81604b Fix stub for Serializable::serialize()
This method may also return null.
2021-01-28 10:15:07 +01:00
Sammy Kaye Powers 17142eab22 Observe fake closures
Closes GH-6607.
2021-01-28 10:03:41 +01:00
Stanislav Malyshev e9b8b085a7 Rm unneeded function 2021-01-27 00:18:49 -08:00
Stanislav Malyshev 66a21e90cb Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Rm unneeded function
2021-01-27 00:15:43 -08:00
Stanislav Malyshev 21f861225a Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Rm unneeded function
2021-01-27 00:15:13 -08:00
Stanislav Malyshev 9c673083cd Rm unneeded function 2021-01-27 00:13:43 -08:00
Stanislav Malyshev effa287b35 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Alternative fix for bug 77423
2021-01-26 22:55:16 -08:00
Stanislav Malyshev fbf8c758fe Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Alternative fix for bug 77423
2021-01-26 22:55:10 -08:00
Christoph M. Becker 4a89e726bd Alternative fix for bug 77423
That bug report originally was about `parse_url()` misbehaving, but the
security aspect was actually only regarding `FILTER_VALIDATE_URL`.
Since the changes to `parse_url_ex()` apparently affect userland code
which is relying on the sloppy URL parsing[1], this alternative
restores the old parsing behavior, but ensures that the userinfo is
checked for correctness for `FILTER_VALIDATE_URL`.

[1] <https://github.com/php/php-src/commit/5174de7cd33c3d4fa591c9c93859ff9989b07e8c#commitcomment-45967652>
2021-01-26 22:54:58 -08:00
Dmitry Stogov 64622979f9 Fixed observer API and JIT compatibility 2021-01-26 21:31:15 +03:00
Christoph M. Becker 01a348617f Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #70091: Phar does not mark UTF-8 filenames in ZIP archives
2021-01-26 19:15:37 +01:00
Christoph M. Becker 6a0b889f57 Fix #70091: Phar does not mark UTF-8 filenames in ZIP archives
The default encoding of filenames in a ZIP archive is IBM Code Page
437.  Phar, however, only supports UTF-8 filenames.  Therefore we have
to mark filenames as being stored in UTF-8 by setting the general
purpose bit 11 (the language encoding flag).

The effect of not setting this bit for non ASCII filenames can be seen
in popular tools like 7-Zip and UnZip, but not when extracting the
archives via ext/phar (which is agnostic to the filename encoding), or
via ext/zip (which guesses the encoding).  Thus we add a somewhat
brittle low-level test case.

Closes GH-6630.
2021-01-26 19:14:25 +01:00
Christoph M. Becker 372fb75b68 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Update version
2021-01-26 19:09:35 +01:00
Christoph M. Becker 94af11d5e1 Update version
That appears to have been forgotten for a while.
2021-01-26 19:08:23 +01:00
Dmitry Stogov b529d02d24 Allow observer handlers disabling optimization in RETURN opcode handler, that may cause loss value of returned local variable. 2021-01-26 19:23:13 +03:00
Dmitry Stogov 094e1a8b2d Skip dummy frames allocated on CPU stack of zend_call_function().
(Usage of "current_observed_frame" varible looks unsafe to me).
2021-01-26 18:41:26 +03:00
Nikita Popov a2dcd44272 Fix VAR return type verification
We should also set retval_ref when de-indirecting. Otherwise the
retval_ref != retval_ptr comparison below may incorrect assume
that we're returning a reference.

I don't have a reliable reproducer for this issue, but it sometimes
appears in certain configurations in arrow_functions/007.phpt in
conjunction with other changes.
2021-01-26 15:15:18 +01:00
Christoph M. Becker 2e580da28e Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #75850: Unclear error message wrt. __halt_compiler() w/o semicolon
2021-01-25 18:49:22 +01:00
Christoph M. Becker 61ed904cec Fix #75850: Unclear error message wrt. __halt_compiler() w/o semicolon
We add the failure reason to the error message.

Closes GH-6638.
2021-01-25 18:47:15 +01:00
Nikita Popov 18507853cb Improve switch continue warning
Don't suggest "continue N+1" if there is no wrapping loop. The
resulting code would be illegal.
2021-01-25 16:17:50 +01:00
Christoph M. Becker d319098b24 Fix #53251: bindtextdomain with null dir doesn't return old value
Apparently, users expect `bindtextdomain` and `bind_textdomain_codeset`
with `null` as second argument to work like their C counterparts,
namely to return the previously set value.  Thus, we support that.

Closes GH-6631.
2021-01-25 15:44:14 +01:00
Alex Samorukov 527bcb1e2e Fix opcache phpize build on FreeBSD
Closes GH-6589.
2021-01-25 15:10:47 +01:00
Derick Rethans fee80e397d Updated to version 2021.1 (2021a) 2021-01-25 10:44:06 +00:00
Derick Rethans f31538c997 Empty merge 2021-01-25 10:44:06 +00:00
Derick Rethans 3f183bbcf8 Updated to version 2021.1 (2021a) 2021-01-25 10:44:05 +00:00
Derick Rethans 072cfef1d5 Empty merge 2021-01-25 10:44:05 +00:00
Derick Rethans 491488d217 Updated to version 2021.1 (2021a) 2021-01-25 10:44:04 +00:00
Christoph M. Becker a86443f5a3 Add missing stub for SNMPException 2021-01-24 17:58:26 +01:00
Christoph M. Becker bff7761653 Add missing stub for com_exception 2021-01-24 16:06:49 +01:00
Christoph M. Becker 02933f923e Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Add missing SKIPIF clause for recently introduced test case
2021-01-21 17:28:41 +01:00
Christoph M. Becker edb389730d Add missing SKIPIF clause for recently introduced test case 2021-01-21 17:27:09 +01:00
Christoph M. Becker c4e63c378c Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #80648: Fix for bug 79296 should be based on runtime version
2021-01-20 16:24:53 +01:00
Christoph M. Becker 6adfb8c962 Fix #80648: Fix for bug 79296 should be based on runtime version
Instead of checking for actually affected libzip versions, we now always
`ZIP_TRUNCATE` empty files unless `ZIP_RDONLY` is set.

Closes GH-6625.
2021-01-20 16:20:13 +01:00
Christoph M. Becker 0ad78817a3 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Add missing SKIPIF clauses to new test cases
2021-01-20 11:04:48 +01:00
Christoph M. Becker 4c1b3e3036 Add missing SKIPIF clauses to new test cases 2021-01-20 11:02:52 +01:00
Nikita Popov 286c13e1e6 Skip preloading test on windows 2021-01-20 10:09:31 +01:00
Dmitry Stogov 6288228b56 Fixed bug #80634 (write_property handler of internal classes is skipped on preloaded JITted code) 2021-01-20 11:03:37 +03:00
Gabriel Caruso 34f0f60db5 Next is 8.0.3 2021-01-19 13:00:48 -03:00
Gabriel Caruso 9ce200f6cb Fix NEWS placeholder for the next version
This aligns with the PHP-7.4 and PHP-7.3 branches, and should
fix the `sgolemon/php-release` script run for releasing 8.0.2.
2021-01-19 12:32:17 -03:00
Derick Rethans b5599a37d7 Merge branch 'PHP-7.4' into PHP-8.0 2021-01-19 14:59:19 +00:00
Derick Rethans a33d0c3aae Update NEWS and version 2021-01-19 14:58:38 +00:00
Derick Rethans e8a89c49db Update NEWS for PHP 7.4.15RC1 2021-01-19 14:44:32 +00:00
Nikita Popov f3415758d1 Fix observer tests on Windows
Use %e instead of a hardcoded forward slash.
2021-01-19 15:27:14 +01:00
Nikita Popov 05d168013a Fixed bug #80644: ResourceBundle::get() doesn't reset error state 2021-01-19 15:20:55 +01:00
Nikita Popov 1bdd8f7ae4 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fixed bug #42560
2021-01-19 11:44:22 +01:00
sj-i 5d31ee302d Fixed bug #42560
Check open_basedir after the fallback to the system's temporary
directory in tempnam().

In order to preserve the current behavior of upload_tmp_dir
(do not check explicitly specified dir, but check fallback),
new flags are added to check open_basedir for explicit dir
and for fallback.

Closes GH-6526.
2021-01-19 11:41:58 +01:00
Christoph M. Becker f33105dcb6 ldap_search() and friends can return array
See the description of <https://www.php.net/ldap-search>, and also the
implementation.

Closes GH-6620.
2021-01-19 10:35:17 +01:00
Christoph M. Becker cfae999f1b Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #69279: Compressed ZIP Phar extractTo() creates garbage files
2021-01-19 10:30:28 +01:00
Christoph M. BeckerandAnna Filina 68f5289e9e Fix #69279: Compressed ZIP Phar extractTo() creates garbage files
When extracting compressed files from an uncompressed Phar, we must not
use the direct file pointer, but rather get an uncompressed file
pointer.

We also add a test to show that deflated and stored entries are
properly extracted.

This also fixes #79912, which appears to be a duplicate of #69279.

Co-authored-by: Anna Filina <afilina@gmail.com>

Closes GH-6599.
2021-01-19 10:28:54 +01:00
Dylan K. Taylor 872f302b8d Keep JIT region executable under ZTS
When one thread tries to compile a script, another thread may
already be executing JITed code. In this case we can't make the
memory non-executable.

This violates the W^X principle, but doesn't seem to be avoidable
for ZTS builds for now. The same problem does not exist for NTS,
as it's a different process executing there, which has it's own
memory protection mapping.

Closes GH-6595.
2021-01-19 10:25:42 +01:00
Nikita Popov fbd8e20ed5 Observe unused return values in JIT
Even if the return value is not used, it should still be available
to the observer.
2021-01-19 10:09:53 +01:00
Nikita Popov dd7d829896 Disable opcache optimizations during some observer tests
Opcache inlines functions that only return a constant. Disable
optimizations to prevent differences in tests where such functions
are used (or rewrite the test to not depend on it).
2021-01-19 10:02:08 +01:00
Nikita Popov f2364f316d SplFileObject::fgets() cannot return false
spl_filesystem_file_read() is called with silent=0, so it will
throw on failure.
2021-01-18 16:47:21 +01:00
Nikita Popov 7290dc4dcf Sync gzgets signature with fgets 2021-01-18 15:47:12 +01:00
Nikita Popov ebf461a025 Sync datefmt_get_calendar_object signature
In this case, it's only a matter of using the same type order
in both cases.
2021-01-18 14:39:32 +01:00
Nikita Popov 39077deea5 Sync intlcal_create_instance() and IntlCalendar::createInstance()
Remove the explicit mention of IntlGregorianCalendar in the latter.
It is a subclass of IntlCalendar, and as such covered if only
IntlCalendar is used as the return type.
2021-01-18 14:39:32 +01:00
Nikita Popov c31f9f7ee4 Sync date_diff and DateTime::diff return type
This function/method cannot return false.
2021-01-18 14:39:32 +01:00
Nikita Popov 48e2e5324e Fix parameter name of PharData::getMetadata()
The name should be the same as for Phar::getMetadata().
2021-01-18 14:09:00 +01:00
Dylan K. Taylor 0aad77418d Fix stub for Phar::setStub()
This fixes multiple issues:
 * The first parameter may be resource|string.
 * It's an overloaded signature. The second parameter cannot be
   passed if the first one is a string. Use UNKNOWN default
   value for that reason.
 * Make parameter names in PharData::setStub() match those in
   Phar.

Closes GH-6596.
2021-01-18 12:59:18 +01:00
Christoph M. Becker c321896a37 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #80595: Resetting POSTFIELDS to empty array breaks request
2021-01-18 11:01:01 +01:00
Christoph M. Becker 38ad37ad43 Fix #80595: Resetting POSTFIELDS to empty array breaks request
This is mainly to work around https://github.com/curl/curl/issues/6455,
but not building the mime structure for empty hashtables is a general
performance optimization, so we do not restrict it to affected cURL
versions (7.56.0 to 7.75.0).

The minor change to bug79033.phpt is unexpected, but should not matter
in practice.

Closes GH-6606.
2021-01-18 10:57:56 +01:00
Nikita Popov 880bf62224 Fixed bug #80617: Type narrowing warning in ZEND_TYPE_INIT_CODE 2021-01-14 10:08:22 +01:00
Daniil Gentili f9fbba41b6 Fixed bug #80596: Fix anonymous class union typehint errors
Cut off part after null byte when resolving the class name, to
avoid cutting off a larger part lateron.

Closes GH-6601.
2021-01-14 10:04:27 +01:00
Dmitry Stogov 3edf5c969a Fixed bug #80422 (php_opcache.dll crashes when using Apache 2.4 with JIT) 2021-01-14 08:16:27 +03:00
Christoph M. Becker 41e9a8ebdc socket_create_pair() can no longer return NULL
Closes GH-6592.
2021-01-12 12:08:31 +01:00
David CARLIER 7a049cd6a4 Use arc4random_buf on macOS
macOS uses an AES based arc4random_buf implementation since at least
macOS 10.2.

Closes GH-6591.
2021-01-12 10:42:09 +01:00
Nikita Popov 973138f39d Add support for union types for internal functions
This closes the last hole in the supported types for internal
function arginfo types. It's now possible to represent unions of
multiple classes. This is done by storing them as TypeA|TypeB and
PHP will then convert this into an appropriate union type list.

Closes GH-6581.
2021-01-12 10:14:41 +01:00
Nikita Popov bc0f78a2da Use ephemeral port in socket_create_listen_used.phpt
Avoid parallelism issues.
2021-01-12 10:09:30 +01:00
Jens de Nies 94a151a018 Fixed bug #80545
This converts the remaining "non well-formed" warnings in bcmath
to ValueErrors, in line with the other warning promotions that
have been performed in this extension.

Closes GH-80545.
2021-01-12 09:50:27 +01:00
Christoph M. Becker 95a13ca989 Revert fix for bug 76813 and re2c version bump
CentOS 7 ships with re2c 0.13.5 by default, so we should not have
bumped the required re2c version to 0.13.7.  However, 0.13.5 does not
support default rules, so we cannot use them to fix bug 76813.

This reverts commit 420184ad52 and
5e15c9c41f.

Closes GH-6593.
2021-01-11 17:19:52 +01:00
Christoph M. Becker 52ed45745e Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Revert "Fix #76813: Access violation near NULL on source operand"
2021-01-11 13:21:56 +01:00
Christoph M. Becker 25103c37aa Revert "Fix #76813: Access violation near NULL on source operand"
This reverts commit 5e15c9c41f, since
re2c default rules are only available as of re2c 0.13.7.
2021-01-11 13:21:12 +01:00
Dmitry Stogov 35e0506a2e Add guard if lvalue of assignment may be a reference, but wasn't a reference during recording 2021-01-11 15:12:27 +03:00
George Peter Banyard f40838eaaa Rename `zip_ent parameter to zip_entry` for consistency
All other functions use ``zip_entry``
2021-01-08 22:26:24 +00:00
Christoph M. Becker 8ae02c8a95 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Avoid modifying the return value of readline_completion_function()
2021-01-07 13:48:17 +01:00
Christoph M. Becker 9450893dc6 Avoid modifying the return value of readline_completion_function()
The internal function `_readline_command_generator()` modifies the
internal array pointer of `readline_completion_function()`'s return
value.  We therefore separate the array, what also avoids failing
assertions regarding the array refcount.

Closes GH-6582.
2021-01-07 13:46:09 +01:00
Dharman 34ef804b04 Make fetch_* OO same as func
Clsoses GH-6580.
2021-01-06 15:02:52 +01:00
Christoph M. Becker f674a3343c Fix #80592: all floats are the same in ODBC parameters
We must not release the strings until we are done with them.

Closes GH-6579.
2021-01-06 13:56:02 +01:00
Dharman 44a311dbbe Fix/improve mysqli stubs
* mysqli_commit $flags default value is 0, not -1.
* A number of functions cannot actually return null.
* mysqli_poll parameter names were incorrect, as this function
  has a different signature from select.
* fetch functions apart from fetch_all can return false on failure.
2021-01-06 11:28:45 +01:00
Christoph M. Becker 90081c5391 Add missing SKIPIF clause for require_hash.phpt 2021-01-06 11:00:10 +01:00
Christoph M. Becker 66a74f2f4a Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #77565: Incorrect locator detection in ZIP-based phars
2021-01-05 23:46:05 +01:00
Christoph M. Becker d1b1c04398 Fix #77565: Incorrect locator detection in ZIP-based phars
We must not assume that the first end of central dir signature in a ZIP
archive actually designates the end of central directory record, since
the data in the archive may contain arbitrary byte patterns.  Thus, we
better search from the end of the data, what is also slightly more
efficient.

There is, however, no way to detect the end of central directory
signature by searching from the end of the ZIP archive with absolute
certainty, since the signature could be part of the trailing comment.
To mitigate, we check that the comment length fits to the found
position, but that might still not be the correct position in rare
cases.

Closes GH-6507.
2021-01-05 23:40:24 +01:00
Christoph M. Becker b7689db7ab Prevent double-free of Phar ZIP stream
We must not alias the closed stream to `phar_archive_data.fp`, and use
PHAR_ZIP_FAIL() for consistency with the rest of this function.

Closes GH-6578.
2021-01-05 14:31:43 +01:00
Christoph M. Becker afc69e46b8 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix memory leak in Phar::webPhar() on Windows
2021-01-05 14:25:44 +01:00
Christoph M. Becker 5c963731e2 Fix memory leak in Phar::webPhar() on Windows
Closes GH-6574.
2021-01-05 14:21:35 +01:00
Nikita Popov dd335359e9 Fix infinite recursion in unlinked_instanceof
I suspect this is only a partial fix for the issue, it's probably
possible to recurse through a more complex pathway as well.

Fixes oss-fuzz #28961.
2021-01-05 13:03:41 +01:00
Nikita Popov 5e57f37247 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  gdbinit: use ____print_str to print htable keys
2021-01-05 10:12:43 +01:00
Dylan K. Taylor 6b631f073d gdbinit: use ____print_str to print htable keys
I noticed this problem while dumping the contents of EG(function_table),
where keys for closures start with a null byte. printf interprets this
as a zero-length string and emits nothing. This allows the key to be
rendered properly in readable form.

Closes GH-6577.
2021-01-05 10:11:56 +01:00
Christoph M. Becker 121790eaff [ci skip] Add forgotten NEWS entry (bug 80560) 2021-01-04 18:19:45 +01:00
George Peter Banyard 764b7bf108 Fix bug #80584: 0x and 0X are considered valid hex numbers by filter_var()
Closes GH-6573
2021-01-04 18:07:47 +01:00
Christoph M. Becker 9f96b2bdc8 Fix #76929: zip-based phar does not respect phar.require_hash
Based on the patch provided by david at bamsoftware.

Closes GH-6517.
2021-01-04 17:48:45 +01:00
Nikita Popov 821eaaf0b4 Fix newly added GMP test 2021-01-04 15:27:20 +01:00
George Peter Banyard 1b5c62facd Fix GMP comparison object handler
gmp_cmp() doesn't return false anymore in PHP 8 but will throw
an Error if compared to a non numeric string or another type of object.

Closes GH-6553
2021-01-04 14:47:50 +01:00
Nikita Popov af7445b9ac Try to fix intermittent failures of stream_server_reneg_limit.phpt on macos
Make sure the server has started up before we try to connect to it.
2021-01-04 14:31:42 +01:00
Nikita Popov 65f14b0d6c Throw ValueError instead of TypeError for malformed GMP number
If the passed argument has correct type (string) but does not
have a well-formed value, throw ValueError instead of TypeError.

Closes GH-6572.
2021-01-04 14:30:08 +01:00
Christoph M. Becker abe23bd9a3 SQLite3::query() cannot return null 2021-01-04 12:13:06 +01:00
David CARLIER 6e90c75507 Mac M1 crc32 detection support
Closes GH-6556.
2021-01-04 11:41:52 +01:00
Nikita Popov 151fce1129 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Disable non-cron travis jobs
2021-01-04 10:55:50 +01:00
Stanislav Malyshev bf2bb39eac Fix test name 2021-01-04 01:52:59 -08:00
Nikita Popov 46d6daea7a Disable non-cron travis jobs
This was already done for PHP-8.0 and master, do it for PHP-7.4
as well.
2021-01-04 10:52:37 +01:00
Stanislav Malyshev 4d1c1e4554 [ci skip] Update NEWS 2021-01-04 01:47:47 -08:00
Stanislav Malyshev ced4c0bfe6 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  [ci skip] Update NEWS
  [ci skip] Fix order
  [ci skip] Unpdate NEWS
  Fix #77423: parse_url() will deliver a wrong host to user
2021-01-04 01:47:09 -08:00
Stanislav Malyshev e65932060a [ci skip] Update NEWS 2021-01-04 01:46:32 -08:00
Stanislav Malyshev ec589a27da Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  [ci skip] Fix order
2021-01-04 01:46:11 -08:00
Stanislav Malyshev 65d7ade684 [ci skip] Fix order 2021-01-04 01:45:15 -08:00
Stanislav Malyshev 2498385dd9 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  [ci skip] Unpdate NEWS
2021-01-04 01:44:18 -08:00
Stanislav Malyshev 8967e66559 [ci skip] Unpdate NEWS 2021-01-04 01:43:45 -08:00
Stanislav Malyshev 8768621149 Fix bug #79405 - gethostbyname() silently truncates after a null byte 2021-01-04 01:19:21 -08:00
Christoph M. Becker b132da7f9d Fix #77423: parse_url() will deliver a wrong host to user
To avoid that `parse_url()` returns an erroneous host, which would be
valid for `FILTER_VALIDATE_URL`, we make sure that only userinfo which
is valid according to RFC 3986 is treated as such.

For consistency with the existing url parsing code, we use ctype
functions, although that is not necessarily correct.
2021-01-04 01:19:18 -08:00
Christoph M. Becker aab23282fc Fix imap stubs
Closes GH-6559.
2021-01-03 16:15:46 +01:00
Christoph M. Becker e470f9b389 ZipArchive methods do not return NULL
Closes GH-6563.
2021-01-03 16:12:10 +01:00
Stanislav Malyshev 434c2b1bdb Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #77423: parse_url() will deliver a wrong host to user
2021-01-01 21:29:08 -08:00
Stanislav Malyshev 128fca4037 Merge branch 'PHP-7.2' into PHP-7.3
* PHP-7.2:
  Fix #77423: parse_url() will deliver a wrong host to user
2021-01-01 21:06:07 -08:00
Christoph M. Becker 2d3d72412a Fix #77423: parse_url() will deliver a wrong host to user
To avoid that `parse_url()` returns an erroneous host, which would be
valid for `FILTER_VALIDATE_URL`, we make sure that only userinfo which
is valid according to RFC 3986 is treated as such.

For consistency with the existing url parsing code, we use ctype
functions, although that is not necessarily correct.
2021-01-01 20:08:01 -08:00
Christoph M. Becker cae0bcbab5 Fix parameter name
Levenshtein is about insertion, replacement and deletion.

Closes GH-6560.
2021-01-01 23:04:28 +01:00
Christoph M. Becker b2fba0ef62 Fix build
We cannot `RETURN_THROWS()` here, since `return_value` is not defined.
2021-01-01 17:41:48 +01:00
Máté Kocsis b23c865d15 Use RETURN_THROWS() in a few places 2021-01-01 16:52:48 +01:00
Christoph M. Becker 82f9e004da Fix ReflectionClass::getConstants() stub
If `zval_update_constant_ex()` fails, an exception has already been
thrown, so we clarify that in the implementation as well.

Closes GH-6557.
2021-01-01 14:46:28 +01:00
Christoph M. Becker 2e854791af [ci skip] Fix pgsql constant names in UPGRADING 2020-12-31 00:30:16 +01:00
Máté Kocsis 446ad04524 Fix refentry attribute replacing 2020-12-30 18:26:24 +01:00
George Peter Banyard abecaab09f Fix #80560: Strings containing only a base prefix return 0 object
Closes GH-6549.
2020-12-30 12:50:04 +01:00
Dmitry Stogov da0ca53f39 Initialize EX(call)->func by single instruction 2020-12-29 13:20:10 +03:00
Dmitry Stogov 56fde2a381 Reuse value stored in %r0 instead of immediate operand 2020-12-29 13:18:56 +03:00
Christoph M. Becker 13f898b56a Fix ffi stubs
Closes GH-6543.
2020-12-28 19:04:47 +01:00
Máté Kocsis 46a2c6a8d7 Fix return type of DateTimeImmutable::__set_state() 2020-12-28 14:45:13 +01:00
Máté Kocsis 9cec093b7f Add support for generating methodsynopses from stubs
Closes GH-6367
2020-12-28 14:44:43 +01:00
Christoph M. Becker 420184ad52 Bump minimum re2c version to 0.13.7
Closes GH-6516.
2020-12-28 13:43:31 +01:00
Christoph M. Becker 45b638afe0 php_formatted_print() throws on failure
Closes GH-6542.
2020-12-27 22:40:25 +01:00
Christoph M. Becker 57430e6f1e Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Replace sort() function calls with ksort() in basic ksort test
2020-12-27 18:32:03 +01:00
haszi 0db6f5267c Replace sort() function calls with ksort() in basic ksort test
Closes GH-6541.
2020-12-27 18:30:58 +01:00
Christoph M. Becker 269936e680 DateTime*::getOffset() no longer returns false as of PHP 8.0.0
Cf. <https://github.com/php/doc-en/pull/282>.

Closes GH-6539.
2020-12-26 15:13:05 +01:00
Dmitry Stogov 23bbff2b05 Eliminate redundand comparison insructions 2020-12-24 16:58:54 +03:00
Máté Kocsis ab4c5976d7 Fix the signature of FFI::typeof() and FFI::memcmp() 2020-12-24 11:45:32 +01:00
Máté Kocsis c1d766171b Add a few other RETURN_THROWS() 2020-12-24 11:44:15 +01:00
Máté Kocsis ed19cb6518 Fix the signature of FFI::sizeof() and FFI::alignof() 2020-12-24 11:39:09 +01:00
Christopher Jones 34aefa36f4 Fix PDO_OCI test 2020-12-24 17:48:39 +11:00
Semen Dubina 959d3c9636 Add regression test for bug #76770
Closes GH-3514.
2020-12-23 16:47:08 +01:00
Christoph M. Becker 7d9ddd61ec Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #80384: limit read buffer size
2020-12-23 13:52:45 +01:00
Adam SeitzandChristoph M. Becker 70dfbe0068 Fix #80384: limit read buffer size
In the case of a stream with no filters, php_stream_fill_read_buffer
only reads stream->chunk_size into the read buffer. If the stream has
filters attached, it could unnecessarily buffer a large amount of data.

With this change, php_stream_fill_read_buffer only proceeds until either
the requested size or stream->chunk_size is available in the read buffer.

Co-authored-by: Christoph M. Becker <cmbecker69@gmx.de>

Closes GH-6444.
2020-12-23 13:49:56 +01:00
Derick Rethans 288332077f Fixed bug #80376 (last day of the month causes runway cpu usage) 2020-12-21 10:31:41 +00:00
Derick Rethans b043759cb4 Fixed bug #80376 (last day of the month causes runway cpu usage) 2020-12-21 10:30:40 +00:00
Nikita Popov 27e250880b Fix bug #80537
This is an unavoidable breaking change to both the type and
parameter name.

The assertion that was supposed to prevent this was overly lax
and accepted any object type for string parameters.
2020-12-21 10:21:50 +01:00
Christopher Jones d6731d69bd Description typo 2020-12-21 15:46:26 +11:00
Christopher Jones 74959b47cd Bundle PECL OCI8 3.0.1 2020-12-21 15:15:16 +11:00
Christopher Jones 2877642037 Retrofit NEWS 2020-12-21 15:07:40 +11:00
Christoph M. Becker 32c6c29d79 Revert "DateTime:: and DateTimeImmutable::getTimestamp() may return false"
This reverts commit b67c232189.
2020-12-20 23:07:02 +01:00
Christoph M. Becker b67c232189 DateTime:: and DateTimeImmutable::getTimestamp() may return false 2020-12-20 19:32:12 +01:00
Christoph M. Becker 3c68f43251 Fix ext/date stubs
Closes GH-6523.
2020-12-20 18:14:20 +01:00
Nikita Popov 51f57e7b81 PDO MySQL: Handle boolean parameter binding with libmysql
Previously boolean parameters were simply silently ignored...
2020-12-18 11:01:26 +01:00
Nikita Popov ab84623108 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  MySQLnd: Support cursors in store/get result
2020-12-18 10:20:13 +01:00
Nikita Popov bc166844e3 MySQLnd: Support cursors in store/get result
This fixes two related issues:

1. When a PS with cursor is used in store_result/get_result,
   perform a COM_FETCH with maximum number of rows rather than
   silently switching to an unbuffered result set (in the case of
   store_result) or erroring (in the case of get_result).
   In the future, we might want to make get_result unbuffered for
   PS with cursors, as using cursors with buffered result sets
   doesn't really make sense. Unlike store_result, get_result
   isn't very explicit about what kind of result set is desired.
2. If the client did not request a cursor, but the server reports
   that a cursor exists, ignore this and treat the PS as if it
   has no cursor (i.e. to not use COM_FETCH). It appears to be a
   server side bug that a cursor used inside an SP will be reported
   to the client, even though the client cannot use the cursor.

Fixes bug #64638, bug #72862, bug #77935.

Closes GH-6518.
2020-12-18 10:19:13 +01:00
Christoph M. Becker 1860ef22eb Fix #80521: Parameters with underscores no longer recognized
We have to use the proper value for the bitmask.
2020-12-16 20:04:52 +01:00
Nikita Popov c56701690a Detect overlarge step for character range()
This was done for int and float ranges, but not char ranges.

Fixes oss-fuzz #28666.
2020-12-16 17:01:15 +01:00
Nikita Popov 205d209de9 PDO MySQL: Use mysqlnd column names
mysqlnd already creates interned zend_strings for us, so let's
make use of them.

This also required updating the PDO case changing code to work
with potentially shared strings. For the lowercasing, use the
optimized zend_string_tolower() implementation.
2020-12-16 15:17:13 +01:00
Nikita Popov 1a66d64717 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fixed bug #67983
2020-12-16 10:53:48 +01:00
Nikita Popov 315f3f8dc9 Fixed bug #67983
We need to check the BIT case first, otherwise it will get skipped
in INT_AND_FLOAT_NATIVE mode.
2020-12-16 10:52:27 +01:00
Nikita Popov f6bd3dfdbc Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix bug #80523
2020-12-16 10:20:43 +01:00
Nikita Popov 118ff03335 Fix bug #80523
Don't truncate the file length to unsigned int...

I have no idea whether that fully fixes the problem because the
process gets OOM killed before finishing, but at least the
immediate parse error is gone now.
2020-12-16 10:20:20 +01:00
Derick Rethans e586a35fc7 Merge branch 'PHP-7.4' into PHP-8.0 2020-12-15 14:13:43 +00:00
Derick Rethans 078cdd8f76 Prepare for 7.4.15 2020-12-15 14:13:29 +00:00
Gabriel Caruso 9eea9aae10 Prepare for PHP 8.0.2
This was missing from f1f78ac875.
2020-12-15 11:03:21 -03:00
Gabriel Caruso f1f78ac875 Next is 8.0.2 2020-12-15 10:30:55 -03:00
Dmitry Stogov de78786566 Optimize out result value of ASSIGN, ASSIGN_OP and INC/DEC opcodes, if possible. 2020-12-15 14:30:58 +03:00
Christoph M. Becker c2fbab392c Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #77322: PharData::addEmptyDir('/') Possible integer overflow
2020-12-15 11:46:28 +01:00
Christoph M. Becker a53d67ceac Fix #77322: PharData::addEmptyDir('/') Possible integer overflow
`phar_path_check()` already strips a leading slash, so we must not
attempt to strip the trailing slash from an now empty directory name.

Closes GH-6508.
2020-12-15 11:44:53 +01:00
Christoph M. Becker 305500a3b1 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  7.3.27 is next
2020-12-15 11:32:10 +01:00
Christoph M. Becker c0a1c2c5ee Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  7.3.27 is next
2020-12-15 11:30:46 +01:00
Christoph M. Becker 40d9e3ab86 7.3.27 is next 2020-12-15 11:28:01 +01:00
Ayesh Karunaratne 724e241c9d JIT: Update invalid opcache.jit INI value message to include "tracing" and "function" values
`opcache.jit` accepts `tracing` and `function` as aliases, but they were not mentioned in the start-up INI warning message.
This updates the error message to include all possible values.

Closes GH-6490.
2020-12-15 10:18:33 +01:00
Nikita Popov b6d043aae2 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  IBM i PASE doesn't support ITIMER_PROF
2020-12-15 10:15:47 +01:00
Calvin Buckley 54248b18fe IBM i PASE doesn't support ITIMER_PROF
Like Cygwin, this platform needs to use a real-time timer.

This was based on a patch by @kadler, but it didn't handle unsetting
the timer, so the timeout would continue to be active, triggering
`hard_timeout` unexpectedly. The patch is fixed to handle unsetting.

Closes GH-6503.
2020-12-15 10:15:28 +01:00
David Carlier 1e6c7e776c JIT disabled build fix.
Closes GH-6514.
2020-12-15 09:51:16 +01:00
Christoph M. Becker 2e974c8c81 Add Windows support for OCI 19
As requested by Christopher Jones.
2020-12-14 23:11:04 +01:00
Christoph M. Becker 15d9c42070 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Drop pdo_mysql_prepare_load_data.phpt
2020-12-14 18:27:53 +01:00
Christoph M. Becker 10c9d615de Drop pdo_mysql_prepare_load_data.phpt
Like the test title and some comments in this test describe, this test
was supposed to have `::prepare()` failing because `LOAD DATA INFILE`
would not be supported as prepared statement, and then the test checks
whether follow-up queries would succeed.  However, `LOAD DATA INFILE`
is supported for prepared statements at least on Windows with mysqlnd,
so the test does no longer test what it is supposed to do.  Therefore,
we drop it.

Closes GH-6509.
2020-12-14 18:26:12 +01:00
Dmitry Stogov b3377028dc Remove unused flag 2020-12-14 15:29:21 +03:00
Dmitry Stogov 66e390707c Fixed bug #80506 (Immediate SIGSEGV upon ini_set("opcache.jit_debug", 1)) 2020-12-14 15:28:03 +03:00
Dmitry Stogov a12e7affd7 Fixed bug #80506 (Immediate SIGSEGV upon ini_set("opcache.jit_debug", 1)) 2020-12-14 15:26:11 +03:00
Jakub Zelenka d254078020 Merge branch 'PHP-7.4' into PHP-8.0 2020-12-13 18:42:11 +00:00
Jakub Zelenka a221e17b41 Fix bug #69625: FPM returns 200 status on request without SCRIPT_FILENAME 2020-12-13 18:39:48 +00:00
ekinhbayar b0e858da8b Remove bug41347.phpt as the error cases are already tested
Closes GH-6506.
2020-12-11 16:47:40 +01:00
Nikita Popov ccb7f1c7d8 Fixed bug #79132
Following cmb's suggestion and replacing the counter with a check
against the bound_params HT, which ensures that both cannot go
out of sync.
2020-12-11 16:35:03 +01:00
Nikita Popov 7a89157f8c PDO MySQL: Fix nextRowset() on libmysqlclient with native PS
The logic after next_result should match the one after execute.
This was the case for mysqlnd but not libmysqlclient, which used
the non-PS logic.
2020-12-11 14:48:44 +01:00
Nikita Popov 81f012a164 PDO MySQL: Don't skip two LOCAL_INFILE tests with libmysqlclient 2020-12-11 14:48:43 +01:00
Nikita Popov e4e88bd7e3 PDO MySQL: Unskip bug_41125.phpt
This test was always skipped (leftover debug statement?)

Contrary to the comments in the test and the test expectation,
this actually works fine.
2020-12-11 13:04:20 +01:00
Nikita Popov ad8eb116d8 Fixed bug #67004
Repeated execute() with native PS failed to release the previous
result set on libmysqlclient.

Move freeing the result set into a common location.
2020-12-11 12:52:59 +01:00
Nikita Popov d6b4b82a38 PDO MySQL: Use stmt_next_result with libmysqlclient as well
libmysqlclient added this function in version 5.5, which happens
to be the minimum we support. If we have a prepared statement,
we should use it on both mysqlnd and libmysqlclient, even if the
handling afterwards is different.

This fixes error handling with native prepared statements.
2020-12-11 12:20:04 +01:00
Nikita Popov 4e51059d52 PDO MySQL: Fix libmysql option test
The fact that getAttribute() fails for various libmysqlclient-only
options is a known issue, and the test was taking that into account.
However, the change of the default error mode broke the handling.
We need to handle the exceptions now.
2020-12-11 12:20:02 +01:00
Nikita Popov 43741a3f26 Fixed bug #62889
Our minimum libmysqlclient version requirement is high enough
that we don't need to check for MYSQL_OPT_LOCAL_INFILE support.

However, the mysql_get_option() function seems to only be available
since 5.7 (though it's really hard to find any definitie information
on when MySQL introduced certain functions or changes...) so we
need to store the value of the flag locally to make it available
through getAttribute().
2020-12-11 11:25:36 +01:00
Nikita Popov c927c831e6 PDO MySQL: Fix leak with libmysqlclient and multiple rowsets
stmt->column_count gets reset before the next_rowset handler is
invoked, so we need to fetch the value from the result set instead.

Arguably PDO should be separating the destruction of the previous
result set and the switch to the next result set more cleanly...
2020-12-11 10:51:14 +01:00
Dharman 54a63d91b8 Fix test cases for MariaDB
And remove unnecessary try-catch.

Closes GH-6505.
2020-12-11 09:53:20 +01:00
Nikita Popov 9e3ba775b7 Fixed bug #72368
Generate a param count mismatch error even if the query contains
no placeholders.

Additionally we shouldn't HANDLE errors from pdo_parse_params,
which are always reported via raise_impl_error. Doing so results
in duplicate error messages.
2020-12-10 16:53:08 +01:00
Nikita Popov a5527577e7 Allow drivers to omit error code
And thus generate error messages that match what PDO emulation
would generate.

This fixes the error message regression from the previous commit.
2020-12-10 16:04:33 +01:00
Nikita Popov 15b51a215a Fixed bug #79131
When a driver reports an error during EVT_ALLOC (and some over EVTs),
make sure we handle it as usual, i.e. warn or throw.

This requires some adjustments in PDO PgSQL to stop manually doing
this through an impl error.

Unfortunately the PDO PgSQL error messages regress because of this,
as they now include a completely arbitrary error code. There doesn't
seem to be an ability to skip it right now.
2020-12-10 15:53:23 +01:00
Dmitry Stogov dde5572937 Eliminate some repeatable IS_REFERENCE checks 2020-12-10 14:45:54 +03:00
Nikita Popov 288581fade Fixed bug #79872 by improving error message
The actual behavior here is correct, but the previous error
message was misleading, as neither fetchAll() nor buffered queries
would help in this situation. Instead it is necessary to consume
all rowsets, which can be done by either unsetting the statement
or calling closeCursor().
2020-12-10 11:46:29 +01:00
Nikita Popov d63aedd173 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fixed bug #76815
2020-12-10 11:24:19 +01:00
Nikita Popov e450621f5e Fixed bug #76815
When we receive an error while reading a result set, we should
assume that no more result sets are available. libmysqlclient
implements the same behavior.
2020-12-10 11:23:41 +01:00
Nikita Popov 9b678bc4d5 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fixed bug #71145
2020-12-10 10:31:36 +01:00
Nikita Popov 4922049213 Fixed bug #71145
Consume any additional result sets when running INIT_COMMAND.
2020-12-10 10:28:10 +01:00
twosee 26c7b9402d EXTERN_C wrapping for GC buffer APIs
Closes GH-6502.
2020-12-10 17:15:19 +08:00
Nikita Popov c95680d4b7 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Backport fix for bug #70066
2020-12-10 10:05:38 +01:00
Nikita Popov f3d5877845 Backport fix for bug #70066
Given the number of duplicates this bug report had, it seems
worthwhile to fix this on PHP-7.4 as well.

Cherry-pick of 106e7e4bca.
2020-12-10 09:58:47 +01:00
Dmitry Stogov e9f9e9f863 Perform early guard type check for result of FETCH_CONSTANT 2020-12-09 22:24:03 +03:00
Nikita Popov 106e7e4bca Fixed bug #70066
If we fall back to emulated prepared statements, destroy S->stmt,
so the code doesn't get confused about which mode we're in.
2020-12-09 17:24:30 +01:00
Nikita Popov fcfa7fd06b Fixed bug #66878
Keep track of whether we have fully consumed all result sets,
either using nextRowset() calls or closeCursor() and skip the
attempt to consume remaining results sets during destruction in
that case.

Especiall if closeCursor() has been used, we really shouldn't
have this sort of cross-statement inference.
2020-12-09 16:38:22 +01:00
Nikita Popov ef342b0730 Remove unnecessary more_results() checks
Just calling next_result() is sufficient.
2020-12-09 16:16:17 +01:00
Nikita Popov a073b0218c Add ifdef for mysqlnd only function 2020-12-09 16:16:17 +01:00
Nikita Popov b9ea8d6b96 PDO MySQL: Extract common code for handling PS results 2020-12-09 15:28:16 +01:00
Nikita Popov fb69c7752d PDO MySQL: Use set_row_count() helper 2020-12-09 15:21:12 +01:00
Dmitry Stogov 8d268e8443 Fixed IS_32BIT/IS_SIGNED_32BIT mess 2020-12-09 17:16:54 +03:00
Nikita Popov 186b766368 PDO MySQL: Make sure nextRowset() works with partially consumed result
This was already working in all cases apart from native prepared
statements with unbuffered queries. In that case invoking
stmt_free_result() addresses the issue.
2020-12-09 14:46:49 +01:00
Nikita Popov 23193e89e4 PDO MySQL: Handle error during closeCursor() 2020-12-09 14:04:30 +01:00
Nikita Popov 71b5f1446e Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fixed bug #78154
2020-12-09 12:47:34 +01:00
Nikita Popov 44b234a9bc Fixed bug #78154
Handle errors during next_result in exec.
2020-12-09 12:46:47 +01:00
Nikita Popov 18517e7a63 Fix stmt_free_result implementation and usage
Two bugs both affecting the bug_pecl_7976.phpt test ("works with
mysqlnd" haha):

 * We should not change the connection state in stmt_free_result.
   This makes mysql_stmt_free_result usable under mysqlnd and
   not just libmysqlclient.
 * If we call mysql_stmt_free_result, we still need to consume
   any outstanding result sets.
2020-12-09 11:13:48 +01:00
Nikita Popov 9c0712d2cd Make XFAILED test less broken
At least allow it to print some output rather than throw right
away...
2020-12-09 10:42:44 +01:00
Nikita Popov 311a77d08e Handle changing column count in mysqlnd result binding
If the count changes from prepare to execute and result_bind is
alreadly allocated, reallocate it there.

This is something of a hack. It would be cleaner to require that
result bindings are registered only after execute, when the final
result set fields are known. But mysqli at least directly exposes
this to the user, so we have no guarantee.
2020-12-09 10:30:23 +01:00
Nikita Popov 2df09b9b64 PDO MySQL: Normalize handling of empty stored procedure result set
MySQL always returns a trailing empty result set for stored
procedure calls, which is used to convey status information.
The PDO MySQL implementation is presently confused about what to
do with it: If mysqlnd is used and native prepared statements are
used, this result set is skipped. In all other cases it is not
skipped. We also have quite a few XFAILed tests relating to this.

This patch normalizes (for PHP-8.0 only) the behavior towards
always retaining the empty result set. This is simply how MySQL
stored procedures work (some expletives omitted here) and we can't
distinguish this "useless" result set from an empty result of a
multi query. Multi queries are not a concern for native prepared
statements, as PDO does not allow them in that case, but they are
a concern for emulated prepared statements.

Closes GH-6497.
2020-12-08 17:01:56 +01:00
Nikita Popov bfa69d27bc Handle column count change in PDO MySQL
This has been fixed for PDO SQlite by GH-4313, however the same
issue also applied to PDO MySQL.

Move the column count setting function into the main PDO layer
(and export it) and then use it in both PDO SQLite and PDO MySQL.
2020-12-08 16:41:35 +01:00
Nikita Popov 713ef8511b Enable XFAILed test
This one had a rather scary XFAIL message, but seems to work just
fine...
2020-12-08 16:03:50 +01:00
Christoph M. Becker fb4bc0f9e5 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #48725: Support for flushing in zlib stream
2020-12-08 12:24:49 +01:00
Christoph M. Becker 20e75329f2 Fix #48725: Support for flushing in zlib stream
When `php_zlib_deflate_filter()` is called with `PSFS_FLAG_FLUSH_INC`
but without new buckets being available (e.g. because a user calls
`rewind()` after writing to the stream), we have to make sure that any
pending data are flushed.  This could basically be done like in the
attached patch[1], but that could cause unnessary flushes, which can be
harmful for compression, and adds unnecessary flush markers to the
stream.  Thus, we use the `php_zlib_filter_data.finished` field, which
has not been used for `zlib.deflate` filters, and properly keep track
of the need to flush.

[1] <https://bugs.php.net/patch-display.php?bug_id=48725&patch=zlib-filter-flush-fix.patch&revision=latest>

Closes GH-6019.
2020-12-08 12:23:24 +01:00
Christoph M. Becker d6ae0f010e Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #77069: stream filter loses final block of data
2020-12-08 11:49:28 +01:00
Christoph M. Becker 65f5573bc8 Fix #77069: stream filter loses final block of data
Reading from a stream may return greater than zero, but nonetheless the
stream's EOF flag may have been set.  We have to cater to this
condition by setting the close flag for filters.

We also have to cater to that change in the zlib.inflate filter:

If `inflate()` is called with flush mode `Z_FINISH`, but the output
buffer is not large enough to inflate all available data, it fails with
`Z_BUF_ERROR`.  However, `Z_BUF_ERROR` is not fatal; in fact, the zlib
manual states: "If deflate returns with Z_OK or Z_BUF_ERROR, this
function must be called again with Z_FINISH and more output space
(updated avail_out) but no more input data, until it returns with
Z_STREAM_END or an error."  Hence, we do so.

Closes GH-6001.
2020-12-08 11:47:49 +01:00
Christoph M. Becker c3734f9ae1 ldap_exop_whoami() does not return TRUE
Closes GH-6496.
2020-12-08 11:44:04 +01:00
Nikita Popov bd72e4aa44 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fixed bug #63185
2020-12-08 11:35:57 +01:00
Nikita Popov bd093ad861 Fixed bug #63185 2020-12-08 11:30:54 +01:00
Dmitry Stogov db34491a62 Avoid unnecessary checks 2020-12-08 13:10:35 +03:00
Nikita Popov 2d467abc46 Fix another typed resource issue in unserialization
We also need to discard old entries in the ref_props HT when values
are overwritten.

We should really forbid these kinds of overwrites. I believe they
can only occur in manually crafted serialization strings, and
cause so many problems...

Fixes oss-fuzz #28257.
2020-12-07 12:36:09 +01:00
Dmitry Stogov 7971602574 Fixed bug #80480 (Segmentation fault with JIT enabled) 2020-12-07 13:28:37 +03:00
Nikita Popov 9dc42b4114 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fixed bug #80458
2020-12-04 17:00:51 +01:00
Dharman a83cc03c13 Fixed bug #80458
If there is no result set (e.g. for upsert queries), still allow
fetching to occur without error, i.e. treat it the same way as
an empty result set.

This normalizes behavior between native and emulated prepared
statements and addresses a regression in PHP 7.4.13.
2020-12-04 16:59:47 +01:00
Christoph M. Becker b52db133df Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #75102: `PharData` says invalid checksum for valid tar
2020-12-04 13:04:33 +01:00
Christoph M. Becker 8588ae7215 Fix #75102: PharData says invalid checksum for valid tar
Apparently, there are broken tarballs out there which are actually in
ustar format, but did not write the `ustar` marker.  Since popular tar
tools like GNU tar and 7zip have no issues dealing with such tarballs,
Phar should also be more resilient.

Thus, when the first checksum check of a tarball in (presumed) in old-
style format fails, we check whether the checksum would be suitable for
ustar format; if so, we treat the tarball as being in ustar format.

Closes GH-6479.
2020-12-04 13:02:29 +01:00
Nikita Popov 77325c4448 Fix removal of type source during unserialization
Missed a check for info in this code. Add it, and add an assertion
in type source removal to make it easier to catch this issue.

Fixes oss-fuzz #28208 and #28257.
2020-12-04 12:56:05 +01:00
George Peter Banyard 426fe2f20c Standardize behaviour for int message number between functions 2020-12-03 17:43:08 +00:00
George Peter Banyard e45cc31c41 Add tests for passing a UID instead of a message number 2020-12-03 16:38:22 +00:00
Nikita Popov 724ee93ce6 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Upload coverage data to codecov.io
2020-12-03 12:05:14 +01:00
Paul Crovella 8f8e6f95af Upload coverage data to codecov.io
Closes GH-6486.
2020-12-03 12:04:50 +01:00
Nikita Popov 1a1eeee716 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix mysqli_expire_password test for mariadb
2020-12-03 11:02:11 +01:00
Nikita Popov 0f6c41c6f8 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix mysqli_expire_password test for mariadb
2020-12-03 11:01:57 +01:00
Daniel Black 0697a64f7e Fix mysqli_expire_password test for mariadb
In MariaDB-10.4.3 EXPIRE passwords where supported for
MariaDB. This only behaves like MySQL when the system
variable disconnect_on_expired_passwords=1.

MariaDB if there was no password it could not be considered
expired. So the test is adjusted to use actual passwords.
(MariaDB commit a94b20a8e0d9e64eeaabdaaa7a3e03fcdb8a686e)

The error codes produced my MariaDB are different
however still conforming to the SQL specification.

Closes GH-6480.
2020-12-03 10:56:00 +01:00
Nikita Popov 98cccd304a Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  fix mysqli_stmt_get_result_metadata_fetch_field test for mariadb
2020-12-03 10:45:27 +01:00
Daniel Black 5d5c1cea5f fix mysqli_stmt_get_result_metadata_fetch_field test for mariadb
MariaDB extended the default decimal field to 39 characters
instead of MySQL's 31 characters.

This small change allows the test to pass on MySQL and MariaDB.

Closes GH-6484.
2020-12-03 10:45:11 +01:00
Dharman 261faa62da Remove PHP 5 mysqli tests
These tests all require functions that no longer exist.
2020-12-03 10:42:46 +01:00
Dharman 53f7bddbeb Fix typos in mysql tests
%d because of line endings on Windows
2020-12-03 10:42:39 +01:00
Nikita Popov 8d2a1c8966 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Backport fix for bug #78750
2020-12-03 10:22:21 +01:00
Peter Kokot d386ed1e6b Backport fix for bug #78750
Cherry-picks
fe2afef36f
and
86e2b7bb70.
2020-12-03 10:07:09 +01:00
Christian Schneider 7bc7a80445 Make is_file() and friends return false when path contains 0-byte
These functions now return false silently:
is_writable, is_readable, is_executable, is_file, is_dir, is_link,
file_exists

These functions now throw a warning an return false (rather than
throwing a ValueError):
fileperms, fileinode, filesize, fileowner, filegroup, filetype,
fileatime, filemtime, filectime, lstat, stat

See also https://externals.io/message/112333.

Closes GH-6478.
2020-12-03 09:43:15 +01:00
Christoph M. Becker 72cd5793be Fix failing VirtualProtect() calls
Whenever JIT is disabled due to incompatibilities, we also need to set
`JIT_G(on)` to zero.

Closes GH-6470.
2020-12-02 16:51:50 +01:00
Nikita Popov 9dda22bd1e Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fixed bug #80457
2020-12-02 11:29:41 +01:00
Nikita Popov f2833ca1be Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fixed bug #80457
2020-12-02 11:29:06 +01:00
Nikita Popov d6fcaf5da4 Fixed bug #80457
On x32 sizeof(size_t) != sizeof(zend_long), so we need to be
careful with sign extension here.

Patch by bruno dot premont at restena dot lu.
2020-12-02 11:26:10 +01:00
Nikita Popov a89aaf6c38 Don't throw from imagecreatefromstring() with too short string
If the string is too short, we should treat this the same way as
an unrecognized image type. This function should be usable to
determine whether something is a valid image without doing any
checks beforehand.
2020-12-02 10:51:55 +01:00
Nikita Popov 7a61984a2b Fixed bug #80462 2020-12-02 10:19:32 +01:00
George Peter Banyard 5aaffc8095 Backport IMAP test modernization to PHP-8.0 branch
Closes GH-6476
2020-12-01 16:38:08 +00:00
Christoph M. Becker 83cf4aa13a Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #73809: Phar Zip parse crash - mmap fail
2020-12-01 17:00:27 +01:00
Christoph M. Becker c283f53b24 Fix #73809: Phar Zip parse crash - mmap fail
Phar signatures practically are of limited size; for the MD5 and SHA
hashes the size is fixed (at most 64 bytes for SHA512); for OpenSSL
public keys there is no size limit in theory, but "64 KiB ought to be
good enough for anybody".  So we check for that limit, to avoid fatal
errors due to out of memory conditions.

Since it is neither possible to have the signature compressed in the
ZIP archive, nor is it possible to manually add a signature via Phar,
we use ZipArchive to create a suitable archive for the test on the fly.

Closes GH-6474.
2020-12-01 16:58:19 +01:00
Dmitry Stogov 44475e70e2 Fixed bug #80447 (Strange out of memory error when running with JIT) 2020-12-01 16:46:41 +03:00
Dmitry Stogov 1674c96c0b Bug #80447 (Strange out of memory error when running with JIT) 2020-12-01 16:43:05 +03:00
Dmitry Stogov 8ad2b59e12 Disable stack reuse optimization for x86 PIC code. It may clobber local variable used for Global Offset Table. 2020-12-01 15:20:06 +03:00
Nikita Popov f06afc434a Don't use scope when validating Attribute
This is not safe to do at this point. Even if we made it safe,
we'd see inconsistencies due to a partially compiled class.

Fixes oss-fuzz #28129.
2020-12-01 11:49:27 +01:00
Nikita Popov 5dfec886d6 Fix use after free with file cache and arena allocated strings 2020-12-01 11:31:23 +01:00
Nikita Popov 648cda6c9f Don't mark cpu_supports functions as always inline
The use of no-sanitize may result in an inlining failure, which
will be promoted into a compile error by always-inline. Use a
normal inlining hint without enforcing it.
2020-12-01 10:22:36 +01:00
Dmitry Stogov 4959c60524 Fixed incorrect "skipif.inc" include 2020-12-01 11:34:09 +03:00
Dmitry Stogov 31eafedf2e Skip test if JIT is not available 2020-12-01 09:58:33 +03:00
Christoph M. Becker f1d11c118d Fix #62004: SplFileObject: fgets after seek returns wrong line
As it is, `::seek(0)` sets the file pointer to the beginning of the
file, but `::seek($n)` where `$n > 0` sets the file pointer to the
beginning of the following line, having line `$n` already read into the
line buffer.  This is pretty inconsistent; we fix it by always seeking
to the beginning of the line.

We also add a test case for the duplicate bug #46569.

Closes GH-6434.
2020-11-30 16:03:37 +01:00
Dmitry Stogov 841b00f641 Preallocate stack space for JIT in execute_ex() to eliminate JIT prologue/epilogue. 2020-11-30 17:56:08 +03:00
Dmitry Stogov 5f36d0497f Fixed "may be used uninitialized" compilation warnings 2020-11-30 17:46:43 +03:00
Christoph M. Becker 57463cf78b Drop all JIT related XFAILS from phpdbg test suite
phpdbg now disables JIT, so these cause XFAIL warnings.
2020-11-30 15:24:15 +01:00
Nikita Popov 32cd5a1bc8 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Next attempt to fix bug #80368
2020-11-30 15:17:27 +01:00
Nikita Popov ecee3f1209 Next attempt to fix bug #80368
Apparently treating LibreSSL as OpenSSL 1.1 is not just something
we did in our code, it's something that upstream LibreSSL claims,
despite not actually being compatible. Duh.

Check for EVP_CIPH_OCB_MODE instead, which should reliably
determine support...
2020-11-30 15:15:59 +01:00
George Peter Banyard 0076b47326 Fix Bug #80438: imap_msgno() incorrectly warns and return false on valid UIDs in PHP 8.0.0
Checking for a valid Unique ID (UID) cannot use the convenience macro as they might
be larger than the message number which has for maximum value the total number of
current messages available in the mailbox.
2020-11-30 14:08:31 +00:00
George Peter Banyard a55402d07c Rename XmlParser to XMLParser for consistency with XMLWriter/XMLReader 2020-11-30 14:08:31 +00:00
Nikita Popov 24a19cc232 Suppress stream errors in mysqlnd
mysqlnd currently sets error_reporting=0 to suppress errors while
writing to streams. Unfortunately these errors are still visible
to userland error handlers, which is a source of confusion.
See for example https://bugs.php.net/bug.php?id=80412.

Instead add a stream flag that suppresses the emission of
read/write errors in the first place, and set it in mysqlnd.

I think it might be useful to have this option for userland as
well in the future, but for now this is just an internal
mechanism.

Closes GH-6458.
2020-11-30 15:06:28 +01:00
Dmitry Stogov a0baa09b99 Hide phpdbg/JIT incompatibility macro (JIT is disabled for phpdbg) 2020-11-30 16:42:17 +03:00
Nikita Popov 4643c0aac5 Add additional entries to unserialize corpus
These are useful to seed typed property fuzzing.
2020-11-30 14:32:07 +01:00
Nikita Popov ed9532cff0 Fix another ref source management bug in unserialize
When we overwrite an existing property during unserialization,
we also have to drop the ref source from it.
2020-11-30 14:23:54 +01:00
Christoph M. Becker 666833b238 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #76813: Access violation near NULL on source operand
2020-11-30 12:33:13 +01:00
Christoph M. Becker 5e15c9c41f Fix #76813: Access violation near NULL on source operand
We avoid `YYCURSOR` becoming `NULL` by initializing `YYMARKER`, and add
a default rule for `<NORMAL>` where we catch unexpected input.

We also fix the only superficially related issue regarding empty input
followed by `T_SEPARATOR` and command, which caused another segfault.

Closes GH-6464.
2020-11-30 12:29:24 +01:00
Dmitry Stogov d5a82e2c4e Disable JIT with incompatible third-party extensions 2020-11-30 13:58:34 +03:00
Nikita Popov 15073d8e1d Fixed bug #80437
Only chmod if the file has been created.
2020-11-30 11:40:46 +01:00
Nikita Popov fdb05b92bf Only replace IN_ARRAY result type for JMPZ/JMPNZ
Replacing the result type in the general case is dangerous,
because not all opcodes support both VAR and TMP. One common case
is the in_array() result being passed to SEND_VAR, which would
have to be changed to SEND_VAL.

Rather than complicating this logic, reduce the scope to only
doing the type replacement for JMPZ and JMPNZ. The only reason
we're doing this in the first place is to enable the smart branch
optimization, so we can limit it to the relevant opcodes. Replacing
the result type may be marginally useful in other cases as well
(as it may avoid reference checks), but not worth the bother.
2020-11-30 11:18:21 +01:00
Nikita Popov e77ac88a44 Use ephemeral ports in mcast_ipv*_recv.phpt 2020-11-30 09:49:39 +01:00
Christoph M. Becker 44ccccdfb8 tidy::repairFile() and ::repairString() return string|false 2020-11-30 00:29:10 +01:00
Nikita Popov 5b3809e942 Respect strict_types during sccp function call evaluation
Similar to what we do with attributes, add a dummy call frame
on which we can set the strict_types flag.
2020-11-27 20:24:00 +01:00
Nikita Popov 0ce9b5f755 Don't check for throwing calls in sccp function evaluation
We only need to reject functions that could warn (or have runtime
dependent behavior). If a function can throw in some cases, just
let it and discard the result.
2020-11-27 17:49:51 +01:00
Nikita Popov a505fc627e Fix handling of sccp exceptions
We should clear the exception *before* we destroy the execute_data.
Add a variation of the test that indirects through another file,
and would crash otherwise.
2020-11-27 17:44:30 +01:00
Jakub Zelenka a87d620543 Merge branch 'PHP-7.4' into PHP-8.0 2020-11-27 16:35:16 +00:00
Jakub Zelenka b855907f54 Merge branch 'PHP-7.3' into PHP-7.4 2020-11-27 16:33:47 +00:00
Jakub Zelenka 685708160e Fix test for bug62890 to not depend on system cert store 2020-11-27 16:32:43 +00:00
Nikita Popov 08919578ca Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix build for non-x86
2020-11-27 17:04:50 +01:00
Nikita Popov 3430d856ac Fix build for non-x86 2020-11-27 17:04:17 +01:00
Nikita Popov e5aae35855 Handle exceptions during SCCP function evaluation
Easier to handle them than to ensure they can't happen in the
first place.
2020-11-27 17:00:12 +01:00
Nikita Popov 4f3cf983dc Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix AVX detection
2020-11-27 14:49:45 +01:00
Nikita Popov 4e30ab33d8 Fix AVX detection
Our CPU detection code currently only checks whether hardware
support for AVX exists. However, we also need to check for operating
system support for XSAVE, as well as whether XCR0 has the SSE and
AVX bits set.

If this is not the case, unset the AVX and AVX2 bits in the cpuinfo
structure.

Hopefully this resolves our issues with CPU support detection.

Closes GH-6460.
2020-11-27 14:49:31 +01:00
Nikita Popov 8b281e5b6b Only use travis for cron jobs
Our primary CI has been Azure Pipelines for a while now already.
Travis was primarily retained as a) a fast feedback builder and
b) to test architectures not available elsewhere.

Due to Travis CI open source policy changes, Travis is no longer
useful as a fast feedback builder. As such, only use it for cron
job builds.
2020-11-27 14:15:34 +01:00
Nikita Popov 8e25cf26af Make sure zend_cpu_supports_pclmul() is always defined
If __builtin_cpu_supports() is available, but doesn't have support
for pclmul, the function would end up not being defined at all.
2020-11-27 12:22:03 +01:00
Christoph M. Becker bcefbf8602 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix mysqli_get_client_stats test
2020-11-27 11:51:30 +01:00
Christoph M. Becker 07c5efbd76 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix mysqli_get_client_stats test
2020-11-27 11:50:59 +01:00
Daniel Black 4a10037cb4 Fix mysqli_get_client_stats test
MySQL removed RENAME DATABASE in 18300001c1dbbfddf9a0adcbaeea68956102bdd0
(Sept 2007, 5.1.23). As this briefest existance is very insignificant lets remove it.

It also breaks when testing against MariaDB.

As the alternate path in this test covers all supported MySQL and MariaDB
versions and a signifant portion of unsupported versions lets keep it simple.

Closes GH-6459.
2020-11-27 11:43:34 +01:00
Nikita Popov 2772f7c3ad Avoid direct calls to zend_cpu_supports()
While the use of zend_cpu_supports_*() is only strictly necessary
inside ifunc resolvers, where the cpu state has not been initialized
yet, we should prefer the compiler builtins in all cases.
2020-11-27 11:18:10 +01:00
Nikita Popov f35b194029 Assert that cpuinfo is initialized before use
And fix some incorrect indentation.
2020-11-27 11:14:07 +01:00
Nikita Popov 4a7ebb6d83 Move avx check into a macro 2020-11-27 11:06:05 +01:00
Nikita Popov f4e1768e21 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fixed bug #80368
2020-11-27 10:58:34 +01:00
Nikita Popov 0f579fd7c8 Fixed bug #80368
We assume that usually LibreSSL supports everything OpenSSL 1.1 does.
In this instance, this is not the case.
2020-11-27 10:57:19 +01:00
Nikita Popov 48ff654fb9 Fixed bug #80433
Use ZEND_STRTOL to allow leading zeros in opcache.jit option.
2020-11-27 10:51:57 +01:00
Nikita Popov c61390cfb4 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fixed bug #80425
2020-11-27 10:03:21 +01:00
Nikita Popov 5240f8391f Fixed bug #80425
Rename the methods in MessageFormatAdapter to make sure they don't
clash with anything defined by icu itself, which may be a problem
if icu is linked statically.
2020-11-27 10:02:00 +01:00
Christopher Jones a9c44d1b5a Update PECL package release date 2020-11-27 10:17:37 +11:00
Christoph M. Becker 49e1ed1941 Fix bug number 2020-11-26 23:34:35 +01:00
Dmitry Stogov 3697648be5 Eliminate deafd stores 2020-11-26 21:05:07 +03:00
Nikita Popov 6132389d1c Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix bug #80402: Don't strip -lpthread
2020-11-26 11:56:00 +01:00
Nikita Popov ea372e7463 Fix bug #80402: Don't strip -lpthread
The current behavior has been introduced 20 years ago in
f9e375f493 as part of a larger change.
It's not clear to me why special treatement of -lpthread is necessary
here.
2020-11-26 11:54:20 +01:00
Sara Golemon c65f0c7aca Remove -dev from ZEND_VERSION 2020-11-26 02:19:51 +00:00
Nikita Popov 306555e11d Add UPGRADING note for PDO::inTransaction()
[ci skip]
2020-11-25 17:28:23 +01:00
Nikita Popov 217f247bb5 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fixed bug #80411
2020-11-25 17:24:49 +01:00
Nikita Popov 2fb12be84c Fixed bug #80411
References to null-serializations are stored as null, and as such
are part of the reference count.

Reminds me that we really need to deprecate the mess that is
Serializable.
2020-11-25 17:23:42 +01:00
Nikita Popov f5b93626a6 Fix unserialization ref source management, again
Handle one case the previous patch did not account for: If
unserialization of data fails, we should still register a ref
source.

Also add an extra test for a reference between two typed properties,
as this used to be handled incorrectly earlier.
2020-11-25 17:04:07 +01:00
Nikita Popov 518eb0ca2b Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fixed error reporting in mysqli_stmt::__construct
2020-11-25 16:29:00 +01:00
Dharman 233f507fe6 Fixed error reporting in mysqli_stmt::__construct
For the sake of simplicity, I've synchronized the implementation
with PHP 8, which means null values are also accepted.

Closes GH-6454.
2020-11-25 16:27:41 +01:00
Nikita Popov e3e6e1e59b Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Reindent more mysqli tests
2020-11-25 16:08:28 +01:00
Nikita Popov 367f8452c4 Fix phpt reindentation in tidy script
This was missing adjacent SKIPIF/FILE/CLEAN sections.
2020-11-25 16:07:56 +01:00
Nikita Popov e3e67b721f Reindent more mysqli tests
Due to a bug in the tidy script, most tests did not actually get
reindented...
2020-11-25 16:07:16 +01:00
Nikita Popov 308050e94b Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Reindent ext/mysqli tests
2020-11-25 15:58:21 +01:00
Nikita Popov 97d192b444 Reindent ext/mysqli tests
Reindent ext/mysqli tests on PHP-7.4, so they match with the
indentation on PHP-8.0. Otherwise merging test changes across
branches is very unpleasant.
2020-11-25 15:57:11 +01:00
Nikita Popov 373fd61a51 Allow running tidy.php on specific directory 2020-11-25 15:54:26 +01:00
Nikita Popov 7a3f25e370 Fix ref source management during unserialization
Only register the slot for adding ref sources later if we didn't
immediately register one. Also avoids leaking a ref source if
it is added early and the assignment fails.

Fixes oss-fuzz #27628.
2020-11-25 12:25:07 +01:00
Calvin Buckley e074e029ee sockets: Fix variable/macro name collision on AIX
The name "rem_size" is used by a macro in a system header on AIX,
specifically `sys/xmem.h`. Without changing the name, you get the
name mangled like so:

```
In file included from /usr/include/sys/uio.h:92:0,
                 from /QOpenSys/pkgs/lib/gcc/powerpc-ibm-aix6.1.0.0/6.3.0/include-fixed-7.1/sys/socket.h:83,
                 from /usr/include/sys/syslog.h:151,
                 from /usr/include/syslog.h:29,
                 from /home/calvin/rpmbuild/BUILD/php-8.0.0RC5/main/php_syslog.h:27,
                 from /home/calvin/rpmbuild/BUILD/php-8.0.0RC5/main/php.h:318,
                 from /home/calvin/rpmbuild/BUILD/php-8.0.0RC5/ext/sockets/sendrecvmsg.c:17:
/home/calvin/rpmbuild/BUILD/php-8.0.0RC5/ext/sockets/sendrecvmsg.c: In function 'zif_socket_cmsg_space':
/home/calvin/rpmbuild/BUILD/php-8.0.0RC5/ext/sockets/sendrecvmsg.c:298:10: error: expected '=', ',', ';', 'asm' or '__attribute__' before '.' token
   size_t rem_size = ZEND_LONG_MAX - entry->size;
          ^
/home/calvin/rpmbuild/BUILD/php-8.0.0RC5/ext/sockets/sendrecvmsg.c:298:10: error: expected expression before '.' token
/home/calvin/rpmbuild/BUILD/php-8.0.0RC5/ext/sockets/sendrecvmsg.c:299:18: error: 'u2' undeclared (first use in this function)
   size_t n_max = rem_size / entry->var_el_size;
                  ^
/home/calvin/rpmbuild/BUILD/php-8.0.0RC5/ext/sockets/sendrecvmsg.c:299:18: note: each undeclared identifier is reported only once for each function it appears in
```

...because of the declaration in `sys/xmem.h`:

```
```

This just renames the variable so that it won't trip on this
definition. Tested to fix the build on IBM i PASE.

Closes GH-6453.
2020-11-25 11:54:40 +01:00
Nikita Popov 4633e70ab1 Fixed bug #80377
Make sure the $PHP_THREAD_SAFETY variable is always available
when configuring extensions. It was previously available for
phpized extensions, but for in-tree builds it was being set
too late.

Then, use $PHP_THREAD_SAFETY instead of $enable_zts to check for
ZTS in bundled extensions, which makes sure these checks also
work for phpize builds.
2020-11-25 11:47:05 +01:00
Christopher Jones 37f96d990c Fix test diff 2020-11-25 16:42:12 +11:00
Dmitry Stogov cb399d0410 Use diferent temporary register (%r0 may keep a method address) 2020-11-25 03:49:42 +03:00
Dmitry Stogov 7fc2a3e15e Revert "Fixed bug #80377"
This reverts commit fc26ad9b12.
2020-11-25 01:10:26 +03:00
Florian Engelhardt cdd5ec7a3c [ci skip] Fix misspelled method names
Closes GH-6452.
2020-11-24 18:18:40 +01:00
Nikita Popov 70f59b3416 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix usage of casted string in ReflectionParameter ctor
2020-11-24 16:42:52 +01:00
Nikita Popov 706241f82d Fix usage of casted string in ReflectionParameter ctor
Fixes oss-fuzz #27755.
2020-11-24 16:42:16 +01:00
Nikita Popov fc26ad9b12 Fixed bug #80377
Use $PHP_THREAD_SAFETY instead of $enable_zts to check for ZTS.
This variable is also available for phpize builds, while enable_zts
is only present for in-tree builds.
2020-11-24 15:52:41 +01:00
Nikita Popov ae6e56fb98 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fixed bug #80393
2020-11-24 15:27:43 +01:00
Nikita Popov d016434ad3 Fixed bug #80393
Handle macos versions that don't start with 10.* in libtool.

Patch by kir dot morozov at gmail dot com.
2020-11-24 15:26:40 +01:00
Christoph M. Becker bf244757ee Allow PHP_CURL_APIs to be imported by DLLs
Closes GH-6438.
2020-11-24 14:12:39 +01:00
Christoph M. Becker e589609b4c Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #77961: finfo_open crafted magic parsing SIGABRT
2020-11-24 14:06:53 +01:00
Christoph M. Becker 39f95f5614 Fix #77961: finfo_open crafted magic parsing SIGABRT
libmagic may abort the running process, which is not desirable for PHP;
we raise a fatal error instead.

Closes GH-6437.
2020-11-24 14:01:15 +01:00
Christoph M. Becker 337031abbd [ci skip] Update generate_patch.sh
This has apparently been forgotten when updating to libmagic 5.39.
2020-11-24 13:38:31 +01:00
Christoph M. Becker deb8b8190e Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #80366: Return Value of zend_fstat() not Checked
2020-11-24 13:10:35 +01:00
Christoph M. Becker 5f9c82d514 Fix #80366: Return Value of zend_fstat() not Checked
In the somewhat unlikely case that `zend_fstat()` fails, we must not
proceed executing the function, but return `false` instead.

Patch based on the patch contributed by sagpant at microsoft dot com.

Closes GH-6432.
2020-11-24 13:09:16 +01:00
Nikita Popov b91bf22333 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fixed bug #80362: Running dtrace scripts can cause php to crash
2020-11-24 13:02:08 +01:00
Nikita Popov fa713ec17b Fixed bug #80362: Running dtrace scripts can cause php to crash
Patch by al at coralnet dot name.
2020-11-24 13:01:51 +01:00
Nikita Popov 03f8bccaf5 Fixed bug #80404
For a division like [1..1]/[2..2] produce [0..1] as a result, which
would be the integer envelope of the floating-point result.

The implementation is pretty ugly (we're now taking min/max across
eight values...) but I couldn't come up with a more elegant way
to handle this that doesn't make things a lot more complex (the
division sign handling is the annoying issue here).
2020-11-24 11:35:44 +01:00
Nikita Popov 912cb8b8b5 Fixed bug #80391
Iterable was not considered a subtype of array|object, and thus
also not a subtype of mixed.
2020-11-24 10:09:28 +01:00
Benjamin Morel 4bbb98c24f Fix PDOStatement::fetchObject() stub
Closes GH-6449.
2020-11-24 09:49:30 +01:00
Christopher Jones 68d5878097 Sync README with package.xml 2020-11-24 10:45:48 +11:00
Christoph M. Becker 807775b641 Fix COMPersistHelper::__construct() stub
`$variant` is optional.
2020-11-24 00:23:29 +01:00
Remi Collet ce18899b44 zip extension is 1.19.2 2020-11-23 15:59:15 +01:00
Dmitry Stogov 337d2af6ca zend_jit_trace_stack_frame.stack can't be NULL 2020-11-23 16:19:22 +03:00
Dmitry Stogov 586ccfdfd5 Fixed use-after-free in PHPUnit tests 2020-11-23 14:42:38 +03:00
Dmitry Stogov 4cf3da7383 Keep value of register before possible side exit 2020-11-23 12:07:05 +03:00
Christoph M. Becker 9b1c02c2df Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #77594: ob_tidyhandler is never reset
2020-11-22 14:04:59 +01:00
Christoph M. Becker 221345a013 Fix #77594: ob_tidyhandler is never reset
We reset to original INI value on request shutdown.

Closes GH-6425.
2020-11-22 14:02:29 +01:00
Máté Kocsis 40ebfd6730 Remove some incorrect mixed parameter types 2020-11-21 23:17:35 +01:00
Nikita Popov 0dac69c059 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix typos in php.ini files
2020-11-20 16:50:52 +01:00
Benjamin Morel ed949a1973 Fix typos in php.ini files
Closes GH-6441.

[ci skip]
2020-11-20 16:50:29 +01:00
jrfnl 860f46e2f5 UPGRADING: (real) cast has been removed
.. but the removal wasn't mentioned in the `UPGRADING` docs yet.

Ref:
* https://github.com/php/php-src/pull/5220
* https://github.com/php/php-src/commit/c9db32271a8083721582c5ec1dd09c4d4f562c74

Closes GH-6440.

[ci-skip]
2020-11-20 16:48:32 +01:00
Nikita Popov fa67864c13 Use MIN/MAX when dumping RANGE[]
It's very common that one of the bounds is LONG_MIN or LONG_MAX.
Dump them as MIN/MAX instead of the int representation in that
case, as it makes the dump less noisy.
2020-11-20 16:47:46 +01:00
Dmitry Stogov c0d1dbcb43 Fixed incorrect TRACE_FRAME_MASK_NESTED flag setting 2020-11-20 18:22:21 +03:00
Dmitry Stogov c8df28d276 Fixed 32-bit JIT 2020-11-20 15:12:30 +03:00
Christoph M. Becker c7343510e4 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #72964: White space not unfolded for CC/Bcc headers
2020-11-19 19:26:56 +01:00
Christoph M. Becker 881e43a03c Fix #72964: White space not unfolded for CC/Bcc headers
`\r\n` does only terminate a header, if not followed by `\t` or ` `.
We have to cater to that when determining the end position of the
respective headers.

Closes GH-6420.
2020-11-19 19:25:03 +01:00
Christoph M. Becker 2e27bb8682 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #80345: PHPIZE configuration has outdated PHP_RELEASE_VERSION
2020-11-19 16:26:45 +01:00
Christoph M. Becker c2b1182879 Fix #80345: PHPIZE configuration has outdated PHP_RELEASE_VERSION
We must not redefine the version "constants" for phpize builds, because
these have already generated in phpize.js, from where we pass these
variables forward to configure.js.

We also add `PHP_EXTRA_VERSION` and `PHP_VERSION_STRING` to the files
for completeness.

Closes GH-6419.
2020-11-19 16:23:20 +01:00
Sara Golemon 3c44e9c080 8.0 branch should be prepping for 8.0.1 2020-11-19 14:37:44 +00:00
Sara Golemon 85c6e9b469 Prepare NEWS file for GA 2020-11-19 14:33:56 +00:00
Dmitry Stogov 069f9cbaa5 Added missing deoptimization code for trampoline handling 2020-11-19 12:32:36 +03:00
Nikita Popov 46b9e0c874 Export zend_is_callable_at_frame
Export the zend_is_callable_impl() function as
zend_is_callable_at_frame() for use by extension. As twose pointed
out, an extension may want to retrieve fcc for a private method.
2020-11-19 10:29:32 +01:00
Nikita Popov 06c4a501fd Fix curl_multi_getcontent() parameter name
While the function name starts with curl_multi_*, the function
actually accepts a CurlHandle. As such, it should also use just
$handle as the parameter name.

Closes GH-6435.
2020-11-19 10:17:17 +01:00
Nikita Popov bbc0dd402a Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Short-circuit get_gc for currently running generator
2020-11-18 12:46:12 +01:00
Nikita Popov 99a8ec6e24 Short-circuit get_gc for currently running generator 2020-11-18 12:45:29 +01:00
Dmitry Stogov feed041fc8 Fixed register clobbering 2020-11-18 10:22:25 +03:00
Dmitry Stogov 9841e8e411 Fixed trampoline handling 2020-11-17 23:56:05 +03:00
Gabriel Caruso fd75589b1f Update NEWS for 8.0.0 2020-11-17 16:34:55 +00:00
Gabriel Caruso 0a9b688bee Update NEWS for PHP 8.0.0RC5 2020-11-17 16:23:11 +00:00
Dmitry Stogov e364af91b5 Fixed allocated register clobbering 2020-11-17 18:31:14 +03:00
Dmitry Stogov 1523733bc4 Fixed false pasitive ASAN NULL pointer dereference warning 2020-11-17 16:23:30 +03:00
Nikita Popov f4a600be04 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #80312: change default engine from MyISAM to InnoDB in tests
2020-11-17 13:16:17 +01:00
Darek Slusarczyk 79a606bd95 Fix #80312: change default engine from MyISAM to InnoDB in tests
Change mysqli and pdo_mysql tests configuration to use by default
InnoDB instead of MyISAM.

Closes GH-6405.
2020-11-17 13:15:15 +01:00
Benjamin Eberlei 1727d96d0e Fixed bug #80370: Segmentation fault reflecting attributes of dynamic property
Closes GH-6428.
2020-11-17 10:54:27 +01:00
Sammy Kaye Powers 58d41b8c4f Provide unused retvals to observers
Make sure that the return value is available to observers, even if
it is not used by the caller.

Closes GH-6422.
2020-11-17 10:28:47 +01:00
Nikita Popov 9cfb5261e4 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix incorrectly optimized out live range
2020-11-17 10:20:23 +01:00
Nikita Popov df7417d127 Fix incorrectly optimized out live range
For x ? y : z style structures, the live range starts at z, but
may also hold the value of y. Make sure that the refcounting check
takes this into account, by checking the type of a potential phi
user.
2020-11-17 10:19:57 +01:00
Sammy Kaye Powers 0425a6697a Fire open observer end handlers after a zend_bailout
Closes GH-6377
2020-11-16 15:12:57 -08:00
Dmitry Stogov 3fb1b0862c Fixed MAY_BE_INDIRECT inference 2020-11-16 18:17:05 +03:00
Christoph M. Becker c351768e4f Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #74558: Can't rebind closure returned by Closure::fromCallable()
2020-11-16 14:34:28 +01:00
Christoph M. Becker 78773890f6 Fix #74558: Can't rebind closure returned by Closure::fromCallable()
Failure to rebind such closures is not necessarily related to them
being created by `ReflectionFunctionAbstract::getClosure()`, so we fix
the error message.

Closes GH-6424.
2020-11-16 14:31:06 +01:00
Dmitry Stogov e3c63de05b Fixed alias handling 2020-11-16 16:11:25 +03:00
Dmitry Stogov eb6d496a93 Fixed reference-counting 2020-11-16 14:51:55 +03:00
Dmitry Stogov edf5c1901f Fixed incorrect FETCH_THIS optimization 2020-11-16 14:51:39 +03:00
Dmitry Stogov bd321df479 Fixed inconsistent VM stack state 2020-11-16 13:19:44 +03:00
Dmitry Stogov 64dc79f906 Trampoline cleanup 2020-11-16 12:05:45 +03:00
Pavel Djundik 7bbed18086 [ci skip] Add note that imagedestroy() no longer has an effect
Closes GH-6427.
2020-11-14 15:18:20 +01:00
Nikita Popov f5be0e5110 Inline pair production in json parser
Having this as a separate production has a noticeable performance
impact, and doesn't really make things clearer either.
2020-11-13 14:56:29 +01:00
Christoph M. Becker a08a2b48b4 Strip trailing line breaks and periods from Windows error messages
PHP error messages should not contain line breaks, so we remove these
from the Windows specific error messages.  We also remove trailing
periods for the same reason.

Closes GH-6423.
2020-11-12 16:42:28 +01:00
Nikita Popov 34dd032e4e Don't assume libmysqlclient library name
By simply dropping the additional checks, in line with the general
guideline of trusting the output of config scripts (this should
be migrated to pkg-config though).

Also drop the code for manually adding -z if mysql_config does not
-- that's not our problem.
2020-11-12 15:11:56 +01:00
Nikita Popov 2875d0f920 Fix memory leak when user filter onCreate returns false 2020-11-12 12:18:33 +01:00
Nikita Popov 3d2819e491 Fix memory leak with bcsqrt on number 0<X<1 2020-11-12 11:37:54 +01:00
Nikita Popov d033d5c07a Fix reflection getDefaultValue() with user arg info
The default value is part of the op_array in that case, but we have
no way to access it. Fail gracefully.
2020-11-12 11:02:04 +01:00
Dmitry Stogov 9acebe14df Fixed incorrectly eliminated type store 2020-11-11 20:13:58 +03:00
Dmitry Stogov 03e7854381 Remove assertion 2020-11-11 18:34:16 +03:00
Nikita Popov d776c31a34 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Handle errors during next_result()
2020-11-11 16:03:10 +01:00
Nikita Popov eda7492604 Handle errors during next_result() 2020-11-11 16:02:52 +01:00
Dmitry Stogov 2d2d42b268 Fixed incorrect invariant guard motion 2020-11-11 17:34:46 +03:00
Dmitry Stogov de359c00b4 Stop on fake frame 2020-11-11 14:54:54 +03:00
Dmitry Stogov a0de82ad75 Fixed reference-counting propagation 2020-11-11 14:54:00 +03:00
Nikita Popov 800cf5a20f Fix double free when socket_accept fails 2020-11-11 12:48:25 +01:00
Nikita Popov b4a2a9662b Retain reference to share handle from curl handle
Not keeping a reference will not result in use after free, because
curl protects against it, but it will result in a memory leak,
because curl_share_cleanup() will fail. We should make sure that
the share handle object stays alive as long as the curl handles
use it.
2020-11-11 11:56:03 +01:00
Dmitry Stogov 11c4821ba9 [Observer+JIT] Save opline before calling begin/end handlers 2020-11-11 13:50:53 +03:00
Dmitry Stogov 855d8fa68f [Observer] Save opline before calling begin/end handlers 2020-11-11 13:06:55 +03:00
Nikita Popov 1aff51d421 Fix community job
Made a mistake while merging...
2020-11-11 09:28:20 +01:00
Derick Rethans 9b627c6c27 Merge branch 'PHP-7.4' into PHP-8.0 2020-11-10 17:58:38 +00:00
Derick Rethans c1f8dd4a33 PHP-7.4 is now for 7.4.14 2020-11-10 17:58:21 +00:00
Gabriel Caruso 822e1660c7 Update NEWS for 8.0.0 2020-11-10 11:02:35 +00:00
Gabriel Caruso 343b53ad1c Update NEWS for PHP 8.0.0RC4 2020-11-10 10:52:13 +00:00
Nikita Popov 9f1dba8b71 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Add integration test for symfony preloading
2020-11-10 11:45:59 +01:00
Nikita Popov f419e049ff Add integration test for symfony preloading
To help catch regressions like the one that occurred in PHP 7.4.12.

Closes GH-6414.
2020-11-10 11:45:22 +01:00
Christoph M. Becker 25e3d7bbe0 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  7.3.26 is next
2020-11-10 11:11:06 +01:00
Christoph M. Becker bd2b4a5b2e Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  7.3.26 is next
2020-11-10 11:09:40 +01:00
Christoph M. Becker b5ce6df0da 7.3.26 is next 2020-11-10 11:08:16 +01:00
Nikita Popov 523dd9a2d9 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix phi use chain management when renaming variable
2020-11-09 17:08:38 +01:00
Nikita Popov d971b67027 Fix phi use chain management when renaming variable
If there is a previous use of the new variable in the phi, we need
to NULL out the use chain of the new source we're adding.

Test case is reduced from an assertion failure in the Symfony Demo.
2020-11-09 17:08:16 +01:00
Nikita Popov 975735c027 Use true/false instead of TRUE/FALSE in intl
And drop the U_DEFINE_TRUE_AND_FALSE flag.
2020-11-09 14:44:11 +01:00
Nikita Popov 4cd393453a Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fixed bug #80310: Support for icu4c 68.1.
2020-11-09 14:35:40 +01:00
Nikita Popov 96b725122d Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fixed bug #80310: Support for icu4c 68.1.
2020-11-09 14:34:24 +01:00
Alexander M. Turek 8eaaabdd58 Fixed bug #80310: Support for icu4c 68.1.
On stable versions, bring back the TRUE/FALSE defines by defining
_U_DEFINE_TRUE_AND_FALSE.

Closes GH-6397.
2020-11-09 14:31:29 +01:00
Dharman 114613dc5f Remove embedded property from mysqli_driver
All other leftovers of this feature have been dropped in PHP 8,
so we should remove the property as well.

Closes GH-6407.
2020-11-09 11:00:16 +01:00
Nikita Popov 6fb3d92525 Fixed bug #80334
If assert() was called with named args, add description as named
arg as well.
2020-11-09 10:19:32 +01:00
Dmitry Stogov 4bbe55b250 Fixed missaligned access 2020-11-09 11:50:26 +03:00
Nikita Popov 5df461bc91 Skip preload test under asan
Just like the other preload tests with startup failures, this may
cause leaks.
2020-11-09 09:46:48 +01:00
Nikita Popov b1019f46ed Rename PhpToken::getAll() to PhpToken::tokenize()
See https://externals.io/message/112189.
Fixes bug #80328.
2020-11-09 09:40:31 +01:00
Derick Rethans fe2cbcac70 Merge branch 'PHP-7.4' into PHP-8.0 2020-11-07 18:49:00 +00:00
Derick Rethans 25643b56a2 Update version in 7.4 branch 2020-11-07 18:48:13 +00:00
Christoph M. Becker 49ca191667 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Split tests for compatibility with ICU 68.1
2020-11-06 17:44:51 +01:00
Christoph M. Becker 77b6e95d92 Split tests for compatibility with ICU 68.1 2020-11-06 17:42:39 +01:00
Christoph M. Becker d65a520b1d Raise E_WARNING on PHP related errors
If Zip operations fails due to PHP error conditions before libzip even
has been called, there is no meaningful indication what failed; the
functions just return false, and the Zip status indicated that no error
did occur.  Therefore we raise `E_WARNING` in these cases.

Closes GH-6356.
2020-11-06 11:00:43 +01:00
Dmitry Stogov 98e4f9466d Move stack overflow checks out of the loops 2020-11-06 12:09:56 +03:00
Remi Collet e2509cf98a report about ZSTD compression availability 2020-11-06 09:58:08 +01:00
Remi Collet 8d7ca472e5 only display libzip both headers/library versions if they differ 2020-11-06 09:58:05 +01:00
Nikita Popov 2d894916c5 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Backport preloading trait fixup fixes
2020-11-05 16:37:45 +01:00
Nikita Popov 6808968c89 Backport preloading trait fixup fixes
This cherry-picks 33969c2252 and
2effbfd871 from PHP-8.0.

The issues these commits fix could also manifest in PHP 7.4, and
a commenter on bug #80307 reports this this might indeed be
happening.
2020-11-05 16:35:08 +01:00
Dmitry Stogov ff91800602 Fixed incorrect invariant guard motion 2020-11-05 18:32:00 +03:00
Nikita Popov 2effbfd871 Fixup trait methods even if no traits are used
Trait methods might be non-trivially inherited, in which case we
may have to perform fixup in classes that do not directly use any
traits.
2020-11-05 13:15:32 +01:00
Nikita Popov 33969c2252 Fix multiple trait fixup
If a trait method is inherited, preloading trait fixup might be
performed on it multiple times. Usually this is fine, because
the opcodes pointer will have already been updated, and will thus
not be found in the xlat table.

However, it can happen that the new opcodes pointer is the same
as one of the old opcodes pointers, if the pointer has been reused
by the allocator. In this case we will look up the wrong op array
and overwrite the trait method with an unrelated trait method.

We fix this by indexing the xlat table not by the opcodes pointer,
but by the refcount pointer. The refcount pointer is not changed
during optimization, and accurately represents which op arrays
should use the same opcodes.

Fixes bug #80307. The test case does not reproduce the bug, because
this depends on a lot of "luck" with the allocator. The test case
merely illustrates a case where orig_op_array would have been NULL
in the original code.
2020-11-05 12:04:39 +01:00
Nikita Popov 7c7c6b0d73 End output handlers in preload shutdown
Same as in php_request_shutdown(), we need to end any active
output handlers, as these may no longer be safe to execute
lateron.
2020-11-04 16:05:24 +01:00
Nikita Popov 73321bc300 getlastmod() can return false
At least this can happen during preloading.
2020-11-04 15:53:08 +01:00
Nikita Popov 670fe594b9 Fix static variable in methods inheritance during preloading
This is now "bug compatible" with the normal behavior, and more
imporantly, does not crash :)
2020-11-04 15:42:52 +01:00
Christoph M. Becker b8f2531ff0 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #80266: parse_url silently drops port number 0
2020-11-04 14:57:17 +01:00
Christoph M. Becker 00e41a10b8 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #80266: parse_url silently drops port number 0
2020-11-04 14:54:32 +01:00
Christoph M. Becker 2cab085bb3 Fix #80266: parse_url silently drops port number 0
As of commit 81b2f3e[1], `parse_url()` accepts URLs with a zero port,
but does not report that port, what is wrong in hindsight.

Since the port number is stored as `unsigned short` there is no way to
distinguish between port zero and no port.  For BC reasons, we thus
introduce `parse_url_ex2()` which accepts an output parameter that
allows that distinction, and use the new function to fix the behavior.

The introduction of `parse_url_ex2()` has been suggested by Nikita.

[1] <http://git.php.net/?p=php-src.git;a=commit;h=81b2f3e5d9fcdffd87a4fcd12bd8c708a97091e1>

Closes GH-6399.
2020-11-04 14:53:19 +01:00
Nikita Popov 7794925ba4 Assert that references are not persisted
There should not be any need to persist references, and it's unlikely
that persisting a reference will behave correctly at runtime, because
we don't have a concept of an immutable reference.
2020-11-04 14:51:44 +01:00
Nikita Popov 57b0e5a045 Don't xfail method_static_var.phpt
Let's test the current behavior here. It might not be right, but
it's long-standing behavior.

Nearly missed an assertion failure here because the test was
XFAILed...
2020-11-04 12:30:41 +01:00
Nikita Popov 9ed2f4898b Don't disable opcache for generic tests
Even if the original issue only reproduces without opcache, we
should still allow running them with and without opcache.
2020-11-04 11:12:12 +01:00
Nikita Popov c6563dddac Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix dynamic function definition in preload script
2020-11-04 10:55:59 +01:00
Nikita Popov e0d6c3f7ba Fix dynamic function definition in preload script
We should use normal function renaming if the function is declared
during preloading itself, rather than afterwards.

This fixes a regression introduced by
68f80be9d1.
2020-11-04 10:54:08 +01:00
Nikita Popov 54668a449e Don't disable early binding during preloading script
We should only disable early binding during the opcache_compile_file()
calls, not inside the preloading script or anything it includes.
The right condition to check for is whether we compile the file
without execution, as declaring classes is "execution".
2020-11-03 16:45:13 +01:00
Nikita Popov b009573f4e Report parse errors during preloading 2020-11-03 16:24:54 +01:00
Nikita Popov 9fd8e00f1a Fix use of type copy ctor when importing trait properties
We shouldn't call the copy constructor inside the original type,
duh.
2020-11-03 15:29:18 +01:00
Nikita Popov 7e55317558 Allow unlinked classes when performing in_compilation variance check
As preloading runs in in_compilation mode, we also need to allow
use of unlinked classes in lookup_class().
2020-11-03 14:49:10 +01:00
Nikita Popov ee934f8245 Fix variance checks on resolved union types
This is a bit annoying: When preloading is used, types might be
resolved during inheritance checks, so we need to deal with CE
types rather than just NAME types everywhere.
2020-11-03 14:19:15 +01:00
Nikita Popov 51b5f7d67d Don't ignore internal classes during preloading
When preloading, it's fine to make use of internal class information,
as we do not support Windows. It is also necessary to allow proper
variance checks against internal classes.
2020-11-03 11:50:14 +01:00
Nikita Popov 14c42c6961 Fix persisting property info table with internal parent
If the property info comes from an internal parent, we won't have
an xlat entry for it. Leave it alone in that case.
2020-11-03 11:30:44 +01:00
Nikita Popov 6f2431860b Preserve trait method alias name during preloading 2020-11-03 10:55:59 +01:00
Nikita Popov 53c417d81c Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix another implicit function declaration in configure
2020-11-03 10:39:26 +01:00
Nikita Popov 4e68c53a21 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix another implicit function declaration in configure
2020-11-03 10:39:13 +01:00
Nikita Popov 00ba784a2c Fix another implicit function declaration in configure
As mentioned on bug #80171. This one is in libtool.m4, might get
lost on libtool updates.
2020-11-03 10:38:16 +01:00
Chris Brown 4d16d3cc38 Fix typo in UPGRADING
Closes GH-6395.
2020-11-03 09:35:02 +01:00
Bogdan Ungureanu 6d6fadeb0d Improved error message for typed class properties with null as default value
Closes GH-6396.
2020-11-03 09:28:53 +01:00
Chris Brown 94938e4ee7 [ci skip] Fix small typo
`as` -> `was`

Closes GH-6394.
2020-11-02 18:11:13 +01:00
Nikita Popov 0571f09424 Rename opcache.jit_max_loops_unroll to opcache.jit_max_loop_unrolls 2020-11-02 12:25:21 +01:00
Christoph M. Becker 6fc2cab254 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #70461: disable md5 code when it is not supported in net-snmp
2020-11-02 11:41:37 +01:00
Christoph M. Becker 0123f75b5d Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #70461: disable md5 code when it is not supported in net-snmp
2020-11-02 11:39:42 +01:00
Christoph M. Becker 9690ded288 Fix #70461: disable md5 code when it is not supported in net-snmp
Patch contributed by Alexander Bergmann.

Closes GH-6389.
2020-11-02 11:36:26 +01:00
Dharman cf38a6f51f Fix tests for MariaDB
Closes GH-6390.
2020-11-02 09:58:46 +01:00
Alex Dowad 526c624dc4 Fix test added in d44235acae 2020-10-30 22:11:27 +02:00
Alex Dowad d44235acae Convert numeric string array keys to integers correctly in JITted code
While fixing bugs in mbstring, one of my new test cases failed with a strange
error message stating: 'Warning: Undefined array key 1...', when clearly the
array key had been set properly.

GDB'd that sucker and found that JIT'd PHP code was calling directly into
`zend_hash_add_new` (which was not converting the numeric string key to an
integer properly). But where was that code coming from? I examined the disasm,
looked up symbols to figure out where call instructions were going, then grepped
the codebase for those function names. It soon became clear that the disasm I
was looking at was compiled from `zend_jit_fetch_dim_w_helper`.
2020-10-30 22:07:08 +02:00
Nikita Popov 904c1b6589 FIxed bug #80299
The must_wrap was leaking across iterations.
2020-10-30 17:23:18 +01:00
Nikita Popov 5958137dc5 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix SSA integrity violation for type inference in dead code
2020-10-30 15:52:46 +01:00
Nikita Popov 83738281eb Fix SSA integrity violation for type inference in dead code
The foreach body can never be executed and thus may contain empty
types. We should still uphold our SSA integrity invariants in that
case.
2020-10-30 15:52:10 +01:00
Christoph M. Becker 72d9d9b88f Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix bug79177.phpt wrt. JIT
2020-10-30 15:49:48 +01:00
Christoph M. Becker 0427dcb913 Fix bug79177.phpt wrt. JIT
JIT ignores that the `zend_write` callback is overwritten, so we define
our own callback and caller.

We also fix the "inconsistent DLL binding" warnings on Windows, by
introducing `PHP_ZEND_TEST_API`.

Closes GH-6391.
2020-10-30 15:47:18 +01:00
Nikita Popov 085e16c301 Fix signed integer overflow
Fixes oss-fuzz #26763.
2020-10-30 12:38:27 +01:00
Nikita Popov 3bd3651bcc Fixed bug #80290
Dropping the dtor arg args[3] rather than using STR_COPY: Since
PHP 8, we no longer support separation in call_user_function(),
so we also don't need to worry about things like arguments being
replaced with references.
2020-10-30 11:13:35 +01:00
Dmitry Stogov b133183e35 Create TSSA loops for recursive call/return traces and move invariant type guards out of loops. 2020-10-30 13:08:31 +03:00
Nikita Popov 8957260094 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix bug #72413: Segfault with get_result and PS cursors
2020-10-29 16:41:09 +01:00
Dharman b5481defe6 Fix bug #72413: Segfault with get_result and PS cursors
We cannot simply switch to use_result here, because the fetch_row
methods in get_result mode and in use_result/store_result mode
are different: In one case it accepts a statement, in the other
a return value zval. Thus, doing a switch to use_result results
in a segfault when trying to fetch a row.

Actually supporting get_result with cursors would require adding
cursor support in mysqlnd_result, not just mysqlnd_ps. That would
be a significant amount of effort and, given the age of the issue,
does not appear to be particularly likely to happen soon.

As such, we simply generate an error when using get_result()
with cursors, which is much better than causing a segfault.
Instead, parameter binding needs to be used.
2020-10-29 16:34:08 +01:00
Nikita Popov 1a7bcd9892 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Handle errors during PDO row fetch
2020-10-29 14:18:04 +01:00
Nikita Popov 0044a81fbb Handle errors during PDO row fetch
The EOF flag also gets set on error, so we always end up ignoring
errors here.

However, we should only check errors for unbuffered results. For
buffered results, this function is guaranteed not to error, and
querying the errno may return an unrelated error.
2020-10-29 14:17:29 +01:00
Christoph M. Becker 489b5328c0 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix format specifier
2020-10-29 13:10:32 +01:00
Christoph M. Becker dd97cb1665 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix format specifier
2020-10-29 13:09:19 +01:00
Christoph M. Becker ee3227af48 Fix format specifier
In this function, `i` is of type `size_t`.
2020-10-29 13:08:16 +01:00
Nikita Popov ce7c2cc05d Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Report gone away error in one more place
2020-10-29 12:47:22 +01:00
Nikita Popov 78b44ddeba Report gone away error in one more place 2020-10-29 12:46:55 +01:00
Christoph M. Becker 9fdbc2a14a Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  [ci skip] Fix NEWS order
2020-10-29 12:16:20 +01:00
Christoph M. Becker bd6850a282 [ci skip] Fix NEWS order 2020-10-29 12:15:31 +01:00
Christoph M. Becker 9838eff68b Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #44618: Fetching may rely on uninitialized data
2020-10-29 12:03:11 +01:00
Christoph M. Becker 133ac0151b Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #44618: Fetching may rely on uninitialized data
2020-10-29 12:00:57 +01:00
Christoph M. Becker c21e901ba7 Fix #44618: Fetching may rely on uninitialized data
Unless `SQLGetData()` returns `SQL_SUCCESS` or `SQL_SUCCESS_WITH_INFO`,
the `StrLen_or_IndPtr` output argument is not guaranteed to be properly
set.  Thus we handle retrieval failure other than `SQL_ERROR` by
yielding `false` for those column values and raising a warning.

Closes GH-6281.
2020-10-29 11:59:12 +01:00
Nikita Popov d784c65cca Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Retain QUIT_SEND connection state
2020-10-29 10:39:58 +01:00
Nikita Popov 24537a73c0 Retain QUIT_SEND connection state
If the server goes away while reading a packet, don't go back into
the READY state. This will just cause broken pipe errors down the
line.
2020-10-29 10:36:03 +01:00
Nikita Popov 246b8b20b2 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fixed bug #65825
2020-10-28 17:15:42 +01:00
Nikita Popov a66d73db4b Fixed bug #65825
Set error_info when we fail to read a packet, instead of throwing
a warning. Additionally we also need to populate the right
error_info in rowp_read -- we'll later take the error from the
packet, not the connection.

No test case, as this is hard to reliably test. I'm using the
test case from:
https://github.com/php/php-src/pull/2131#issuecomment-538374838
2020-10-28 17:15:27 +01:00
Christoph M. Becker d07f6753a0 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #79177: FFI doesn't handle well PHP exceptions within callback
2020-10-28 13:49:23 +01:00
Christoph M. Becker f547412cba Fix #79177: FFI doesn't handle well PHP exceptions within callback
We have to error on unhandled exceptions in FFI callbacks, to avoid
passing back undefined values.

This has been discussed and agreed upon in a previous PR[1].

[1] <https://github.com/php/php-src/pull/5120>

Closes GH-6366.
2020-10-28 13:34:56 +01:00
Nikita Popov 39be0df2ed Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fixed bug #66528
2020-10-28 12:18:17 +01:00
Nikita Popov 68dcaa29d8 Fixed bug #66528
Report errors in commit, rollback and autocommit handlers.
2020-10-28 12:18:02 +01:00
Dmitry Stogov 6beb080a01 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fixed run-time binding of preloaded dynamically declared function
2020-10-28 13:51:17 +03:00
Dmitry Stogov 68f80be9d1 Fixed run-time binding of preloaded dynamically declared function 2020-10-28 13:50:14 +03:00
Nikita Popov d928c58281 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Handle mysqli errors in more cases
  Sync test with master
2020-10-28 11:37:37 +01:00
Dharman 990bb34891 Handle mysqli errors in more cases
Report errors autocommit, commit, rollback and mysqli_stmt_attr_set.

Additionally, copy the error from conn to stmt when preparing fails,
so these errors are also handled by mysqli_stmt_prepare.

Closes GH-6157.
2020-10-28 11:33:50 +01:00
Nikita Popov fe55fe1f54 Sync test with master
Sync ext/mysqli/tests/mysqli_report.phpt with PHP-8.0/master, as
the current difference in indentation makes it hard to merge.
2020-10-28 11:30:22 +01:00
Nikita Popov 793bf12f8c Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix bug #79375
2020-10-28 11:04:32 +01:00
Dharman b03776adb5 Fix bug #79375
Make sure deadlock errors are properly propagated and reports in
a number of places in mysqli and PDO MySQL.

This also fixes a memory and a segfault that can occur under these
conditions.
2020-10-28 11:01:47 +01:00
Dmitry Stogov 2693f799be Don't force rebuild of symbol table, when populating $http_response_header variable by the HTTP stream wrapper 2020-10-28 12:59:00 +03:00
Dmitry Stogov 47a56208f0 Fixed memory leak in Zend/tests/bug78999.phpt 2020-10-28 10:47:23 +03:00
Dmitry Stogov e6b51ccc58 Fixed tracing JIT support for aliasses (Zend/tests/bug75420.13.phpt and ext/standard/tests/streams/bug60106.phpt) 2020-10-27 23:44:29 +03:00
Dmitry Stogov 43e493884c Fixed support for named parameters (Zend/tests/named_params/references.phpt) 2020-10-27 16:35:24 +03:00
Gabriel Caruso e86b2b9b17 Update NEWS for 8.0.0RC4 2020-10-27 12:25:17 +00:00
Gabriel Caruso d68334c15b Update NEWS for PHP 8.0.0RC3 2020-10-27 12:07:36 +00:00
Nikita Popov d776d25a8e Don't throw for out of bounds offsets in strspn()
Make strspn($str1, $str2, $offset, $length) behaviorally
equivalent to strspn(substr($str1, $offset, $length), $str2)
by not throwing for out of bounds offset.

There have been two reports that this change cause issues,
including bug #80285.
2020-10-27 11:42:01 +01:00
Máté Kocsis 76e4bf3068 Parameter type and name fixes in ext/standard
Closes GH-6382
2020-10-27 11:27:25 +01:00
Dmitry Stogov 45e2b9a7dd Fixed support for typed references 2020-10-27 12:59:35 +03:00
Nikita Popov 682357c5b4 Skip bug46024.phpt under asan
There is a legitimate leak here, but I don't think it's worthwhile
to fix it. It involves a process terminated while printing phpinfo.
2020-10-27 10:35:12 +01:00
Dmitry Stogov b8a6717da6 Fixed tracing JIT for tests/classes/unset_properties.phpt 2020-10-27 10:30:38 +03:00
Dmitry Stogov a17cec446a Fixed memory leak 2020-10-27 01:20:22 +03:00
Sammy Kaye Powers 4a6932c076 Add missing observer tests
Closes GH-6378
2020-10-26 15:15:17 -07:00
Dmitry Stogov ba525a68d9 Fixed register allocation 2020-10-26 21:48:47 +03:00
Dmitry Stogov b7df636589 Fixed MAY_BE_INDIRECT inference. 2020-10-26 21:48:13 +03:00
Dmitry Stogov 9d3cc223b2 Better JIT support for aliases 2020-10-26 19:05:08 +03:00
Nikita Popov 7b9519a792 Fix inconsistency in PDO transaction state
This addresses an issue introduced by #4996 and reported in
https://bugs.php.net/bug.php?id=80260.

Now that PDO::inTransaction() reports the real transaction state
of the connection, there may be a mismatch with PDOs internal
transaction state (in_tcx). This is compounded by the fact that
MySQL performs implicit commits for DDL queries.

This patch fixes the issue by making beginTransaction/commit/rollBack
work on the real transaction state provided by the driver as well
(or falling back to in_tcx if the driver does not support it).

This does mean that writing something like

    $pdo->beginTransaction();
    $pdo->exec('CREATE DATABASE ...');
    $pdo->rollBack(); // <- illegal

will now result in an error, because the CREATE DATABASE already
committed the transaction. I believe this behavior is both correct
and desired -- otherwise, there is no indication that the code did
not behave correctly and the rollBack() was effectively ignored.
However, this is also a BC break.

Closes GH-6355.
2020-10-26 17:01:18 +01:00
Nikita Popov 6d3695a217 Deny serialization of finfo objects
The resulting objects were already unusable, make it error out
earlier.
2020-10-26 16:54:30 +01:00
Nikita Popov 70388cc0ed Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Deny cloning of fileinfo objects
2020-10-26 16:52:14 +01:00
Nikita Popov 9353f11bd2 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Deny cloning of fileinfo objects
2020-10-26 16:50:48 +01:00
Nikita Popov 7817fc07e1 Deny cloning of fileinfo objects
Using a cloned finfo object will crash.
2020-10-26 16:50:20 +01:00
Dharman 7e6b840778 Consistent error handling in mysqli_poll
This error condition should not actually be reachable, but change
it to be consistent with the other ones.

Also fix a memory leak.

Closes GH-6340.
2020-10-26 16:25:25 +01:00
Christoph M. Becker c6784ca75e Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Revert "Fix out-of-bounds write"
2020-10-26 15:42:08 +01:00
Christoph M. Becker cf5d46ba94 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Revert "Fix out-of-bounds write"
2020-10-26 15:40:55 +01:00
Christoph M. Becker be6d72b3a4 Revert "Fix out-of-bounds write"
This reverts commit bf6873a18e.

CVE-2020-26159 is bogus; the "bug" was apparently a false positive
reported by Coverity, and the "fix" apparently wrong, see
<https://github.com/kkos/oniguruma/issues/221>.

Closes GH-6357.
2020-10-26 15:40:12 +01:00
Nikita Popov 8aead9e2bc Re-enable laravel tests
Laravel is now sufficiently PHP 8 compatible.

Closes GH-6353.
2020-10-26 14:31:48 +01:00
Dmitry Stogov 0fa154ad8d Fixed incorrect register allocation in ext/gd/tests/imagecopyresampled_variation1.phpt 2020-10-26 15:56:37 +03:00
Christoph M. Becker e71036ce03 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #80268: loadHTML() truncates at NUL bytes
2020-10-26 13:15:03 +01:00
bashkarev f17b2a75a5 Don't set xdebug.default_enable in run-tests
This throws a deprecation warning in XDebug 3.

Closes GH-6324.
2020-10-26 13:10:26 +01:00
Christoph M. Becker 7bc1c0cca8 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #80268: loadHTML() truncates at NUL bytes
2020-10-26 13:09:30 +01:00
Christoph M. Becker 6d2bc72530 Fix #80268: loadHTML() truncates at NUL bytes
libxml2 has no particular issues parsing HTML strings with NUL bytes;
these just cause truncation of the current text content, but parsing
continues generally.  Since `::loadHTMLFile()` already supports NUL
bytes, `::loadHTML()` should as well.

Note that this is different from XML, which does not allow any NUL
bytes.

Closes GH-6368.
2020-10-26 13:08:05 +01:00
Nikita Popov 26bd857999 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Declare may_retry_reparse_point on windows only
2020-10-26 12:41:12 +01:00
Nikita Popov 31aca85572 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Declare may_retry_reparse_point on windows only
2020-10-26 12:40:56 +01:00
Nikita Popov 824cbc2781 Declare may_retry_reparse_point on windows only 2020-10-26 12:40:45 +01:00
Christoph M. Becker 2da00fadc8 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #62474: com_event_sink crashes on certain arguments
2020-10-26 11:55:29 +01:00
Christoph M. Becker f9ba2ca136 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #62474: com_event_sink crashes on certain arguments
2020-10-26 11:54:45 +01:00
Christoph M. Becker 7424bfc7ac Fix #62474: com_event_sink crashes on certain arguments
We have to make sure that the variant is of type `VT_DISPATCH` before
we access it as such.

Closes GH-6372.
2020-10-26 11:48:57 +01:00
Christoph M. Becker 0abcb9fb69 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #80258: Windows Deduplication Enabled, randon permission errors
2020-10-26 11:22:39 +01:00
Christoph M. Becker ac2e9587fb Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #80258: Windows Deduplication Enabled, randon permission errors
2020-10-26 11:21:52 +01:00
Christoph M. Becker 848e24f24d Fix #80258: Windows Deduplication Enabled, randon permission errors
A recent bug fix regarding symlinks claimed:

> After resolving reparse points, the path still may be a reparse
> point; in that case we have to resolve that reparse point as well.

While that is basically correct, some reparse points may point to
inaccessible system folders (e.g. `IO_REPARSE_TAG_DEDUP` points to
"\System Volume Information").  Since we don't know details about
arbitrary reparse points, and are mainly interested in nested symlinks,
we take a step back, and only resolve `IO_REPARSE_TAG_SYMLINK` for now.

Close GH-6354.
2020-10-26 11:21:14 +01:00
Christoph M. Becker b678df5dc8 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #80280: ADD_EXTENSION_DEP() fails for ext/standard and ext/date
2020-10-26 11:06:10 +01:00
Christoph M. Becker 8b59e4e897 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #80280: ADD_EXTENSION_DEP() fails for ext/standard and ext/date
2020-10-26 11:05:22 +01:00
Christoph M. Becker 2be27074b6 Fix #80280: ADD_EXTENSION_DEP() fails for ext/standard and ext/date
`ADD_EXTENSION_DEP()` relies on the `PHP_<extname>` config variables to
be set to `"yes"`, and since the standard and date extension are always
enabled, we define the respective variables uncoditionally.

Closes GH-6383.
2020-10-26 11:03:05 +01:00
Christoph M. Becker 50d75ae055 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix bug 76618
  Fix bug 76618
2020-10-26 10:59:46 +01:00
Christoph M. Becker 2e84f4d16a Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix bug 76618
2020-10-26 10:58:26 +01:00
Nikita Popov 0535872b7c Use separate directory in dit_004.phpt
Make sure the directory is not modified while we're iterating it,
which may give unstable results.
2020-10-26 09:26:18 +01:00
Nikita Popov 1c868b186e Fix parameter stats generation
[ci skip]
2020-10-26 09:05:25 +01:00
Thiemo Kreuz 9c28dc0ce9 Document breaking change in strspn/strcspn
See https://phabricator.wikimedia.org/T264502.

[ci skip]
2020-10-26 08:58:51 +01:00
Nikita Popov 7f462c97f9 Revert "Make ReflectionUnionType final"
This reverts commit ef6adb4e27.

Per Ondrej's comment, this is already being used by BetterReflection
adaptors, ugh.
2020-10-26 08:51:06 +01:00
Máté Kocsis ef6adb4e27 Make ReflectionUnionType final
Closes GH-6384
2020-10-25 20:14:07 +01:00
Christoph M. Becker fab76e3a11 [ci skip] Fix typos in UPGRADING 2020-10-25 16:27:20 +01:00
Christoph M. Becker 5609701389 Define config var PHP_JSON
Otherwise, `ADD_EXTENSION_DEP('foo', 'json')` fails, even though the
JSON extension is available.
2020-10-24 15:36:05 +02:00
George Peter Banyard 158d308197 Throw Value/TypeError for invalid $bodies in imap_mail_compose()
Small drive by refactoring to use HashTables

Closes GH-6371
2020-10-23 20:47:35 +01:00
Máté Kocsis 47bbfe1fc0 Require stubs to declare return types for magic methods when possible
Closes GH-6376
2020-10-23 16:33:16 +02:00
Nikita Popov 0fb2374e06 Make GC default threshold handling consistent
While the initial threshold is set to 10001 roots, the threshold
adjustment logic may then set it to 10000. The exact value really
doesn't matter, but we should make it consistent.
2020-10-23 10:30:07 +02:00
Nikita Popov 078df4d144 Don't allow passing unknown named params to class without ctor
See also https://externals.io/message/112083.

Closes GH-6364.
2020-10-23 09:46:55 +02:00
Javier Eguiluz c64dcda5e5 Fixed some typos
Closes GH-6373.

[ci skip]
2020-10-23 09:34:09 +02:00
Dmitry Stogov 0f8518f875 Fixed register allocation 2020-10-22 23:16:41 +03:00
Dmitry Stogov 838d8d0ba0 Fixed reference-counter inference 2020-10-22 23:15:39 +03:00
Dmitry Stogov 5626dcdb9d Missed warning 2020-10-22 23:15:15 +03:00
Máté Kocsis a8e92e361f Run arginfo/ZPP verification tests in strict mode as well
Closes GH-6370
2020-10-22 19:01:40 +02:00
George Peter Banyard ba27866aec Fix bug 76618
Apply patch which was attached to the bug in July 2018
2020-10-22 17:05:29 +01:00
George Peter Banyard d5e2431884 Fix bug 76618
Apply patch which was attached to the bug in July 2018
2020-10-22 17:05:07 +01:00
George Peter Banyard 12a09183b3 Fix bug 76618
Apply patch which was attached to the bug in July 2018
2020-10-22 17:01:48 +01:00
Dmitry Stogov 20cbb233c4 Checj type guards before loading values into CPU registers 2020-10-22 18:23:49 +03:00
Dmitry Stogov 30cf0a04bf Avoid register allocation for ASSIGN into aliased variable (it might be indirectly changed into IS_REFERENCE) 2020-10-22 18:22:36 +03:00
George Peter Banyard 8b265fb602 Fix segfaults after conversion from zval to zend_string params 2020-10-22 15:50:01 +01:00
Nikita Popov 6de6f2a4e9 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Don't crash on uninitialized tidy object
2020-10-22 16:05:57 +02:00
Nikita Popov 85d9a1ca6e Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Don't crash on uninitialized tidy object
2020-10-22 16:05:34 +02:00
Nikita Popov d4bf0799b8 Don't crash on uninitialized tidy object
"Uninitialized" here means that the object was created ordinarily
-- no constructor skipping involved. Most tidy methods seem to
handle this fine, but these three need to be guarded.
2020-10-22 16:04:22 +02:00
Nikita Popov bfe7a1168a Properly validate ArrayObject::asort() argument 2020-10-22 15:20:43 +02:00
Máté Kocsis 4fb5ccf00c Fix parameter name of pspell_config_save_repl()
Closes GH-6369.
2020-10-22 14:54:43 +02:00
Nikita Popov 97dd0eb98d Fix stub for dba_key_split()
This is an extremely weird function, but the behavior seems to be
intentional, and is quite clearly documented.

So we adjust the stub to also accept false|null as arguments. I
believe the implementation already correctly matches union type
semantics.
2020-10-22 14:50:52 +02:00
Nikita Popov db5979dfe2 Make highlight_string() accept string in zpp
To satisfy the type declaration.
2020-10-22 14:31:42 +02:00
Nikita Popov c23eefb1ad Don't leak pcntl last_error across requests 2020-10-22 14:21:22 +02:00
Nikita Popov aa0d886cbc Don't leak json error_code across requests 2020-10-22 12:42:09 +02:00
Nikita Popov 41b8cdd2e0 Don't leak pcre error_code across requests 2020-10-22 11:20:02 +02:00
Derick Rethans 5eb6f593ee Updated to version 2020.4 (2020d) 2020-10-22 10:12:27 +01:00
Derick Rethans 55e5966c32 Empty merge 2020-10-22 10:12:27 +01:00
Derick Rethans 4ea01bdc67 Updated to version 2020.4 (2020d) 2020-10-22 10:12:26 +01:00
Derick Rethans c7c87515f6 Empty merge 2020-10-22 10:12:25 +01:00
Derick Rethans d4200ba6cf Updated to version 2020.4 (2020d) 2020-10-22 10:12:24 +01:00
Nikita Popov dd3639341d Don't allow properties on GdImage
Just like all the other former resources... we missed this case.
2020-10-22 10:34:14 +02:00
Nikita Popov dd4a080133 Simplify and fix generator tree management
This makes a number of related changes to the generator tree
management, that should hopefully make it easier to understand,
more robust and faster for the common linear-chain case. Fixes
https://bugs.php.net/bug.php?id=80240, which was the original
motivation here.

 * Generators now only add a ref to their direct parent.
 * Nodes only store their children, not their leafs, which avoids
   any need for leaf updating. This means it's no longer possible
   to fetch the child for a certain leaf, which is something we
   only needed in one place (update_current). If multi-children
   nodes are involved, this will require doing a walk in the other
   direction (from leaf to root). It does not affect the common
   case of single-child nodes.
 * The root/leaf pointers are now seen as a pair. One leaf generator
   can point to the current root. If a different leaf generator is
   used, we'll move the root pointer over to that one. Again, this
   is a cache to make the common linear chain case fast, trees may
   need to scan up the parent link.

Closes GH-6344.
2020-10-22 10:25:25 +02:00
Nikita Popov ac87880add Update bcmath.scale when calling bcscale()
We should keep the value of bcmath.scale and the internal
bc_precision global synchronized.

Probably more important than the ability to retrieve bcmath.scale
via ini_get(), this also makes sure that the set scale does not
leak into the next request, as it currently does.
2020-10-21 17:06:48 +02:00
Dmitry Stogov cb6f9a6568 More accurate live range construction 2020-10-21 16:05:13 +03:00
Dmitry Stogov 9efb258fc1 Eliminate useless mov(s) 2020-10-21 16:03:28 +03:00
Nikita Popov 3966c0f8a4 Add test for zend_extension loading
Closes GH-6363.
2020-10-21 12:16:56 +02:00
twosee 5998b2a3a6 Fix invalid memory read on libpath
Introduced in 3e33e1e86d.

Closes GH-6362.
2020-10-21 10:07:07 +02:00
Dmitry Stogov a1cac4fefc Eliminate dead type store 2020-10-20 23:37:19 +03:00
Dmitry Stogov 0ac810bbc5 Improve JIT for fetching character form string 2020-10-20 20:29:33 +03:00
Christoph M. Becker edd8bd64ba Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #80242: imap_mail_compose() segfaults for multipart with rfc822
2020-10-20 19:02:15 +02:00
Christoph M. Becker 4ef7be20ab Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #80242: imap_mail_compose() segfaults for multipart with rfc822
2020-10-20 19:00:16 +02:00
Christoph M. Becker 315b95b065 Fix #80242: imap_mail_compose() segfaults for multipart with rfc822
libc-client expects `TYPEMESSAGE` with an explicit subtype of `RFC822`
to have a `nested.msg` (otherwise there will be a segfault during
free), but not to have any `contents.text.data` (this will leak
otherwise).

Closes GH-6345.
2020-10-20 18:58:45 +02:00
Máté Kocsis d5f92baad0 Fix default value handling of mysqli_fetch_object()
Make [] acceptable both for classes without constructors and
classes with a constructor that takes no arguments.

Closes GH-6336.
2020-10-20 16:48:12 +02:00
Christoph M. Becker 8f6cade864 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Add char* cast to avoid compiler warnings
2020-10-20 16:33:56 +02:00
Christoph M. Becker a54f0f7680 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Add char* cast to avoid compiler warnings
2020-10-20 16:31:25 +02:00
Christoph M. Becker de58fb34c9 Add char* cast to avoid compiler warnings
In libc-client 2007f `data` is declared as `unsigned char *`; there may
be variants which declare it as `void *`, but in any case picky
compilers may warn about a pointer type mismatch in the conditional
(and error with `-W-error`), so we're adding a `char *` cast for good
measure.
2020-10-20 16:29:42 +02:00
Nikita Popov 1c157d3fa2 Fixed bug #80256
Remove the transfer_encoding stream filter immediately when we
destroy the old stream, to make sure it doesn't get attached to
the new stream.
2020-10-20 15:35:41 +02:00
Christoph M. Becker 486c49dee8 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Properly fix #80220
2020-10-20 13:36:41 +02:00
Christoph M. Becker 9cfd650697 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Properly fix #80220
2020-10-20 13:35:06 +02:00
Christoph M. Becker 7f3bdda29b Properly fix #80220
The original fix for that bug[1] broke the formerly working composition
of message/rfc822 messages, which results in a segfault when freeing
the message body now.  While `imap_mail_compose()` does not really
support composition of meaningful message/rfc822 messages (although
libc-client appears to support that), some code may still use this to
compose partial messages, and using string manipulation to create the
final message.

The point is that libc-client expects `TYPEMESSAGE` with an explicit
subtype of `RFC822` to have a `nested.msg` (otherwise there will be a
segfault during free), but not to have any `contents.text.data` (this
will leak otherwise).

[1] <http://git.php.net/?p=php-src.git;a=commit;h=0d022ddf03c5fabaaa22e486d1e4a367ed9170a7>

Closes GH-6343.
2020-10-20 13:32:53 +02:00
Nikita Popov cf04707938 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix bug #79643: Invalid memory read when opcache.interned_strings_buffer is 0
2020-10-20 12:51:08 +02:00
twosee d134c0ac05 Fix bug #79643: Invalid memory read when opcache.interned_strings_buffer is 0 2020-10-20 12:50:28 +02:00
Dmitry Stogov 5e17d88b63 Improve register allocator (register reuse) 2020-10-20 13:46:32 +03:00
Dmitry Stogov ea1590937b Improve register allocator (give preference to loop variables). 2020-10-20 12:19:44 +03:00
Nikita Popov 87d2bb7424 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix CCM tag length setting for old OpenSSL versions
2020-10-20 10:52:50 +02:00
Nikita Popov 1359f793ee Fix CCM tag length setting for old OpenSSL versions
While OpenSSL 1.1 allows unconditionally setting the CCM tag length
even for decryption, some older versions apparently do not. As such,
we do need to treat CCM and OCB separately after all.
2020-10-20 10:50:50 +02:00
Nikita Popov 2c8287382c Increase timeout on file cache job
[ci skip]
2020-10-20 09:53:50 +02:00
Dmitry Stogov ee5b1dd6dc Fixed range propagation 2020-10-20 02:27:24 +03:00
Dmitry Stogov fc2d477c5b Avoid partial register stall 2020-10-19 23:22:43 +03:00
Dmitry Stogov bf321f0c14 Use zero-extended mov insted of sign-signed movsxd 2020-10-19 19:39:51 +03:00
Nikita Popov d3812ca41b Fixed bug #80255
This was a copy&paste mistake, target_block was used where
follow_block was intended. Also update copy&paste mistakes in
the comments.
2020-10-19 15:13:53 +02:00
Nikita Popov c97da0f819 Revert "Fix bug #64865: Use CONTEXT_DOCUMENT_ROOT for scanning dir tree"
This reverts commit 98bfad738a.

This doesn't work well in some setups, see bug #80113 and GH-5051.
Reverting this for now.
2020-10-19 11:23:00 +02:00
Nikita Popov 7727a02276 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix bug #79983: Add support for OCB mode
2020-10-19 11:09:17 +02:00
Nikita Popov 750a74ed9c Fix bug #79983: Add support for OCB mode
OCB mode ciphers were already exposed to openssl_encrypt/decrypt,
but misbehaved, because they were not treated as AEAD ciphers.
From that perspective, OCB should be treated the same way as GCM.
In OpenSSL 1.1 the necessary controls were unified under
EVP_CTRL_AEAD_* (and OCB is only supported since OpenSSL 1.1).

Closes GH-6337.
2020-10-19 11:09:00 +02:00
Nikita Popov 8bc5e23f40 Disable Laravel testing
This has been failing for months now, let's make the scheduled
build status meaningful again.

[ci skip]
2020-10-19 10:44:46 +02:00
Nikita Popov 61b33e900c Add additional initialization checks to SplFileInfo 2020-10-19 10:35:22 +02:00
Derick Rethans d0c2db4179 Updated to version 2020.3 (2020c) 2020-10-19 09:31:04 +01:00
Derick Rethans 64012b72c5 Empty merge 2020-10-19 09:31:04 +01:00
Derick Rethans a4c1a43a5b Updated to version 2020.3 (2020c) 2020-10-19 09:31:03 +01:00
Derick Rethans d8ff075f12 Empty merge 2020-10-19 09:31:03 +01:00
Derick Rethans 7b5f232b03 Updated to version 2020.3 (2020c) 2020-10-19 09:31:02 +01:00
Nikita Popov 74fe9170b6 Check PDOStatement initialization during iteration 2020-10-19 10:22:56 +02:00
Máté Kocsis f076ab0c0c Fix #80229: assert_options should have int and bool for parameter PHPDoc
Closes GH-6348
2020-10-17 12:01:07 +02:00
Nikita Popov d6a18a7738 Properly handle NULL output start filename 2020-10-16 18:38:03 +02:00
Nikita Popov 97202d9d84 Make sure output start filename is not freed early
As filenames are no longer interned, we need to keep a reference
to the zend_string to make sure it isn't freed.

To avoid a nominal source compatibility break, create a new member
in the globals.
2020-10-16 17:27:52 +02:00
Nikita Popov 28e21d80b0 Fix leak when setting dynamic property on generator 2020-10-16 16:58:27 +02:00
Anatoly Pashin 6669426ab9 [ci skip] Make it clear what GD uses instead of resources
Closes GH-6342.
2020-10-16 12:16:12 +02:00
Máté Kocsis d6264b0966 Verify parameter names of function aliases
Closes GH-6335
2020-10-16 10:56:33 +02:00
David Carlier 3841ea338e DragonFlyBSD build update for opcache JIT part.
Closes GH-6339.
2020-10-15 14:50:23 +02:00
Dmitry Stogov 5572318166 Avoid refcounting when return CV (similar to optimization in VM). 2020-10-15 15:27:00 +03:00
Nikita Popov 4ece62fba9 Fix bug #80055
We need to perform trait scope fixup for both methods involved
in the inheritance check. For that purpose we already need to
thread through a separate fn scope through the entire inheritance
checking machinery.
2020-10-15 14:24:25 +02:00
Christoph M. Becker ecd51aa099 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix broken fix for #80239
2020-10-15 13:20:58 +02:00
Christoph M. Becker bc214c8423 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix broken fix for #80239
2020-10-15 13:19:30 +02:00
Christoph M. Becker 4b9db65f68 Fix broken fix for #80239
No idea why that `git am` failed that badly.
2020-10-15 13:18:34 +02:00
Christoph M. Becker b7c1834c6a Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #80239: imap_rfc822_write_address() leaks memory
2020-10-15 12:57:35 +02:00
Christoph M. Becker 7899ac4c14 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #80239: imap_rfc822_write_address() leaks memory
2020-10-15 12:56:02 +02:00
Christoph M. Becker 5941b30bb8 Fix #80239: imap_rfc822_write_address() leaks memory
We have to free the address when we're finished with it.
2020-10-15 12:54:53 +02:00
Côme Chilliet 15a3eca3ef Change $controls parameter to default to null in ext/ldap
It appeared that not passing $controls and passing [] caused different
 behaviors, when not passing it the controls set through ldap_set_option
 would be used, when passing [] they would not.

So, this parameter is now nullable and defaults to null to have a
 consistent behavior.
2020-10-15 11:48:47 +02:00
Nikita Popov b2700811f3 Skip arginfo test under msan
Msan is missing interceptors for some functions that result in
false positives.
2020-10-15 10:40:23 +02:00
Nikita Popov 682cc42900 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix leak in gmp_export()
2020-10-15 10:17:55 +02:00
Nikita Popov fb246bec14 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix leak in gmp_export()
2020-10-15 10:16:56 +02:00
Nikita Popov a29016d70d Fix leak in gmp_export() 2020-10-15 10:16:22 +02:00
Christoph M. Becker e076455026 Adapt test expectation to cURL 7.73.0
cURL 7.73.0 introduced support for the MQTT protocol, so we have to
adapt our expectations regarding the supported protocols.
2020-10-14 19:11:58 +02:00
Nikita Popov e065d97e94 Sync zpp in phar interceptors
This should match the zpp of the intercepted functions...
2020-10-14 16:58:07 +02:00
Nikita Popov 187efc6496 Fix null foreground in imagewbmp
The variable was not actually passed to zpp...
2020-10-14 16:40:35 +02:00
Nikita Popov 1610e81b51 Mark ldap_exop() param as UNKNOWN
This function actually has very different behavior depending on
whether $response_data is passed or not.
2020-10-14 16:38:56 +02:00
Nikita Popov 0832376411 More arginfo/zpp verification
Run all functions with a varying number of null arguments, which
helps us flush out all kinds of bugs.

Closes GH-5881.
2020-10-14 16:26:09 +02:00
Nikita Popov 5e34744fd9 Initialize calendar_long variable
As reported by cmb, this results a VC runtime warning. I don't
believe there's a problem here, as we only use calendar_long if
both calendar_is_null and calendar_obj are not set, but it doesn't
hurt to initialize it either...
2020-10-14 11:57:05 +02:00
Nikita Popov 251af7329f Fix nullability of openssl_cms_sign() parameter 2020-10-14 11:34:15 +02:00
Nikita Popov 2540f68d0e Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Allow passing $tag for non-authenticated encryption
2020-10-14 10:56:51 +02:00
Nikita Popov 6c6a58e930 Allow passing $tag for non-authenticated encryption
openssl_encrypt() currently throws a warning if the $tag out
parameter is passed for a non-authenticated cipher. This violates
the principle that a function should behave the same if a parameter
is not passed, and if the default value is passed for the parameter.

I believe this warning should simply be dropped and the $tag be
populated with null, as is already the case. Otherwise, it is not
possible to use openssl_encrypt() in generic wrapper APIs, that are
compatible with both authenticated and non-authenticated encryption.

Closes GH-6333.
2020-10-14 10:54:06 +02:00
Dmitry Stogov 06bb1feb09 Added missing side exit 2020-10-14 01:17:39 +03:00
Sara Golemon 4da2bebd41 Update NEWS for 8.0.0RC3 2020-10-13 21:59:53 +00:00
Sara Golemon 431421d1ce Update NEWS for PHP 8.0.0RC2 2020-10-13 21:53:31 +00:00
Nikita Popov 5582490bf2 Normalize mb_ereg() return value
mb_ereg()/mb_eregi() currently have an inconsistent return value
based on whether the $matches parameter is passed or not:

> Returns the byte length of the matched string if a match for
> pattern was found in string, or FALSE if no matches were found
> or an error occurred.
>
> If the optional parameter regs was not passed or the length of
> the matched string is 0, this function returns 1.

Coupling this behavior to the $matches parameter doesn't make sense
-- we know the match length either way, there is no technical
reason to distinguish them. However, returning the match length
is not particularly useful either, especially due to the need to
convert 0-length into 1-length to satisfy "truthy" checks. We
could always return 1, which would kind of match the behavior of
preg_match() -- however, preg_match() actually returns the number
of matches, which is 0 or 1 for preg_match(), while false signals
an error. However, mb_ereg() returns false both for no match and
for an error. This would result in an odd 1|false return value.

The patch canonicalizes mb_ereg() to always return a boolean,
where true indicates a match and false indicates no match or error.
This also matches the behavior of the mb_ereg_match() and
mb_ereg_search() functions.

This fixes the default value integrity violation in PHP 8.

Closes GH-6331.
2020-10-13 20:40:55 +02:00
Christoph M. Becker 5aec24c477 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #64076: imap_sort() does not return FALSE on failure
2020-10-13 19:41:27 +02:00
Christoph M. Becker d9058b61fb Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #64076: imap_sort() does not return FALSE on failure
2020-10-13 19:38:31 +02:00
Christoph M. Becker db8bf0a9e0 Fix #64076: imap_sort() does not return FALSE on failure
If unsupported `$search_criteria` are passed to `imap_sort()`, the
function returns an empty array, but there is also an error on the
libc-client error stack ("Unknown search criterion: UNSUPPORTED
(errflg=2)").  If, on the other hand, unsupported `$criteria` or
unsupported `$flags` are passed, the function returns `false`.  We
solve this inconsistency by returning `false` for unsupported
`$search_criteria` as well.

Closes GH-6332.
2020-10-13 19:37:05 +02:00
Nikita Popov 9b4094c3d7 Fix incorrect zpp parameter count in mb_substr() / mb_strcut()
These functions only accept 4 params.
2020-10-13 17:46:56 +02:00
Nikita Popov a7e84e2e02 Fix default value for some pgsql functions
These set the PGSQL_DML_EXEC flag by default.
2020-10-13 17:29:05 +02:00
Nikita Popov d66e929915 Fix null handling in mysqli_begin_transaction()
We don't want an explicit null name hit the !name_len check.
2020-10-13 17:12:50 +02:00
Nikita Popov 124bce3c7a Fix argument nullability in mbstring
These arguments were declared nullable in stubs (and should be
nullable), but didn't accept null in zpp.
2020-10-13 16:03:04 +02:00
Nikita Popov 7b0f5f424d Don't accept null in pg_unescape_bytea()
This is an error that slipped in via 8d37c37bcd.
pg_unescape_bytea() did not accept null in PHP 7.4, and it is not
meaningful for it to accept null now -- it will always fail, and now
with a misleading OOM message.
2020-10-13 15:37:13 +02:00
Christoph M. Becker 8e531b5b00 Update ext/odbc parameter names
Closes GH-6303.
2020-10-13 15:34:12 +02:00
Nikita Popov e86a6ced06 Use $statement in mysqli
As we went with $statement rather than $stmts in other places,
let's also use it in mysqli. The discrepancy with mysqli_stmt
is a bit unfortunate, but we can't be consistent with *both*.

Closes GH-6330.
2020-10-13 14:20:00 +02:00
Derick Rethans f22cc23c70 Merge branch 'PHP-7.4' into PHP-8.0 2020-10-13 12:29:14 +01:00
Derick Rethans 8fd8a1b128 Prepare for 7.4.13 2020-10-13 12:28:58 +01:00
Christoph M. Becker ade146c9ed Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Ignore memory leaks reported for some libc-client functions
2020-10-13 13:12:39 +02:00
Christoph M. Becker 9c7b607320 Ignore memory leaks reported for some libc-client functions
At least on Windows, some static variables are lazily initialized
during `mail_open()` and `mail_lsub()`, which are reported as memory
leaks.  We suppress these false positives.

Closes GH-6326.
2020-10-13 13:09:29 +02:00
Dmitry Stogov 62ae21bbf2 Give preference to live-ranges with register hints to improve register reuse. 2020-10-13 13:59:53 +03:00
Nikita Popov ea03acadc2 Update ext/pdo_pgsql parameter names
Closes GH-6329.
2020-10-13 12:31:39 +02:00
Nikita Popov 3171fec6da Update ext/pgsql parameter names
Closes GH-6294.
2020-10-13 12:30:44 +02:00
Nikita Popov 1748b8111e Fix handling of throwing undef var in verify return
If we have an undefined variable and null is not accepted by the
return type, we want to throw just the undef var error.

In this case this lead to an infinite loop, because we overwrite
the exception opline in SAVE_OPLINE and it does not get reset
when chaining into a previous exception. Add an assertiong to
catch this case earlier.
2020-10-13 11:43:43 +02:00
Nikita Popov 8c68745f43 Update ext/sodium parameter names
Closes GH-6279.
2020-10-13 10:41:35 +02:00
Dmitry Stogov 872787c5f7 Avoid useless register allocation 2020-10-13 11:37:33 +03:00
Nikita Popov 82d46e353b Update ext/phar parameter names
Closes GH-6307.
2020-10-13 10:20:45 +02:00
Christoph M. Becker 21dafab2f9 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  7.3.25 is next
2020-10-13 09:55:33 +02:00
Christoph M. Becker 8782c61f26 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  7.3.25 is next
2020-10-13 09:53:52 +02:00
Christoph M. Becker 2d01a89ad1 7.3.25 is next 2020-10-13 09:52:46 +02:00
Christoph M. Becker 818eb8f611 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #80226: imap_sort() leaks sortpgm memory
2020-10-12 23:21:56 +02:00
Dmitry Stogov 87beb22ff8 Perform trace range propagation 2020-10-13 00:18:17 +03:00
Christoph M. Becker 12fc8f66e7 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #80226: imap_sort() leaks sortpgm memory
2020-10-12 23:17:57 +02:00
Christoph M. Becker 8488c34fc6 Fix #80226: imap_sort() leaks sortpgm memory
We need to free what we have allocated.

Closes GH-6327.
2020-10-12 23:16:31 +02:00
Christoph M. Becker 8d4774a2df Change parameters types from int to bool
These are typical boolean parameters, so we shouldn't advertize them as
integers.  For the `$reverse` parameter that even fixes expectations,
because the `reverse` member is a bitfield of 1 bit, so assigning any
even integer would not set it.

Closes GH-6328.
2020-10-12 23:10:13 +02:00
Dmitry Stogov 1c596ff146 Eliminate dead stores 2020-10-12 22:59:30 +03:00
Máté Kocsis 186612e4d7 Improve parameter names in ext/intl
Closes GH-6309
2020-10-12 18:06:45 +02:00
Máté Kocsis eef994d621 Improve parameter names in ext/pdo_sqlite
Closes GH-6310
2020-10-12 18:05:35 +02:00
Nikita Popov 6edad1716d Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  intl: report more information about message pattern parse errors
2020-10-12 16:44:18 +02:00
Philip Hofstetter 74cf2eb83f intl: report more information about message pattern parse errors
The message patterns can be pretty complex, so reporting a generic
U_PARSE_ERROR without any additional information makes it needlessly
hard to fix erroneous patterns.

This commit makes use of the additional UParseError* parameter to
umsg_open to retrieve more details about the parse error to report that
to the user via intl_get_error_message()

Additional improve error reporting from the IntlMessage constructor.
Previously, all possible failures when calling IntlMessage::__construct()
would be masked away with a generic "Constructor failed" message.
This would include invalid patterns.

This commit makes sure that the underlying error that caused the
constructor failure is reported as part of the IntlException error
message.

Closes GH-6325.
2020-10-12 16:42:41 +02:00
Nikita Popov f9b7609d17 Fixed bug #80225
Namespaced and declares have a different interpretation of what
"first statement" means.
2020-10-12 16:35:09 +02:00
Christoph M. Becker 11c752a5f5 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #80216: imap_mail_compose() does not validate types/encodings
2020-10-12 16:30:48 +02:00
Christoph M. Becker 216d6a024a Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #80216: imap_mail_compose() does not validate types/encodings
2020-10-12 16:28:52 +02:00
Christoph M. Becker 73e43b6e19 Fix #80216: imap_mail_compose() does not validate types/encodings
We need to check whether the given `type`s and `encoding`s are within
bounds to avoid segfaults and out-of-bound reads.

Closes GH-6323.
2020-10-12 16:27:49 +02:00
Christoph M. Becker 0443c824a3 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #80223: imap_mail_compose() leaks envelope on malformed bodies
2020-10-12 15:10:38 +02:00
Christoph M. Becker 4a469c7e98 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #80223: imap_mail_compose() leaks envelope on malformed bodies
2020-10-12 15:09:30 +02:00
Christoph M. Becker c1962e900a Fix #80223: imap_mail_compose() leaks envelope on malformed bodies
We have to clean up even on failure.

Closes GH-6322.
2020-10-12 15:08:30 +02:00
Christoph M. Becker 5a8958f0f3 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #80220: imap_mail_compose() may leak memory
2020-10-12 13:34:19 +02:00
Christoph M. Becker acce991a37 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #80220: imap_mail_compose() may leak memory
2020-10-12 13:32:40 +02:00
Christoph M. Becker 0d022ddf03 Fix #80220: imap_mail_compose() may leak memory
Unless `topbod` is of `TYPEMULTIPART`, `mail_free_body()` does not free
the `nested.part`; while we could do this ourselves, instead we just
ignore additional bodies in this case, i.e. we don't attach them in the
first place.

Closes GH-6321.
2020-10-12 13:31:30 +02:00
Nikita Popov 2cd2ca8884 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Revert "Add missing X509 purpose constants"
2020-10-12 12:56:21 +02:00
Nikita Popov 41e4a77077 Revert "Add missing X509 purpose constants"
This reverts commit 1e53e14bc3.

This fails on Travis.
2020-10-12 12:56:07 +02:00
Nikita Popov da60849fa1 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Add missing X509 purpose constants
2020-10-12 11:53:22 +02:00
Vincent JARDIN 1e53e14bc3 Add missing X509 purpose constants
X509_PURPOSE_OCSP_HELPER, X509_PURPOSE_TIMESTAMP_SIGN are available
from OpenSSL for many years:

  - X509_PURPOSE_OCSP_HELPER, since 2001
  - X509_PURPOSE_TIMESTAMP_SIGN, since 2006

Also drop the ifdef check for X509_PURPOSE_ANY, as it is always
available in supported OpenSSL versions.

Closes GH-6312.
2020-10-12 11:51:08 +02:00
Nikita Popov 66ecee6243 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Detect self-addition of array more accurately
  Deindirect source elements in zend_hash_merge
2020-10-12 11:25:27 +02:00
Nikita Popov 5a7f9afb99 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Detect self-addition of array more accurately
  Deindirect source elements in zend_hash_merge
2020-10-12 11:24:59 +02:00
Nikita Popov 3c4dd73c02 Detect self-addition of array more accurately
While the zvals may be different, they may still point to the
same array.

Fixes oss-fuzz #26245.
2020-10-12 11:24:31 +02:00
Nikita Popov e304468e57 Deindirect source elements in zend_hash_merge
If the RHS has INDIRECT elements, we do not those to be added to
the LHS verbatim. As we're using UPDATE_INDIRECT, we might even
create a nested INDIRECT that way.

This is a side-quest of oss-fuzz #26245.
2020-10-12 11:24:27 +02:00
Nikita Popov 8d11576a86 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Backport schedule in yaml
2020-10-12 10:06:40 +02:00
Nikita Popov 9a2e5cfccb Backport schedule in yaml
I'm not sure it's needed, but let's try it: Add the scheduled
builds on PHP-7.4 and PHP-8.0 as well, rather than just master.
2020-10-12 10:05:37 +02:00
Nikita Popov d953cd1862 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Avoid non-object in FE_FREE
2020-10-12 09:46:38 +02:00
Nikita Popov 304141e8f8 Avoid non-object in FE_FREE
Even if the properties HT is empty, make sure we still leave an
object in the FE_RESET result, so our type inference results
stay correct.
2020-10-12 09:45:52 +02:00
Christoph M. Becker fbf221cac4 XMLReader::open() and XMLReader::xml() are now static 2020-10-11 18:50:35 +02:00
Christoph M. Becker d72c648015 Remove return types from XMLWriter stubs
These break BC, and as such we have to stick with docblock annotations.

Closes GH-6319.
2020-10-11 18:22:59 +02:00
Derick Rethans 63289cfff3 Merge branch 'PHP-7.4' into PHP-8.0 2020-10-11 14:54:12 +01:00
Derick Rethans 34179ba809 Merge branch 'PHP-7.3' into PHP-7.4 2020-10-11 14:54:02 +01:00
Derick Rethans 1ed5a2a54d Fixed test for bug #48097 due to confirmed data changes in timelib 2020-10-11 14:53:52 +01:00
Christoph M. Becker 6494e57804 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #80215: imap_mail_compose() may modify by-val parameters
2020-10-10 23:28:19 +02:00
Christoph M. Becker 7940fb42ce Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #80215: imap_mail_compose() may modify by-val parameters
2020-10-10 23:26:12 +02:00
Christoph M. Becker 62a2387a8d Fix #80215: imap_mail_compose() may modify by-val parameters
We separate the input arrays and all sub-arrays to avoid modification
of the passed parameters.

This should be rewritten to use `zend_string`s for the "master" branch.

Closes GH-6316.
2020-10-10 23:25:06 +02:00
Christoph M. Becker 7d085c87ac Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fix #80213: imap_mail_compose() segfaults on certain $bodies
2020-10-10 19:19:47 +02:00
Christoph M. Becker b2b9e2e87e Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #80213: imap_mail_compose() segfaults on certain $bodies
2020-10-10 19:18:14 +02:00
Christoph M. Becker 8bee0fbd37 Fix #80213: imap_mail_compose() segfaults on certain $bodies
We have to cater to non-associative arrays where the key may be `NULL`;
we just skip these elements.

Closes GH-6315.
2020-10-10 19:17:13 +02:00
Christoph M. Becker 2a545ba946 Fix #80175: PHP8 RC1 - JIT Buffer not working
On Windows, `SUCCESSFULLY_REATTACHED` does not imply that the process
has already been properly initialized; thus we must not skip some setup
steps in `zend_jit_startup()`.

Closes GH-6268.
2020-10-10 17:46:59 +02:00
Christoph M. Becker 45c19bde22 Change imap_mail_compose() $body param to $bodies
This parameter actually expects an array of bodies, so we should name
it accordingly.

Closes GH-6313.
2020-10-10 17:39:54 +02:00
Nikita Popov 378bb63f66 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Don't specify symfony branch
2020-10-10 11:08:47 +02:00
Nikita Popov 82e5752b0b Don't specify symfony branch
This was renamed from master to 5.x. Just use the default branch.
2020-10-10 11:07:49 +02:00
Dmitry Stogov 57bb3a3966 Eliminate dead load 2020-10-09 18:58:03 +03:00
Nikita Popov 14a26db3e2 Update ext/gd parameter names
Closes GH-6308.
2020-10-09 17:10:11 +02:00
Nikita Popov 623bf39e9c Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Fixed bug #80186
2020-10-09 17:02:20 +02:00
Nikita Popov 15443f8af4 Fixed bug #80186
Early exit in FE_RESET if get_properties() returns empty array,
as we cannot add HT iterators to zend_empty_array.
2020-10-09 16:56:08 +02:00
Nikita Popov e4e2541c1a Update to mime-db 1.45 2020-10-09 16:22:04 +02:00
Nikita Popov 6a8c094e2d Remove string length limit from levenshtein()
As noted on https://bugs.php.net/bug.php?id=80073, I don't think
having this limitation makes sense. The similar_text() function
has much worse asymptotic complexity than levenshtein() and does
not enforce such a limitation. levenshtein() does have fairly high
memory requirements, but they are a fixed factor of the string
length (and subject to memory limit).
2020-10-09 16:12:08 +02:00
Petr Sumbera 240d06118c Add support for Solaris 11.4 openpty implementation.
Closes GH-6287.
2020-10-09 16:10:03 +02:00
Dmitry Stogov fc14dbb713 Keep the same JIT code for PHP-8.0 and master (workaround against PHP-8.0 ABI freeze) 2020-10-09 16:54:26 +03:00
Nikita Popov 38368708d7 Enable Azure pipeline builds on PHP-8.0 2020-10-09 15:30:40 +02:00
Nikita Popov 64cebf3d9a Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  Make iconv errno support test pass on Solaris.
2020-10-09 15:25:23 +02:00
Nikita Popov 58af1e156e Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Make iconv errno support test pass on Solaris.
2020-10-09 15:24:53 +02:00
Petr Sumbera 07a4185df1 Make iconv errno support test pass on Solaris.
Closes GH-6291.
2020-10-09 15:24:36 +02:00
Dmitry Stogov 080784acfd Eliminate more dead type stores 2020-10-09 16:15:07 +03:00
Nikita Popov 6188b7a1da Revert "Change calling convention of zval_update_constant[_ex]() to fastcall."
This reverts commit 5a447b086b.

Revert this ABI break from PHP-8.0, leaving it only on master.
2020-10-09 15:06:12 +02:00
Nikita Popov cc58347105 Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
  XFAIL test broken by timelib update
2020-10-09 14:05:33 +02:00
Nikita Popov 229eb15f0e Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  XFAIL test broken by timelib update
2020-10-09 14:05:23 +02:00
Nikita Popov 5018581410 XFAIL test broken by timelib update
I was expecting this to get fixed quickly, but it didn't.
XFAIL for now.
2020-10-09 14:04:47 +02:00
Dmitry Stogov 6f888b90c5 Eliminate more dead type stores 2020-10-09 14:31:20 +03:00
Máté Kocsis 503999910b More precise type information for datefmt_format() 2020-10-09 11:05:42 +02:00
Máté Kocsis 686d6c3dd4 Fix XmlParser classname in stubs 2020-10-09 10:43:35 +02:00
Máté Kocsis 4173f2b3ab Improve parameter names in ext/oci8
Closes GH-6267
2020-10-08 23:30:33 +02:00
Dmitry Stogov 2ad96b8cee Eliminate more dead type stores 2020-10-08 23:26:31 +03:00
Dmitry Stogov e5830c4a6b Eliminate dead type stores 2020-10-08 19:15:23 +03:00
Dmitry Stogov 8efcc280be Cleanup (expand and remove simple macros) 2020-10-08 19:15:23 +03:00
Nikita Popov e0f2ac9ff6 Update ext/imap parameter names
Closes GH-6299.
2020-10-08 18:02:09 +02:00
Nikita Popov 5836e3ed97 Update ext/snmp parameter names
Closes GH-6298.
2020-10-08 17:10:52 +02:00
Nikita Popov ad7e231e81 Make compression_type nullable in a few more places
Missed that this was also used elsewhere...
2020-10-08 17:05:38 +02:00
Nikita Popov c4a25da096 Update ext/soap parameter names
Closes GH-6300.
2020-10-08 16:32:01 +02:00
Derick Rethans 2180e882f3 Updated to version 2020.2 (2020b) 2020-10-08 15:19:48 +01:00
Derick Rethans 5289badb2f Empty merge 2020-10-08 15:19:48 +01:00
Derick Rethans 950157942e Updated to version 2020.2 (2020b) 2020-10-08 15:19:47 +01:00
Derick Rethans 8227a5ff45 Empty merge 2020-10-08 15:19:47 +01:00
Derick Rethans 14d231bd16 Updated to version 2020.2 (2020b) 2020-10-08 15:19:46 +01:00
Derick Rethans 088d284d9f Updated to version 2020.2 (2020b) 2020-10-08 15:05:40 +01:00
Derick Rethans 2ceef3a419 Empty merge 2020-10-08 15:05:40 +01:00
Derick Rethans c8929dc17e Updated to version 2020.2 (2020b) 2020-10-08 15:05:39 +01:00
Derick Rethans a2e7b31fac Empty merge 2020-10-08 15:05:39 +01:00
Derick Rethans 90a5d7c2ad Updated to version 2020.2 (2020b) 2020-10-08 15:05:38 +01:00
Nikita Popov 9719d6cade Make Phar $format and $compression arguments nullable
Rather than using Greg's birthday, use null to indicate that the
existing format/compression should be retained. For the format
simply using zero would be sufficient, but as the documentation
explicitly says that NULL is allowed here, we may as well make
that the truth.
2020-10-08 13:12:22 +02:00
Nikita Popov 9e32e1322e Accept bool in SoapClient::__doRequest
$one_way is a boolean argument.
2020-10-08 12:36:49 +02:00
Christoph M. Becker d3b41c4640 Fix imap test expectation which is still too strict for Windows 2020-10-08 12:33:38 +02:00
Christoph M. Becker 48736dddab Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Fix too strict imap test expectations
2020-10-08 12:11:28 +02:00
Christoph M. Becker 2e7247c558 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix too strict imap test expectations
2020-10-08 12:08:35 +02:00
Christoph M. Becker 1895bf7b94 Fix too strict imap test expectations 2020-10-08 12:06:54 +02:00
Christoph M. Becker f5afc2c3cf Fix potential mail related segfault on Windows
`rpath` may be `NULL` here, in which case we must not access its
members.
2020-10-08 11:47:18 +02:00
Christoph M. Becker 561b581947 Update ext/com_dotnet parameter names
Closes GH-6296.
2020-10-08 11:45:53 +02:00
Nikita Popov 5480e6b13d Accept bool in snmp_set_(quick|enum)_print()
The integer parameter here is actually a boolean.
snmp_set_quick_print() already documented it as such, and
snmp_get_quick_print() was already returning a boolean.
2020-10-08 11:11:51 +02:00
Nikita Popov 1fba220725 Update ext/xsl parameter names
Additionally normalize to using $namespace rather than $uri for
namespace parameters, including in XMLReader and XMLWriter. I went
with that one as it is currently used by DOM, SimpleXML and XSL --
and our DOM parameter names follow the DOM specification.

Closes GH-6295.
2020-10-08 10:28:50 +02:00
Nikita Popov c05898d6c6 Update ext/xml parameter names
Closes GH-6297.
2020-10-08 10:26:59 +02:00
Nikita Popov 74d757e3fd Update ext/dba parameter names
Closes GH-6292.
2020-10-08 09:43:10 +02:00
Dmitry Stogov 5a447b086b Change calling convention of zval_update_constant[_ex]() to fastcall. 2020-10-08 02:04:38 +03:00
Dmitry Stogov 45441b3c11 Pass arguments to cdecl functions through preallocated stack slots 2020-10-08 00:52:30 +03:00
Dmitry Stogov db7a773b1c Add more hints for register allocator 2020-10-07 20:38:52 +03:00
Christoph M. Becker c774619118 Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Fix #77040: tidyNode::isHtml() is completely broken
2020-10-07 17:50:24 +02:00
Christoph M. Becker ff3878adeb Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #77040: tidyNode::isHtml() is completely broken
2020-10-07 17:48:12 +02:00
Christoph M. Becker e68acd031d Fix #77040: tidyNode::isHtml() is completely broken
The documentation of `tidyNode::isHtml()` states that this method
"checks if a node is part of a HTML document".  That is, of course,
nonsense, since a tidyNode is "an HTML node in an HTML file, as
detected by tidy."

What this method is actually supposed to do is to check whether a node
is an element (unless it is the root element).  This has been broken by
commit d8eeb8e[1], which assumed that `enum TidyNodeType` would
represent flags of a bitmask, what it does not.

[1] <http://git.php.net/?p=php-src.git;a=commit;h=d8eeb8e28673236bca3f066ded75037a5bdf6378>

Closes GH-6290.
2020-10-07 17:43:56 +02:00
Remi Collet 91f47ee263 don't display default value for variadic 2020-10-07 16:30:18 +02:00
Dmitry Stogov fd81e708bc Fixed incorrect behavior of observer API.
ZEND_HANDLE_EXCEPTION might call zend_observer_fcall_end() even if exception is cought by function. The fix moved zend_observer_fcall_end() into a right place and remove OBSERVER sepecialization for ZEND_HANDLE_EXCEPTION handler.
2020-10-07 17:06:53 +03:00
Nikita Popov edf0c6a6ae Merge branch 'PHP-7.4'
* PHP-7.4:
  Fixed bug #80194
2020-10-07 15:03:56 +02:00
Nikita Popov 683c988493 Fixed bug #80194
We should strip NOPs from unreachable_free blocks as well, to make
sure that the free really is the first op.
2020-10-07 15:03:12 +02:00
Christoph M. Becker a74c25bca1 Fix test
The upper limit is different for 32bit and 64bit, but we are testing
the lower limit only, so can use a placeholder.
2020-10-07 14:58:43 +02:00
Dmitry Stogov 3024d9c56d Optimize out MAY_BE_LONG +/- 0 and MAY_BE_DOUBLE +/- 0.0 2020-10-07 15:23:17 +03:00
Christoph M. Becker 92d0a10150 Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Fix #80185: jdtounix() fails after 2037
2020-10-07 14:09:32 +02:00
Christoph M. Becker 9dddfbe755 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #80185: jdtounix() fails after 2037
2020-10-07 13:25:11 +02:00
Christoph M. Becker e857dfa7cc Fix #80185: jdtounix() fails after 2037
There is no such thing as the "end of the unix epoch", and if it was,
it would certainly not be 2037-10-11T02:00:00.  There is, however,
potential integer overflow which we need to avoid.

Closes GH-6288.
2020-10-07 13:23:50 +02:00
Nikita Popov 22ab18c2aa Update ext/ffi parameter names
Closes GH-6282.
2020-10-07 12:29:50 +02:00
Nikita Popov 68195bd481 Update ext/spl parameter names
Closes GH-6284.
2020-10-07 12:26:46 +02:00
Nikita Popov c96d884d91 Avoid namespaced class symbol clashes in gen_stub
Add the namespace prefix (using underscores) to both the arginfo
name and the method declaration name.
2020-10-07 12:13:52 +02:00
Nikita Popov 9c710b1d11 Support "static" type in gen_stub 2020-10-07 11:34:14 +02:00
Nikita Popov c11191e794 Update ext/tidy parameter names
Closes GH-6283.
2020-10-07 10:21:26 +02:00
Dharman 1c411edeb9 Improve parameter names in ext/sqlite3
Closes GH-6264
2020-10-06 23:02:18 +02:00
Nikita Popov ec484a0788 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix bug #80126
2020-10-06 16:34:02 +02:00
Nikita Popov 3b7c8bb973 Fix bug #80126
When performing an unlinked instanceof, we also need to consider
interfaces of parent classes, as they may not have been inherited
yet.
2020-10-06 16:33:14 +02:00
Dmitry Stogov c80662a927 Eliminate check 2020-10-06 15:50:37 +03:00
Nikita Popov fe0763c81f Make $use_less_memory a boolean parameter 2020-10-06 14:16:39 +02:00
Nikita Popov 15896d08ae Update ext/bz2 parameter names
Closes GH-6280.
2020-10-06 14:16:33 +02:00
Nikita Popov 7a1dc180a6 Update ext/pcntl parameter names
Closes GH-6278.
2020-10-06 12:45:57 +02:00
Dmitry Stogov 84e0ea6b43 Optimize out double memory load 2020-10-06 13:32:55 +03:00
Nikita Popov 79484b4f8a Update ext/sockets parameter names
Also change $max_length to $length in a number of filesystem APIs,
where our usage was inconsistent.

Closes GH-6276.
2020-10-06 12:12:43 +02:00
Nikita Popov f21b160984 Update ext/calendar parameter names
Closes GH-6277.
2020-10-06 11:26:05 +02:00
Nikita Popov dee802498e Fixed bug #80190 2020-10-06 10:20:27 +02:00
Nikita Popov d9dce839f7 Update ext/posix parameter names
Closes GH-6275.
2020-10-06 09:49:40 +02:00
Dik Takken a7856c1bae Review parameter names in ext/xmlreader
Closes GH-6255.
2020-10-06 09:47:13 +02:00
Christoph M. Becker 3eae7aa77e Don't separate array parameter
Closes GH-6243.
2020-10-05 23:11:36 +02:00
Sammy Kaye Powers a9e96a378d Expose php_during_module_startup() and php_during_module_shutdown()
This can be handy when trying to determine if it is safe to access request globals amongst other things.

Closes GH-6265
2020-10-05 14:01:43 -07:00
Dmitry Stogov 31f54586b5 Use range inference to eliminate useless comparisons 2020-10-05 22:33:45 +03:00
Dmitry Stogov 90b80c8278 Fix trace range inference 2020-10-05 22:33:18 +03:00
Christoph M. Becker 9fe5479eeb Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Fix #46050: odbc_next_result corrupts prepared resource
2020-10-05 17:48:44 +02:00
Christoph M. Becker c6e7969f05 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #46050: odbc_next_result corrupts prepared resource
2020-10-05 17:47:35 +02:00
Christoph M. Becker 69ba81d183 Fix #46050: odbc_next_result corrupts prepared resource
When resetting the result's values, we also have to reset its numcols.
2020-10-05 17:46:37 +02:00
Nikita Popov 47ef51cb45 Add @generate-legacy-arginfo tag 2020-10-05 16:33:54 +02:00
Nikita Popov 0f3698173e Update PDO parameter names
Followup to previous changes:
 * Use camel case, as PDO uses a camel case OO API.
 * Use &$var instead of &$bind_var or &$param.
 * Use $column instead of $index. We have cases (both inside PDO
   and in other DB exts) where columns can also be represented as
   strings, so $column is the safer generic name.

Closes GH-6272.
2020-10-05 15:51:36 +02:00
Remi Collet dba6715598 Improve gen_stub.php - drop --legacy option, generate file is exists - add --help option - add debug "Saved ..." message 2020-10-05 15:41:08 +02:00
Nikita Popov 6ea870f5fb Fix bug #80184 2020-10-05 15:24:51 +02:00
Máté Kocsis 4982964224 Review parameter names in ext/pspell
Closes GH-6257
2020-10-05 15:22:15 +02:00
Máté Kocsis e9c707298b Review parameter names in ext/zlib
Closes GH-6250
2020-10-05 15:20:27 +02:00
Nikita Popov faea5ab837 Throw from XmlReader::expand() if DOM extension missing
Otherwise it is hard to uphold the arginfo contract for this
function -- we cannot simply mirror the zpp call, as the class
entry it is based on does not exist.
2020-10-05 12:31:48 +02:00
Nikita Popov d3cf597328 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix -Wimplicit-function-declaration in configure
2020-10-05 10:48:04 +02:00
Nikita Popov 9ad5381a2f Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix -Wimplicit-function-declaration in configure
2020-10-05 10:46:46 +02:00
Nikita Popov aa405b7da2 Fix -Wimplicit-function-declaration in configure
As this is an error with xcode 12, see bug #80171.
2020-10-05 10:43:58 +02:00
Remi Collet 107962208a add note about is_callable change 2020-10-03 07:27:08 +02:00
Christoph M. Becker 54435c9b43 Fix #64060: lstat_stat_variation7.phpt fails on certain file systems
Closes GH-6194.
2020-10-02 18:54:10 +02:00
Nikita Popov 2d234d111a Declare FFI\CType in namespace
Now that it is supported, declare that CType is part of the FFI
namespace, not a freestanding class.
2020-10-02 17:54:34 +02:00
George Peter Banyard e0b17ba219 Use a subrountine to check for valid OID strings
Closes 6260
2020-10-02 16:32:06 +01:00
Nikita Popov dfa6d1c22e Support specifying linkage for generate-function-entries
The linkage can be specified as the argument to the
@generate-function-entries tag. Test this on zend_test.
2020-10-02 17:21:16 +02:00
Nikita Popov 924ac2b98a Add partial namespace support to gen_stub 2020-10-02 17:08:50 +02:00
Nikita Popov 2e32a09541 Add gen_stub --legacy flag
This flag generates an arginfo file that discards all type and
default value information. As such, it is compatible with old
(and very old) PHP versions.

Intended for use by extensions to generate one arginfo file for
PHP 8 and one for older versions.
2020-10-02 15:14:02 +02:00
Christoph M. Becker c137f4b6e4 Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Fix out-of-bounds write
2020-10-02 15:10:19 +02:00
Christoph M. Becker c00816a38f Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix out-of-bounds write
2020-10-02 15:04:38 +02:00
K.Kosako bf6873a18e Fix out-of-bounds write
Fixes CVE-2020-26159.

Backported from <https://github.com/kkos/oniguruma/commit/cbe9f8bd9cfc6c3c87a60fbae58fa1a85db59df0>.
2020-10-02 15:02:35 +02:00
Máté Kocsis c9c7820f74 Review parameter names in ext/ftp
Closes GH-6254
2020-10-02 14:26:39 +02:00
Nikita Popov ae77c7b057 Return correct result code for division by zero
Turns out we do need to return FAILURE here on div by zero
exception. Use a three-way return value from div_function_base.

Fixes oss-fuzz #25975.
2020-10-02 12:09:14 +02:00
Máté Kocsis 4f42519571 Review parameter names in ext/exif
Closes GH-6256
2020-10-02 11:56:16 +02:00
Máté Kocsis 811f6dd8e5 Review parameter names in ext/enchant
Closes GH-6258
2020-10-02 11:55:46 +02:00
Máté Kocsis 6b00196e04 Review parameter names in ext/pcre
Closes GH-6259
2020-10-02 11:55:23 +02:00
Dmitry Stogov 109fb3e57d Copy optimization for (BINARY_OP/ACCIGN + SEND_VAL) 2020-10-02 12:06:02 +03:00
Dmitry Stogov b0e77066bd Fixed JIT for BINARY_OP with expected overflow 2020-10-02 11:01:35 +03:00
Dmitry Stogov fbf153a210 Fixed possible incorrect register usage 2020-10-02 10:48:45 +03:00
Nikita Popov d7243ce291 Add UPGRADING note for substr() behavior
[ci skip]
2020-10-02 09:41:05 +02:00
Matteo Beccati 902f63486e Merge branch 'PHP-7.4'
* PHP-7.4:
  [ci skip] moved soap fix to 7.4.11
  [ci skip] moved soap fix to 7.3.23
2020-10-02 09:34:32 +02:00
Matteo Beccati 7c48479f62 [ci skip] moved soap fix to 7.4.11
When committing I didn't notice that version had been just bumped
2020-10-02 09:33:50 +02:00
Matteo Beccati 233b66c3d2 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  [ci skip] moved soap fix to 7.3.23
2020-10-02 09:33:20 +02:00
Matteo Beccati 1666cfcca0 [ci skip] moved soap fix to 7.3.23
When committing I didn't notice that version had been just bumped
2020-10-02 09:32:52 +02:00
Máté Kocsis 4a30c76845 Review parameter names in ext/sysvshm
Closes GH-6249
2020-10-01 23:09:56 +02:00
Máté Kocsis 85949d749b Review parameter names in ext/sysvsem
Closes GH-6248
2020-10-01 23:09:31 +02:00
Máté Kocsis ceef8ad490 Review parameter names in ext/sysvmsg
Closes GH-6247
2020-10-01 23:08:20 +02:00
Dmitry Stogov 29dd1240f3 Clenup BINARY_OP + SEND_VAL optimization 2020-10-01 22:39:58 +03:00
Nikita Popov 62c6d6952e Add test instantiating all objects
Intended to find issues in opaque object destructors.

Closes GH-6251.
2020-10-01 18:37:24 +02:00
Nikita Popov d96219c185 Fixed bug #80121
The issue affected both CurlHandle and CurlMultiHandle. I'll have
to double check this for other resource->object conversions as well.
2020-10-01 17:05:23 +02:00
Nikita Popov f82414e935 Fix out of bounds offset handling with empty needle
For strrpos with positive out of bounds offsets was not detected.
2020-10-01 16:41:51 +02:00
Christian Schneider 7af24eaedd Allow empty needle in grapheme_str*pos, grapheme_str*str
For consistency with str* and mb_str* functions.

Closes GH-6245.
Closes php/php-tasks#20.
2020-10-01 16:33:58 +02:00
Nikita Popov 2c1b5c4365 Support GC for AppendIterator
This also requires adding GC support for ArrayIterator internal
iterators.
2020-10-01 16:18:23 +02:00
Nikita Popov afab9eb48c Fix bug #65387
Add GC support to dual_it. This is still missing AppendIterator
support.
2020-10-01 16:12:56 +02:00
Dik Takken 0a84fba0de Improve parameter names in ext/xmlwriter
Closes GH-6202.
2020-10-01 14:15:27 +02:00
Dmitry Stogov 4f261a029b Merge branch 'PHP-7.4'
* PHP-7.4:
  Backport of a partial fix for bug Bug #76982 (memory leak declaring closure in included file).
2020-10-01 13:19:40 +03:00
Dmitry Stogov 59f497afac Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Backport of a partial fix for bug Bug #76982 (memory leak declaring closure in included file).
2020-10-01 13:19:27 +03:00
Dmitry Stogov 773f980e00 Backport of a partial fix for bug Bug #76982 (memory leak declaring closure in included file). 2020-10-01 13:18:21 +03:00
Côme Chilliet 550a4f2fa8 Remove deprecated functions from php-ldap
Remove ldap_control_paged_result and ldap_control_paged_result_response
 which have been deprecated in PHP 7.4, in favor of new $controls
 parameters for ldap request functions.
2020-10-01 10:15:27 +02:00
Máté Kocsis 9fbffe4470 Review parameter names in ext/gettext
Closes GH-6241
2020-09-30 23:01:56 +02:00
Máté Kocsis 01b239b602 Review parameter names in ext/shmop
Closes GH-6238
2020-09-30 21:07:25 +02:00
Máté Kocsis efe6006ced Review parameter names in ext/session
Closes GH-6239
2020-09-30 13:21:17 +02:00
Dmitry Stogov aecb05f5e7 Give preference to ENTER->RECURSIVE_CALL trace over ENTER->RETURN 2020-09-30 12:21:15 +03:00
Máté Kocsis 26af806828 Review parameter names in ext/readline
Closes GH-6240
2020-09-30 10:10:28 +02:00
Máté Kocsis fe64d73979 Review parameter names in ext/opcache
Closes GH-6237
2020-09-30 10:10:27 +02:00
Máté Kocsis 9fbb411e52 Review parameter names in ext/json
Closes GH-6236
2020-09-30 10:10:27 +02:00
Dmitry Stogov 7299af0059 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fixed hex char parsing
2020-09-30 11:00:50 +03:00
Dmitry Stogov 583093844e Fixed hex char parsing 2020-09-30 11:00:25 +03:00
Remi Collet 70a3b330be Merge branch 'PHP-7.4'
* PHP-7.4:
2020-09-30 07:42:58 +02:00
Remi Collet fd4b072991 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  bump version to 7.2.35-dev
2020-09-30 07:42:28 +02:00
Remi Collet 5733f11ee9 Merge branch 'PHP-7.2' into PHP-7.3
* PHP-7.2:
  bump version to 7.2.35-dev
2020-09-30 07:42:14 +02:00
Remi Collet c55503271e Merge branch 'PHP-7.4'
* PHP-7.4:
  bump version to 7.2.35-dev
2020-09-30 07:38:16 +02:00
Remi Collet 4a0d05b6e4 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  bump version to 7.2.35-dev
2020-09-30 07:37:59 +02:00
Dmitry Stogov 5f24999237 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fixed incorrect error message
2020-09-30 08:37:43 +03:00
Remi Collet c1384dfb62 Merge branch 'PHP-7.2' into PHP-7.3
* PHP-7.2:
  bump version to 7.2.35-dev
2020-09-30 07:37:41 +02:00
Dmitry Stogov 2a0e4b88fd Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fixed incorrect error message
2020-09-30 08:37:35 +03:00
George Peter Banyard 1616363850 Fixed incorrect error message 2020-09-30 08:37:16 +03:00
Remi Collet 662083fc4f bump version to 7.2.35-dev 2020-09-30 07:36:59 +02:00
Dmitry Stogov b94fd3a3b6 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fixed incorrect logical condition
2020-09-30 08:29:37 +03:00
Dmitry Stogov 6f0b232648 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fixed incorrect logical condition
2020-09-30 08:29:21 +03:00
George Peter Banyard 3f5c47af3b Fixed incorrect logical condition 2020-09-30 08:29:00 +03:00
Dmitry Stogov 41ae63cf87 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fixed incorrect logical conditions
2020-09-30 08:22:35 +03:00
George Peter Banyard a1cee97de1 Fixed incorrect logical conditions 2020-09-30 08:21:46 +03:00
George Peter Banyard 8d0b871bde Removed duplicate conditions 2020-09-30 08:15:04 +03:00
Christoph M. Becker 07fa13088e Revert "Use external iterator instead of via the internal pointer"
This reverts commit a6ecafece9.

Closes GH-6242.
2020-09-30 01:23:16 +02:00
Gabriel Caruso c907413567 Update NEWS for 8.0.0rc2 2020-09-29 22:43:11 +00:00
Gabriel Caruso 6d2fe9f17f Update NEWS for PHP 8.0.0rc1 2020-09-29 22:32:14 +00:00
Gabriel Caruso 0574c21b50 Prepare for PHP 8.0 RC1 2020-09-30 00:19:10 +02:00
Stanislav Malyshev 6795cfd98a Merge branch 'PHP-7.4'
* PHP-7.4:
  [ci skip] Add 7.4.11 security fixes to NEWS
  [ci skip] Add 7.3.23 security fixes to NEWS
2020-09-29 10:14:40 -07:00
Stanislav Malyshev f20a2b4f3c [ci skip] Add 7.4.11 security fixes to NEWS 2020-09-29 10:13:38 -07:00
Stanislav Malyshev 5c8b02fdd6 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  [ci skip] Add 7.3.23 security fixes to NEWS
2020-09-29 10:11:52 -07:00
Stanislav Malyshev ae95d06f68 [ci skip] Add 7.3.23 security fixes to NEWS 2020-09-29 10:09:33 -07:00
Christoph M. Becker a1ee3c74d1 Fix recently introduced off-by-one error 2020-09-29 18:46:07 +02:00
Nikita Popov a4331a67f4 Update iconv parameter names
And rename charset to encoding, including inside error messages.

Closes GH-6234.
2020-09-29 18:11:07 +02:00
Dik Takken 6dac6a996e Warning promotion: Throw on writing invalid XML tag names
This change throws a ValueError when an invalid tag name is passed
to XMLWriter.

The rationale is that this indicates a programming error because
tag names typically originate from string literals or application
code generating them. This translates into either a typo or a flaw
in tag generation logic.

Closes GH-6233.
2020-09-29 16:52:47 +02:00
Nikita Popov 25f1c405ff Update ext/standard parameter names
Closes GH-6214.
2020-09-29 16:49:46 +02:00
Côme Chilliet 1945355435 Improve parameter names in ext/ldap
Merging PR 6153
2020-09-29 16:31:08 +02:00
MCMicandNikita Popov 3b3445f783 Harmonize ldap_rename_ext with ldap_rename parameter names
Co-authored-by: Nikita Popov <nikita.ppv@googlemail.com>
2020-09-29 16:31:08 +02:00
Côme Chilliet 1d3787ee94 Rename $link parameters to $ldap in ldap functions
Also fixed ldap_set_option places where $newvalue was still used
2020-09-29 16:31:08 +02:00
MCMicandNikita Popov 29e1a9717d Improve parameter naming in ldap_rename
Co-authored-by: Nikita Popov <nikita.ppv@googlemail.com>
2020-09-29 16:31:08 +02:00
MCMicandNikita Popov 462c94447e Improve parameter naming in ldap_exop_passwd
Co-authored-by: Nikita Popov <nikita.ppv@googlemail.com>
2020-09-29 16:31:08 +02:00
MCMicandNikita Popov 27fe37e394 Improve parameter naming in ldap_connect
Co-authored-by: Nikita Popov <nikita.ppv@googlemail.com>
2020-09-29 16:31:08 +02:00
MCMicandNikita Popov febd33cf7e Improve parameter naming in ldap_set_option ext/ldap/ldap.stub.php
Co-authored-by: Nikita Popov <nikita.ppv@googlemail.com>
2020-09-29 16:31:07 +02:00
Côme Chilliet fa1f86f11c Explicitely mark nullable strings 2020-09-29 16:31:07 +02:00
MCMicandNikita Popov a835eee2cf Fix parameter mask in ldap_next_attribute
Co-authored-by: Nikita Popov <nikita.ppv@googlemail.com>
2020-09-29 16:31:07 +02:00
Côme Chilliet c2a6da5ab2 Fix parameter names in ext/ldap
Renamed all parameters to be consistent and concise
2020-09-29 16:31:07 +02:00
Côme Chilliet 2a34d35a66 Fix "null" case in ldap.stub.php 2020-09-29 16:31:07 +02:00
Côme Chilliet eeec37d31d Remove dummy_ber parameter from ldap_first_attribute and ldap_next_attribute
It has been unused and deprecated since PHP 5.2.4
2020-09-29 16:31:07 +02:00
Côme Chilliet caa0cd7705 Set all parameters to ldap_sasl_bind as NULL by default
For mech, realm, authcid, authzid and props NULL means do not change
 current server setting.
2020-09-29 16:31:07 +02:00
Côme Chilliet 74b634751b Default bind dn and password to NULL in ldap_bind_ext 2020-09-29 16:31:07 +02:00
Côme Chilliet 14385fb203 Default bind dn and password to NULL in ldap_bind 2020-09-29 16:31:07 +02:00
Côme Chilliet 6b77252f18 Make URI parameter in ldap_connect default to NULL 2020-09-29 16:31:07 +02:00
Remi Collet e39ce172f8 bump zip extension version 2020-09-29 16:17:23 +02:00
George Peter Banyard 053a5fc141 Promote E_NOTICE to Value/TypeError in PostgreSQL extension
Add some tests to cover related codepaths.
With the small caveat that the ones in build_assignment_string()
still don't seem to be tested as it looks the condtions are checked
beforehand, might need some more investigation.

Closes GH-6226
2020-09-29 15:13:01 +01:00
Nikita Popov 5dd5569b89 Update ext/tokenizer param names
Closes GH-6232.
2020-09-29 16:11:08 +02:00
Dmitry Stogov b44cf93774 Allow tracing JIT cooperate with function JIT. 2020-09-29 16:33:32 +03:00
Dik Takken f3c58a5ed6 Make handling of NULL bytes in file paths more consistent (WIP)
Not all extensions consistently throw exceptions when the user passes
a path name containing null bytes. Also, some extensions would throw
a ValueError while others would throw a TypeError. Error messages
also varied.

Now a ValueError is thrown after all failed path checks, at least for
as far as these occur in functions that are exposed to userland.

Closes GH-6216.
2020-09-29 14:55:10 +02:00
Nikita Popov 59aa21c735 Don't accept dir handle in Directory methods
This is an artifact of the shared implementation with readdir() etc.
The method versions should not accept an explicit dir handle, as
they work on the dir handle from the object.
2020-09-29 14:50:40 +02:00
Dmitry Stogov 739eb435c2 Tracing JIT support for preloaded scripts 2020-09-29 15:07:45 +03:00
Nikita Popov 82f0d3c181 Remove unused variable 2020-09-29 12:35:39 +02:00
Nikita Popov 2519827732 Update gmp+bcmath parameter names
Closes GH-6205.
2020-09-29 12:34:16 +02:00
Christoph M. Becker a88107d0ba Merge branch 'PHP-7.4' into master
* PHP-7.4:
  [ci skip] Fix version
2020-09-29 12:16:30 +02:00
Christoph M. Becker 2bceb4bedc Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  [ci skip] Fix version
2020-09-29 12:12:21 +02:00
Christoph M. Becker b5cb999e7f [ci skip] Fix version 2020-09-29 12:10:51 +02:00
Dmitry Stogov dddb40313b Keep track information about used JIT trigger in ZEND_FUNC_INFO(op_array)->func_info.flags 2020-09-29 13:05:24 +03:00
Christoph M. Becker a6ecafece9 Use external iterator instead of via the internal pointer 2020-09-29 11:41:17 +02:00
Christoph M. Becker a0051be42a Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Fix #80152: odbc_execute() moves internal pointer of $params
2020-09-29 11:36:54 +02:00
Christoph M. Becker b87e43d931 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #80152: odbc_execute() moves internal pointer of $params
2020-09-29 11:35:41 +02:00
Christoph M. Becker bf5f07cc8b Fix #80152: odbc_execute() moves internal pointer of $params
As least intrusive fix, we separate the passed array argument.

Closes GH-6219.
2020-09-29 11:34:48 +02:00
Christoph M. Becker 47a166c837 Fix #78792: zlib.output_compression disabled by Content-Type: image/
Disabling output compression for images has served to fix bug #16109,
where zlib compressed images apparently have caused issues with
Navigator 4.  This shouldn't be an issue with somewhat contemporary
browsers.  Other than that, this is an arbitrary restriction – why
don't we disable the compression for some other media types as well
(e.g. video/* and audio/*)?  All in all, we should leave that decision
to userland.

Closes GH-6198.
2020-09-29 11:30:06 +02:00
Christoph M. Becker 9f5a77188c Fix #22986: odbc_connect() may reuse persistent connection
`odbc_connect()` should not reuse persistent connections, since that
prohibits multiple concurrent connections, which are occasionally
desireable.  We fix that by no longer looking for already cached
connections when `odbc_connect()` is called, and instead creating a new
connection instead.

Closes GH-6223.
2020-09-29 11:20:41 +02:00
Dmitry Stogov 8d9da8df28 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fixed unintended disabling of Optimizer for preloaded scripts introduced by 4a2646cf45
2020-09-29 12:13:17 +03:00
Dmitry Stogov 3928b6b435 Fixed unintended disabling of Optimizer for preloaded scripts introduced by 4a2646cf45 2020-09-29 12:11:01 +03:00
Christoph M. Becker 5f5eba1d7a Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Fix #80150: Failure to fetch error message
2020-09-29 11:05:31 +02:00
Máté Kocsis 351776eae5 Make the $filter parameter of ReflectionClass::get*Constants() nullable 2020-09-29 11:04:10 +02:00
Máté Kocsis e19599287e Reflection param renames amendment
Closes GH-6230
2020-09-29 11:04:10 +02:00
Christoph M. Becker e08f69194c Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #80150: Failure to fetch error message
2020-09-29 11:04:09 +02:00
Máté Kocsis 0ec6452024 Rename a few parameters in ext/filter
Closes GH-6229
2020-09-29 11:04:09 +02:00
Máté Kocsis 7aa2d3519b Zend parameter renames amendment
Closes GH-6228
2020-09-29 11:04:09 +02:00
Christoph M. Becker df5efa2fcd Fix #80150: Failure to fetch error message
In case of statement related errors, we need to pass the respective
statement handle to `SQLError()`.

Closes GH-6217.
2020-09-29 11:02:51 +02:00
Nikita Popov de2d38d531 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix bug #80137
  Fix bug #80138
2020-09-29 10:59:46 +02:00
Nikita Popov 1fafcd2b28 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix bug #80137
  Fix bug #80138
2020-09-29 10:59:32 +02:00
Matthias Karbe f5afd0a827 Fix bug #80137
Skip getprotobyname() and getprotobynumber() tests on *nix if there
is no /etc/protocols file.

Closes GH-6193.
2020-09-29 10:58:00 +02:00
Matthias Karbe 2899137391 Fix bug #80138
Skip getservbyname() and getservbyport() tests on *nix if there is
no /etc/services file.

Closes GH-6191.
2020-09-29 10:57:20 +02:00
Nikita Popov 45b0716733 Merge branch 'PHP-7.4'
* PHP-7.4:
  Synchronize php.ini-development and php.ini-production
2020-09-29 10:48:29 +02:00
Giovanni Giacobbi 205556c191 Synchronize php.ini-development and php.ini-production
Closes GH-6231.
2020-09-29 10:47:09 +02:00
zeriyoshi 060fde4377 Add call_user_func_array() backward incompatible change
Closes GH-6218.

[ci skip]
2020-09-29 10:44:57 +02:00
Remi Collet e1e25532b6 Merge branch 'PHP-7.4'
* PHP-7.4:
  [ci skip] typo
  Do not decode cookie names anymore
  Fix bug #79601 (Wrong ciphertext/tag in AES-CCM encryption for a 12 bytes IV)
2020-09-29 08:52:09 +02:00
Remi Collet e5b045e6b6 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  [ci skip] typo
  Do not decode cookie names anymore
  Fix bug #79601 (Wrong ciphertext/tag in AES-CCM encryption for a 12 bytes IV)
2020-09-29 08:51:03 +02:00
Remi Collet 035ad0aed5 Merge branch 'PHP-7.2' into PHP-7.3
* PHP-7.2:
  [ci skip] typo
  Update NEWS & UPGRADING
  Do not decode cookie names anymore
  Fix bug #79601 (Wrong ciphertext/tag in AES-CCM encryption for a 12 bytes IV)
2020-09-29 08:50:14 +02:00
Remi Collet af500b8685 [ci skip] typo 2020-09-29 08:49:56 +02:00
Stanislav Malyshev e14f835d8c Merge branch 'PHP-7.4'
* PHP-7.4:
  Update UPGRADING
  Update UPGRADING
  Update NEWS & UPGRADING
  Do not decode cookie names anymore
  Fix bug #79601 (Wrong ciphertext/tag in AES-CCM encryption for a 12 bytes IV)
2020-09-28 22:55:37 -07:00
Stanislav Malyshev c4dc080245 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Update UPGRADING
  Update NEWS & UPGRADING
  Do not decode cookie names anymore
  Fix bug #79601 (Wrong ciphertext/tag in AES-CCM encryption for a 12 bytes IV)
2020-09-28 22:54:57 -07:00
Stanislav Malyshev 95e1a415a5 Do not decode cookie names anymore 2020-09-28 21:43:11 -07:00
Stanislav Malyshev 2f5cb702ff Fix bug #79601 (Wrong ciphertext/tag in AES-CCM encryption for a 12 bytes IV) 2020-09-28 21:43:11 -07:00
Stanislav Malyshev a9e4321846 Merge branch 'PHP-7.2' into PHP-7.3
* PHP-7.2:
  Update NEWS & UPGRADING
  Do not decode cookie names anymore
  Fix bug #79601 (Wrong ciphertext/tag in AES-CCM encryption for a 12 bytes IV)
2020-09-28 21:39:34 -07:00
Stanislav Malyshev 626705fb9d Update UPGRADING 2020-09-28 21:39:20 -07:00
Stanislav Malyshev 311922ddbe Update UPGRADING 2020-09-28 21:38:58 -07:00
Stanislav Malyshev 7bc112a142 Update NEWS & UPGRADING 2020-09-28 21:38:43 -07:00
Larry Garfield ea03cbebbc Update PDO parameters for named arguments.
Closes GH-6220
2020-09-28 23:02:05 +01:00
Christoph M. Becker 99b3631e9a Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Fix #67465: NULL Pointer dereference in odbc_handle_preparer
2020-09-28 22:59:51 +02:00
Christoph M. Becker f1d8395c77 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #67465: NULL Pointer dereference in odbc_handle_preparer
2020-09-28 22:58:16 +02:00
Christoph M. Becker 6acfb79276 Fix #67465: NULL Pointer dereference in odbc_handle_preparer
We have to initialize `stmt->driver_data` before we use it.

Closes GH-6225.
2020-09-28 22:57:01 +02:00
Dmitry Stogov f722512c4a Move invariant type guard out of loop 2020-09-28 23:54:28 +03:00
George Peter Banyard 7553c696c3 Another pass making some failure states unconditional erros in PDO
Also make internal function return type more accurate to inform usage
2020-09-28 19:35:31 +01:00
George Peter Banyard a5cf82802d Make various failure conditions in PDO unconditional errors
This includes TypeErrors, ValueErrors, Error for uninitialized objects
and invalid user classes/callable instanciation

Closes GH-6212
2020-09-28 18:51:36 +01:00
George Peter Banyard 24e2ba26b4 Do not register quoter handler in ODBC
This functionallity is not (yet) implemented and therefore gives a bogus error while using PDO
2020-09-28 18:51:35 +01:00
George Peter Banyard 9fab1b90ab Drop ZPP check in PDO MySQLi test
This test is marked as XFAIL so it doesn't get looked at.

It checks that the method is called without arguments which is a ZPP concern
2020-09-28 18:51:35 +01:00
Dmitry Stogov c3206c28d7 Dump class names 2020-09-28 20:29:46 +03:00
George Peter Banyard 189751cbeb Promote notice to ValueError for invalid hint key 2020-09-28 16:24:04 +01:00
Dmitry Stogov 2a71cb3ce1 Improved trace selection rules 2020-09-28 17:04:34 +03:00
Nikita Popov 2f601d84cd Promote warnings in ext/xsl 2020-09-28 16:02:31 +02:00
Nikita Popov 1efbc2cf58 Remove unused XSL_DOMOBJ_NEW() macro
And inline the XSL_REGISTER_CLASS() macro.
2020-09-28 15:42:51 +02:00
Dmitry Stogov d1ddccdc19 Fixed usage of invalid frame for exit point 2020-09-28 16:18:06 +03:00
Nikita Popov 42168304b5 Consistently handle out of bounds offsets in iconv_strpos()
Same as in all other strpos() style functions, throw ValueError on
out of bounds offset.
2020-09-28 14:24:38 +02:00
George Peter Banyard 07a2f30417 Extensions should have the final say on their compiler flags
Currently compiler flags passed by extensions using the standard
``PHP_NEW_EXTENSION`` and ``PHP_ADD_SOURCES`` m4 macros are prepended
before the ones defined by ``Zend/Zend.m4``.

This was not really an issue before as ``Zend.m4`` only included
``-Wall`` but since the addition of ``-Wextra`` various issue about
disabling flags have been brought up.

A preliminary attempt was done in commit 5c1cf7669b
but this turns out to be more or less irrelevant.

The root issue is that  ``PHP_NEW_EXTENSION`` and ``PHP_ADD_SOURCES`` call the
``PHP_ADD_SOURCES_X`` macro and pass their flags as the 3rd argument which prepends
the flags. There exists a 6th argument for this macro which appends them but from a
cursory look at https://heap.space/search?full=PHP_ADD_SOURCES_X&project=php-src
this is not used. Moreover, the comment describing this macro explicitly informs
that this macro should not be used directly.

As such we drop the 6th argument of ``PHP_ADD_SOURCES_X`` and move the `special-flags`
argument to be appended instead of prepended.

Closes GH-6204
2020-09-28 13:18:47 +01:00
Nikita Popov 978a44c9c6 Simplify iconv_strpos implementation
Use a separate "reverse" flag to determine search direction,
using offset == -1 to indicate this is is confusing. I initially
thought the code was trying to handle negative offsets.

Also deduplicate the forward and reverse cases, they really only differ
in one place.
2020-09-28 14:17:49 +02:00
Dmitry Stogov 6dd840182e Missed opline guard 2020-09-28 14:47:45 +03:00
Nikita Popov 9e3f352691 Throw warning for invalid iconv charset 2020-09-28 12:51:25 +02:00
Nikita Popov 0a573f9e1c Skip one more imap test under asan
Wondering if the error just moves to a different test each time
we skip one?
2020-09-28 09:54:44 +02:00
Nikita Popov cafceea742 Update mbstring parameter names
Closes GH-6207.
2020-09-28 09:51:58 +02:00
Matteo Beccati d411ea26f1 Fixed test for MySQL < 5.6
Refs GH-6172.
2020-09-28 08:52:21 +02:00
Nikita Popov 8138ed73d7 Make mysqli_warning constructor private
The constructor was already effectively inaccessible (protected
on a final class). This just makes it more obvious and removes
the implementation in favor of directly throwing.

Per the removed test, this was an unfinished feature, and I don't
think it makes a lot of sense to finish it -- the
mysqli_stmt::get_warnings() interface makes more sense than
direct construction.

Closes GH-6208.
2020-09-27 22:08:24 +02:00
Larry Garfield 02dc9ce6e5 Rename mysqli parameters to be more logical
Closes GH-6172.
2020-09-27 21:28:29 +02:00
Levi Morrison 3b34d74a45 Clean up spl_fixedarray.c
Remove inline.
Remove old folding blocks.
Convert an int usage to bool.

Convert some uses of int and size_t into zend_long. This is
incomplete because get_gc requires `int *n`, which should probably
become zend_long or size_t eventually.

Adds spl_fixedarray_empty to help enforce invariants.
Adds spl_fixedarray_default_ctor.
Documents some functions.

Reworks spl_fixedarray_copy into two functions:
  - spl_fixedarray_copy_ctor
  - spl_fixedarray_copy_range

I'm hoping to eventually export SplFixedArray for extensions to
use directly, which is the motivation here.
2020-09-27 12:25:02 -06:00
Nikita Popov 36ed9966ce Allow attributes to be applied to property/constant groups
Remove arbitrary restriction that attributes cannot be applied
to property/constant groups.

The attribute applies to all elements of the group, just like
modifiers and types do.

See also https://externals.io/message/111914.

Closes GH-6186.
2020-09-27 11:35:48 +02:00
Nikita Popov 2772751b58 Make constexpr compilation robust against multiple compilation
Instead of setting the old AST type to zero, replace the AST with
the compiled constexpr AST zval. This requires passing in a
zend_ast** instead of a zend_ast*.

This allows compiling ASTs containing constexprs multiple times
-- the second time, the existing compiled representation will be
resused.

This means we no longer need to copy the attributes AST for
promoted properties.
2020-09-27 11:24:22 +02:00
Nikita Popov 5686c16db4 Honor strict_types=1 for attributes, improve backtraces
Make ReflectionAttribute::newInstance() respect the strict_types=1
declaration at the attribute use-site. More generally, pretend that
we are calling the attribute constructor from the place where the
attribute is used, which also means that the attribute location will
show up properly in backtraces and inside "called in" error information.

This requires us to store the attributes strict_types scope (as flags),
as well as the attribute line number. The attribute filename can be
recovered from the symbol it is used on. We might want to expose the
attribute line number via reflection as well.

See also https://externals.io/message/111915.

Closes GH-6201.
2020-09-27 10:42:58 +02:00
Stanislav Malyshev 6559fe9126 Do not decode cookie names anymore 2020-09-26 23:47:04 -07:00
Stanislav Malyshev 0216630ea2 Fix bug #79601 (Wrong ciphertext/tag in AES-CCM encryption for a 12 bytes IV) 2020-09-26 23:46:53 -07:00
Matteo Beccati 43ce7846d2 Skip test with ICU version < 58 2020-09-26 10:47:56 +02:00
Sammy Kaye Powers e42abeafec Pass zend_execute_data instead of zend_function to fcall init
The motivation for this change is to prevent extensions from having to check executor globals for the current execute_data during function call init. A previous implementation of the observer API initialized the function call from runtime cache initialization before execute_data was allocated which is why zend_function was passed in.

But now that the observer API is implemented via opcode specialization, it makes sense to pass in the execute_data. This also keeps the API a bit more consistent for existing extensions that already hook zend_execute_ex.

Closes GH-6209
2020-09-25 11:46:15 -07:00
George Peter Banyard a91cb2f48c Promote warning to ValueError for Spoofchecker::setRestrictionLevel()
Closes GH-6197
2020-09-25 17:55:31 +01:00
George Peter Banyard 3c10d4d9a9 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix logic error in PDO
2020-09-25 16:35:50 +01:00
George Peter Banyard ef385e806f Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix logic error in PDO
2020-09-25 16:32:41 +01:00
George Peter Banyard 4dfbf07644 Fix logic error in PDO 2020-09-25 16:28:48 +01:00
George Peter Banyard 0cc7267980 Inverse logic in do_fetch() to reduce a level of indentation 2020-09-25 14:19:49 +01:00
George Peter Banyard 411610892a Drop do_bind argument in do_fetch(_common)() in PDO
It is always set to true by callers and therefore irrelevant.
2020-09-25 14:19:26 +01:00
Nikita Popov 8067cf4752 Use callable type in register_shutdown_function()
To make things a bit less weird, split off the function name into
a zval stored separately from the arguments. This allows us to
use normal zpp and get standard behavior.
2020-09-25 14:48:33 +02:00
Christoph M. Becker 3d148804cc Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Fix #80147: BINARY strings may not be properly zero-terminated
2020-09-25 13:53:19 +02:00
Christoph M. Becker 1086e4ec88 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #80147: BINARY strings may not be properly zero-terminated
2020-09-25 13:52:08 +02:00
Christoph M. Becker a49555a9e1 Fix #80147: BINARY strings may not be properly zero-terminated
We have to manually ensure that all strings fetched from a data source
are zero-terminated.

Closes GH-6213.
2020-09-25 13:51:18 +02:00
Christoph M. Becker 439878c8f9 Rename $qualifier/$owner params to $catalog/$schema
These have been called qualifier and owner with ODBC 2, but ODBC 3
changed that to catalog and schema, respectively.

Closes GH-6210.
2020-09-25 13:46:23 +02:00
Nikita Popov 43ce18f837 Add proper count() parameter type
We can make this Countable|array now.
2020-09-25 12:31:05 +02:00
Máté Kocsis 41b096b392 Promote a few forgotten warnings to exceptions
Closes GH-6211
2020-09-25 12:08:15 +02:00
Máté Kocsis 166178ae6d Update ext/odbc stub hash 2020-09-25 11:19:50 +02:00
Máté Kocsis f6024a9054 Improve parameter names in ext/curl
Closes GH-6155
2020-09-25 11:17:06 +02:00
Nikita Popov 56fb6864c6 Unify 32-bit/64-bit str_split tests
The 32-bit tests work on both 32-bit and 64-bit. I dropped the
64-bit variants as they only test one additional case that I don't
think adds particular value.
2020-09-25 10:03:41 +02:00
Nikita Popov 13b791c79c Normalize substr() behavior
Make the behavior of substr(), mb_substr(), iconv_substr() and
grapheme_substr() consistent when it comes to the handling of
out of bounds offsets. substr() will now always clamp out of
bounds offsets to the string boundary. Cases that previously
returned false will now return an empty string. This means that
substr() itself *always* returns a string now (like mb_substr()
already did before.)

Closes GH-6182.
2020-09-25 09:58:21 +02:00
Simonov Denis 17a789e27c Fix #64937: Firebird PDO preprocessing sql
This patch fixes some problems with preprocessing SQL queries.

* The new algorithm takes into account single-line and multi-line
  comments and ignores the ":" and "?" Parameter markers in them.

* The algorithm allows the EXECUTE BLOCK statement to be processed
  correctly. For this statement, it is necessary to search for
  parameter markers between EXECUTE BLOCK and AS, the rest should be
  left as is.

The SQL preprocessing code has been ported from Firebird to handle
EXECUTE STATEMENT.

Closes GH-4920.
2020-09-25 00:07:57 +02:00
Christoph M. Becker 3277cb6941 Remove outdated link to bug report
That bug has been fixed, so no need to keep that link any longer.
2020-09-24 23:21:50 +02:00
Máté Kocsis 9b50fd2626 Fix UNKNOWN default values in ext/odbc
Closes GH-6154
2020-09-24 22:17:04 +02:00
Máté Kocsis 9d9bcc2b7c Improve parameter names in ext/hash and ext/openssl
Closes GH-6156
2020-09-24 22:15:30 +02:00
Nikita Popov 25b9ba87b2 Update fileinfo parameter names
Closes GH-6206.
2020-09-24 18:36:36 +02:00
Christoph M. Becker 553072b0be Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Use proper skipif section
2020-09-24 17:14:22 +02:00
Christoph M. Becker 54cbee526a Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Use proper skipif section
2020-09-24 17:13:01 +02:00
Christoph M. Becker e74f89d95a Use proper skipif section
The ODBC tests have to be skipped if no connection to the server can be
established.
2020-09-24 17:12:18 +02:00
Nikita Popov ae86edefe7 Skip imap_lsub_basic.phpt under asan
LeakSanitizer fails on Azure with:

> Tracer caught signal 11: addr=0x0 pc=0x7f86cde7c8b0 sp=0x7f86c46bcce0
2020-09-24 17:03:53 +02:00
Nikita Popov 9428e161a8 Add option to print parameter name stats to gen_stub 2020-09-24 15:16:29 +02:00
Christoph M. Becker 555e7eccc4 Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Fix #78470: odbc_specialcolumns() no longer accepts $nullable
2020-09-24 12:23:37 +02:00
Christoph M. Becker 901d022001 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #78470: odbc_specialcolumns() no longer accepts $nullable
2020-09-24 12:16:54 +02:00
Christoph M. Becker 610e7d2c77 Fix #78470: odbc_specialcolumns() no longer accepts $nullable
It is mandatory to pass either `SQL_NO_NULLS` or `SQL_NULLABLE` as
tenth parameter to `SQLSpecialColumns()`; otherwise the function call
fails.  Therefore the user must be allowed to pass the desired value
as parameter to `odbc_specialcolumns()` again.

Closes GH-6200.
2020-09-24 12:15:59 +02:00
Christoph M. Becker c25b5c64d1 Fix test for cases where data sources are available
That `bool(false)` is a relict of adapting the test expectations to the
warning promotions.
2020-09-24 11:26:16 +02:00
Nikita Popov 450f2ff406 Skip unnecessary unknown() frames
Noticed this while working on attributes strict_types handling.
We sometimes insert dummy frames internally, but I don't think
these should show up in debug_backtrace output unless they're
needed, either to display an include call or to preserve file/line
information that would otherwise get lost.

Closes GH-6195.
2020-09-24 10:34:24 +02:00
Nikita Popov be4553b61a More precise type in mysqli_result constructor
This ctor requires a mysqli object. Possibly there was some
confusion with the mysqli_warning constructor here.
2020-09-24 09:56:48 +02:00
Christoph M. Becker ffa57164a8 Clear error flag instead of toggling it
The toggling of the `REPORT_ERRORS` looks fishy, and likely was
intented as clearing.

Closes GH-6190.
2020-09-23 23:26:58 +02:00
Dmitry Stogov 5783e611a2 Improve trace selection (avoid blacklisting of trace that may be linked). 2020-09-23 23:50:44 +03:00
George Peter Banyard 25569679aa Promote warnings to Error in IMAP extension
Drop some dependencies on argc at the same time

Closes GH-6164
2020-09-23 13:54:54 +01:00
Dmitry Stogov 3c4fb70f2b Replace ZEND_JIT_TRACE_STOP_RETURN_HALT and ZEND_JIT_TRACE_STOP_HALT by separate ZEND_JIT_TRACE_HALT flag. 2020-09-23 15:44:04 +03:00
Nikita Popov 9623756ab7 Remove unused --temp-urlbase option from run-tests.php
This was part of the removed HTML functionality.
2020-09-23 12:34:59 +02:00
Christoph M. Becker 1fcd6cdbb8 Fix #80139: copy_variation5.phpt fails when run on bind mount
This test case is not supposed to run on case-insensitive file system;
just checking for macOS/Windows doesn't cut it.
2020-09-23 12:14:40 +02:00
twosee 6a4eeb1c47 Improve PDO::inTransaction() support for MySQL
Closes GH-4996.
2020-09-23 11:50:06 +02:00
Christoph M. Becker 821f6bb511 Clean up file created during testing 2020-09-23 11:45:47 +02:00
Christoph M. Becker 47b2e44990 Fix test case 2020-09-23 11:20:30 +02:00
Christoph M. Becker 05edf64436 Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Fix #76735: Incorrect message in fopen on invalid mode
2020-09-23 11:14:06 +02:00
Christoph M. Becker a89ac98f15 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #76735: Incorrect message in fopen on invalid mode
2020-09-23 10:54:59 +02:00
Christoph M. Becker 2576c57a51 Fix #76735: Incorrect message in fopen on invalid mode
We have to log errors in `stream_opener` callbacks to the wrapper's
error log, because otherwise we may pick up an unrelated `errno` or a
most generic message.

Closes GH-6187.
2020-09-23 10:54:06 +02:00
Christoph M. Becker d21137368f Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Fix #77493: curl_basic_009 fails with newer curl versions
2020-09-23 10:48:35 +02:00
Christoph M. Becker d30ec2cd85 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #77493: curl_basic_009 fails with newer curl versions
2020-09-23 10:44:06 +02:00
Christoph M. Becker 9439d65f0d Fix #77493: curl_basic_009 fails with newer curl versions
libcurl 7.62.0 introduced a maximum protocol length of 8, so this test
case failed with `CURLE_URL_MALFORMAT`.  While this is lifted to 40 as
of libcurl 7.65.0, and this test case has already been fixed with
commit e27301c[1], we restore the original intention to check for a
`CURLE_UNSUPPORTED_PROTOCOL ` error.

[1] <http://git.php.net/?p=php-src.git;a=commit;h=e27301c7b37f6a1643a0dc1966919bd62a32bc74>
2020-09-23 10:42:48 +02:00
Nikita Popov 625d8463a4 Consistent error handling for fgetcsv/fputcsv
Normalize the behavior between the file functions and those on
SplFileObject.

Be consistent about throwing regardless of whether the delimiter etc
is empty or has too many characters. I don't think it's worthwhile
to distinguish these cases.

Back when we looked into this originally, there was some hope that
we might want to add support for multiple-character delimiter etc,
but after a cursory look, I really don't think this is going to
happen (for fputcsv maybe, but for fgetcsv this just makes an already
broken function much more complicated.)

Closes GH-6188.
2020-09-23 10:11:04 +02:00
Máté Kocsis 72e8719ed0 Fix a few ZEND_UNREACHABLE() calls 2020-09-23 10:07:58 +02:00
Nikita Popov 7fedee873f Fix shift ub
And typo in macro name
2020-09-23 10:04:32 +02:00
Remi Collet dafc72cb33 for consistency use for all *Name methods 2020-09-23 09:31:44 +02:00
Alex Dowad 4222ae16e7 SplFixedArray is Aggregate, not Iterable
One strange feature of SplFixedArray was that it could not be used in nested foreach
loops. If one did so, the inner loop would overwrite the iteration state of the outer
loop.

To illustrate:

    $spl = SplFixedArray::fromArray([0, 1]);
    foreach ($spl as $a) {
      foreach ($spl as $b) {
        echo "$a $b";
      }
    }

Would only print two lines:

    0 0
    0 1

Use the new InternalIterator feature which was introduced in ff19ec2df3 to convert
SplFixedArray to an Aggregate rather than Iterable. As a bonus, we get to trim down
some ugly code! Yay!
2020-09-23 08:33:24 +02:00
George Peter Banyard 1e9db80d72 Tweak some macro definition on Windows
Closes GH-5606
2020-09-22 23:05:12 +01:00
Nikita Popov c2a2d2438a Fix double free on unpack error 2020-09-22 23:31:56 +02:00
Dmitry Stogov 3dde6fc4ac Fix extra args leak 2020-09-23 00:21:39 +03:00
George Peter Banyard 8fef83dd3c Promote warnings to error in DOM extension
Closes GH-5418
2020-09-22 19:12:32 +01:00
George Peter Banyard 82e14ff8e7 Drop usage of E_RECOVERABLE_ERROR in Session extension 2020-09-22 19:11:30 +01:00
George Peter Banyard 5d7d5e2773 Add proper default values for optional arguments in IMAP
Closes GH-6179
2020-09-22 17:46:28 +01:00
George Peter Banyard 7fde9918af Refactor imap_mail()'s internal implementation to use zend_strings 2020-09-22 17:46:28 +01:00
Nikita Popov 73631e517f Try to fix test 2020-09-22 17:04:06 +02:00
Nikita Popov 6436ddbfc8 Handle out-of-bounds offset consistently in grapheme_* API
Make sure we throw the same kind of error regardless of whether
the offset is out-of-bounds in the fast path or in the slow
path.
2020-09-22 17:01:06 +02:00
Nikita Popov 1312c417de Fix grapheme out of bounds check
An offset equal to the string length is not out of bounds.
2020-09-22 16:38:53 +02:00
Christoph M. Becker 544dbe8ef9 Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Fix #76943: Inconsistent stream_wrapper_restore() errors
2020-09-22 16:14:03 +02:00
Christoph M. Becker ff0f6c26c2 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #76943: Inconsistent stream_wrapper_restore() errors
2020-09-22 16:12:37 +02:00
Christoph M. Becker 5ed0602ec6 Fix #76943: Inconsistent stream_wrapper_restore() errors
If restoring of any not registered built-in wrapper is requested, the
function is supposed to fail with a warning, so we have to check this
condition first.

Furthermore, to be able to detect whether a built-in wrapper has been
changed, it is not sufficient to check whether *any* userland wrapper
has been registered, but rather whether the specific wrapper has been
modified.

Closes GH-6183.
2020-09-22 16:11:35 +02:00
George Peter Banyard 35013ac823 Skip IMAP test which chokes on ASAN build 2020-09-22 14:43:31 +01:00
Nikita Popov de77344de2 Promote pack/unpack format errors
Errors related to invalid format strings (unlike data mismatch
errors) should throw ValueError.

Closes GH-6185.
2020-09-22 15:12:05 +02:00
Nikita Popov 048cc9ba78 Convert unpack offset warning to ValueError 2020-09-22 14:13:26 +02:00
Christoph M. Becker d893404fb9 Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Fix #79423: copy command is limited to size of file it can copy
2020-09-22 13:19:06 +02:00
Christoph M. Becker f445e9cb93 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #79423: copy command is limited to size of file it can copy
2020-09-22 13:16:59 +02:00
Christoph M. Becker 4000780b3d Fix #79423: copy command is limited to size of file it can copy
Passing `NULL` as `lpFileSizeHigh` to `GetFileSize()` gives wrong
results for files larger than 0xFFFFFFFF bytes.  We fix this by using
`GetFileSizeEx()`, and let the mapping fail, if the file size is too
large for the architecture.

Closes GH-5319.
2020-09-22 13:15:07 +02:00
Nikita Popov 12d087c346 Use C zpp for get_class_vars() 2020-09-22 13:05:05 +02:00
Nikita Popov fdd9018bdf Support uuencoding empty string
Cross checking implementations from other languages, empty strings
are always allowed. PHP's output is peculiar due to it's insistence
to encode a trailing \0, but otherwise sensible and does round-trip
as expected.
2020-09-22 12:39:39 +02:00
Nikita Popov e60f927f05 stream_bucket_new() cannot return false
php_stream_bucket_new() is infallible.
2020-09-22 12:07:53 +02:00
Nikita Popov 9ef2c5c303 stream_get_transports/wrappers cannot return false
These may return an empty array, but not false.
2020-09-22 12:02:39 +02:00
Nikita Popov aba0ee71b2 Don't return false for empty string in soundex()
Return "0000" instead of false to have a consistent return type.
"0000" is already a possible return value if the string doesn't
contain any letters, such as with soundex(" "). We can treat the
case of soundex("") exactly the same.
2020-09-22 11:44:35 +02:00
Levi Morrison f26d855e29 Skip if https wrapper isn't present 2020-09-22 03:36:54 -06:00
Nikita Popov e547ea43c1 http_build_query() cannot fail
Assert that ht is not null and make php_url_encode_hash_ex() return
void to clarify that this is an infallible function.
2020-09-22 11:30:02 +02:00
Nikita Popov 0fbebfd1ae html_entity_decode() cannot fail
php_unescape_html_entities() never returns null, so this function
can never return false.

php_unescape_html_entities() probably should be failing with OOM
for the "overflow" case, but even if it did, it would not be
signalled through a false return value.
2020-09-22 11:23:01 +02:00
Nikita Popov 84be22f1f5 Validate phonemes parameter of metaphone()
And thus avoid the false return value.
2020-09-22 11:19:02 +02:00
Nikita Popov d0fb2f409e substr_compare() cannot return false 2020-09-22 10:54:44 +02:00
Nikita Popov 5d9ab53a5d Check string bounds in strspn/strcspn
strspn/strcspn are string search functions, and as such should throw
ValueError on out-of-bounds offsets, just like strpos etc do.
2020-09-22 10:46:50 +02:00
Nikita Popov 12e772f18d Promote substr_replace warnings
The implementation here was pretty confused. In reality the only
error condition it has right now is that for a string input,
from & length cannot be arrays.

The fact that the array lengths are the same was probably supposed
to be checked for the case of array input, as it wouldn't matter
otherwise.
2020-09-22 10:22:43 +02:00
Nikita Popov ade57e691b substr_replace() cannot return false 2020-09-22 09:59:35 +02:00
Ikko Ashimine 8f3a38d927 Fixed minor typo in comment
Initiailize -> Initialize

Closes GH-6181.
2020-09-22 09:10:23 +02:00
Dmitry Stogov 57a3fbb1e1 Fixed INIT_METHOD_CALL + IS_VAR + reference in tracing JIT 2020-09-22 00:47:23 +03:00
Dmitry Stogov 43e58d3221 Fixed incorrect assumption about sizeof(zend_reference) 2020-09-21 23:58:18 +03:00
Dmitry Stogov 4ff2122275 Ficed 32-bit JIT (inconsistent CPU stack state) 2020-09-21 23:43:31 +03:00
George Peter Banyard 2ee7e2982f Promote count() warning to TypeError
Closes GH-6180
2020-09-21 21:29:15 +01:00
Dmitry Stogov 5a085777b7 Fixed incorrect JIT for FETCH_THIS+SEND_REF 2020-09-21 21:53:03 +03:00
George Peter Banyard ddd99a7005 Drop -1 mode for collator_is_numeric()
It is used only once with allow_errors enabled
2020-09-21 16:29:10 +01:00
George Peter Banyard 2b6f5eec6c Drop Hex support in numeric strings for Intl collator
Support for this was removed in PHP 7.0.

See: https://wiki.php.net/rfc/remove_hex_support_in_numeric_strings
2020-09-21 16:29:10 +01:00
Nikita Popov 8ff2f2f84b Return empty array for no rows in pg_fetch_all()
This makes it line up with pg_fetch_all_columns(), as well as
similar functions in other exts, such as mysqli_fetch_all().
2020-09-21 17:22:02 +02:00
Nikita Popov fb4554e431 Throw warning for failed object to int/float conversion
We previously couldn't increase the error level here because it
was coupled to comparison handling. This is no longer the case
in PHP 8.
2020-09-21 17:04:39 +02:00
Nikita Popov d60c43e397 Convert exception instanceof checks to assertions 2020-09-21 17:04:39 +02:00
Nikita Popov edf22962ef Make constant redeclaration a warning
We missed the change to make this an Error exception in PHP 8,
but at least elevate it to a warning, to avoid a notice -> exception
jump at a later time.
2020-09-21 17:04:39 +02:00
Nikita Popov 54f03d31e0 Promote invalid field to ValueError in pgsql
The same error condition is a ValueError in mysqli, be consistent.

Additionally, do not display the argument name for these errors.
As the signatures are overloaded, the argument name may not match
the meaning at all.
2020-09-21 17:00:23 +02:00
Nikita Popov 68a907569c Remove redundant check
This was already checked directly above.
2020-09-21 17:00:22 +02:00
Christoph M. Becker 3e33e1e86d Check linker compatibility directly from HMODULE
Checking the linker compatibility with extranous `ImageLoad()` calls is
possible, but unnecessary, since the modules are either already loaded
or loaded shortly afterwards, so that we can get the required
information directly from the module handles.  And actually, doing
`ImageLoad()` as well as `LoadLibrary()` leaves a tiny room for a race
condition, because both functions will lookup the module in the search
path, so there is no *guarantee* that both are dealing with the same
module.  Dropping the `ImageLoad()` calls also has the advantage to no
longer face the issue reported in bug #79557.  A very minor additional
advantage is that we no longer have to link against Imagehlp.dll.

Furthermore, there is no need to check for CRT compatibility multiple
times, so we can simplify the signature of `php_win32_crt_compatible`,
and at the same time clean up main.c a bit.

These changes require to change the signature of the exported
`php_win32_image_compatible` and `php_win32_crt_compatible` functions,
which now expect a `HMODULE` and nothing, respectively, instead of the
module name.
2020-09-21 16:25:31 +02:00
Christoph M. Becker 6fa2493789 Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Fix mmap copying
2020-09-21 16:09:17 +02:00
Christoph M. Becker 19c844594e Fix mmap copying
Instead of attempting to map large files into memory at once, we map
chunks of at most `PHP_STREAM_MMAP_MAX` bytes, and repeat that until we
hit the point where `php_stream_seek()` fails (see bug 54902), and copy
the rest of the file by reading and writing small chunks.

We also fix the mapping behavior for zero bytes on Windows, which did
not error (as with `mmap()`), but would have mapped the remaining file.
2020-09-21 16:07:57 +02:00
Máté Kocsis e95fa3eb0c Fix a few Iterator signatures
Closes GH-6176
2020-09-21 16:03:09 +02:00
George Peter Banyard 9746490ad4 Drop some connection retries in IMAP test
They are unnecessary and just take time for no good reason
2020-09-21 14:49:53 +01:00
Nikita Popov d1bbc39e4c pg_unescape_bytea() can only fail on OOM
The implementation did not check for PQunescapeBytea failure
correctly, because it checked for a null pointer after estrndup,
which certainly cannot happen. Inspection of the PGunescapeBytea
implementation has shown that this function can only fail on OOM,
so let's check for that explicitly and remove false as a possible
return type.

While we're here, avoid an unnecessary copy of the result.
2020-09-21 15:46:55 +02:00
Nikita Popov 5bb41fa63c Promote PDORow property write to Error 2020-09-21 15:33:39 +02:00
Nikita Popov 6f76817f02 Remove dead code
The "if ever" here is the relevant bit...
2020-09-21 15:33:39 +02:00
George Peter Banyard e55f0c796c Promote warnings to Error in COM extension
Closes GH-6141
2020-09-21 14:32:00 +01:00
Nikita Popov 213b666781 Synchronize GET_CLASS/GET_CALLED_CLASS opcodes with functions
These error conditions throw in the function implementations,
make the opcodes match.
2020-09-21 15:06:04 +02:00
Nikita Popov d085a7439f Assert on unknown list entry type 2020-09-21 14:58:23 +02:00
Nikita Popov 3642592a12 Remove unnecessary check
We should only produce IS_UNDEF if an exception is thrown, this
check is not needed.
2020-09-21 14:56:14 +02:00
Nikita Popov 8e0789a21c Use proper parameter type in Closure::bindTo() signature 2020-09-21 14:46:10 +02:00
Máté Kocsis 4c821cf206 Improve default value handling of Exception constructors
Closes GH-6166
2020-09-21 12:46:50 +02:00
Nikita Popov 9f074a5c31 Move arm64 job to cron
As we're branching soon, reduce the number of jobs we run on each
commit, so that Travis can keep up with its role as the fast
feedback build.
2020-09-21 12:42:48 +02:00
Nikita Popov c5f93d191e Fix detection of code outside namespace
Due to improvements to early binding, the opcode based check is
no longer accurate. Reuse the syntactic check we're already using
for declares instead.
2020-09-21 12:37:44 +02:00
Nikita Popov ef9ab9159b Use assertion for null-termination string
Indicates an implementation bug, make sure we can automatically
detect it.
2020-09-21 12:12:51 +02:00
Larry Garfield 94854e0dff Standardize mbstring and string on using 'string' as a parameter name.
Closes GH-6171.
2020-09-21 12:06:50 +02:00
Nikita Popov 7300f6fc17 Deprecate pgsql function aliases
These have been documentation-deprecated for a very long time,
make it official.
2020-09-21 11:33:05 +02:00
Christoph M. Becker 4591cb8a07 Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Fix memory leak in php_imap_mutf7()
2020-09-21 11:27:51 +02:00
Christoph M. Becker d1feeed7f3 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix memory leak in php_imap_mutf7()
2020-09-21 11:26:41 +02:00
Christoph M. Becker 730fdc77a7 Fix memory leak in php_imap_mutf7()
We have to free the string which has been allocated by libc-client.
2020-09-21 11:25:46 +02:00
Nikita Popov 2bf2cede89 Initialize attributes for internal functions
Fixes a crash in Symfony SecurityBundle tests.
2020-09-21 10:50:29 +02:00
Christoph M. Becker 48e9181519 Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Fix #80118: Erroneous whitespace match with JIT only
2020-09-21 10:29:36 +02:00
Christoph M. Becker d27dc5c028 Fix #80118: Erroneous whitespace match with JIT only
We backport r1273[1] from PCRE2.

[1] <https://vcs.pcre.org/pcre2?revision=1273&view=revision>

Closes GH-6165.
2020-09-21 10:28:22 +02:00
Máté Kocsis 64af12d13b Add support for @implementation-alias in stubs
Closes GH-6170
2020-09-21 10:08:45 +02:00
George Peter Banyard 3b67f183b1 Update README for how to setup IMAP tests
This details which packages needs to be installed on Ubuntun 18.04,
which configure flags are necessary and what the setup.sh shell script does.
2020-09-20 22:20:34 +01:00
Máté Kocsis e950ca13ea Consolidate the usage of "either" and "one of" in error messages
Closes GH-6173
2020-09-20 19:41:47 +02:00
Christoph M. Becker c0f8cc1904 Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Fix #80114: parse_url does not accept URLs with port 0
2020-09-20 15:38:18 +02:00
Christoph M. Becker 105132bd6b Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #80114: parse_url does not accept URLs with port 0
2020-09-20 15:37:11 +02:00
Christoph M. Beckerandtwosee 81b2f3e5d9 Fix #80114: parse_url does not accept URLs with port 0
URIs with a 0 port are generally valid, so `parse_url()` should
recognize such URIs, but still report the port as missing.

Co-authored-by: twosee <twose@qq.com>

Closes GH-6152.
2020-09-20 15:34:45 +02:00
Nikita Popov 93745a242f Only check linking in PHP_TEST_BUILD
Given that this executes a random function with zero parameters,
actually executing the code doesn't make sense.

This should fix the imap + asan build.
2020-09-20 10:24:54 +02:00
Nikita Popov e5082af69f Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix mysqli build with mysqlnd and without PDO
2020-09-20 10:03:10 +02:00
Nikita Popov 9d1c7f8b13 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix mysqli build with mysqlnd and without PDO
2020-09-20 10:02:32 +02:00
Bob Weinand a7544411df Fix mysqli build with mysqlnd and without PDO 2020-09-20 10:02:09 +02:00
Bob Weinand 0741858ca7 Fix mysqli build with mysqlnd and without PDO 2020-09-20 02:57:39 +02:00
Máté Kocsis b15885b522 Separate Closure::bind() implementations
Closure::bind() and Closure::bindTo() are currently reported as aliases in stubs because they have a single implementation. They are not aliases in fact though, they just use zend_parse_method_parameters() cleverly.

Thus, let's separate their implementation so that we don't have to alias Closure::bindTo() anymore. This will also have the advantage that the two ZPP implementations become more clear.

Closes GH-6169
2020-09-19 20:14:22 +02:00
Máté Kocsis f088aec6cb Fix UNKNOWN default value of apache_note()
Closes GH-6167
2020-09-19 16:22:18 +02:00
Máté Kocsis 40e8c7c90b Adjust the order of method modifiers in stub
All the other method modifiers in stubs follow the guidelines of PSR-12, so let's use it in case of PhpToken::__construct() as well.
2020-09-19 12:32:02 +02:00
Sammy Kaye Powers 12306728c5 Add system ID entropy API
The `zend_system_id` is a (true global) system ID that fingerprints a process state. When extensions add engine hooks during MINIT/startup, entropy is added the system ID for each hook. This allows extensions to identify that changes have been made to the engine since the last PHP process restart.

Closes GH-5871
2020-09-18 14:26:44 -07:00
George Peter Banyard 30bb15b24a Fix IMAP tests
Drop various ZPP checks and make them PASS
Add CONFLICT file as the tests all hit the same mailbox
2020-09-18 23:02:01 +02:00
George Peter Banyard ef9359d30f Set-up IMAP in Azure
Closes GH-6162
2020-09-18 23:02:01 +02:00
Nikita Popov 19314ff887 Fix some tests for libmysql 2020-09-18 18:01:04 +02:00
Nikita Popov 2d002258b8 Drop skipifemb.inc
And drop the last remaining uses of it.
2020-09-18 15:49:35 +02:00
Nikita Popov b40ffa9bfd Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix #78179: mysqli/mysqlnd transaction extensions
2020-09-18 15:30:13 +02:00
Nikita Popov f23164584e Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #78179: mysqli/mysqlnd transaction extensions
2020-09-18 15:30:06 +02:00
Daniel Black 740f0f6165 Fix #78179: mysqli/mysqlnd transaction extensions
MariaDB versioning created a mess with regarding testing
features based on version. We sidestep the problem here
by assuming the extensions are present, and if a syntax
error occurs with a SQL mode TRANS_START_READ_WRITE |
TRANS_START_READ_ONLY enabled, then output the same
warning as before.
2020-09-18 15:29:44 +02:00
Nikita Popov 9962ad6444 Merge branch 'PHP-7.4'
* PHP-7.4:
  Support NO_BACKSLASH_ESCAPES with newer libmysqlclient
2020-09-18 15:26:04 +02:00
Nikita Popov e6dc9abdb7 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Support NO_BACKSLASH_ESCAPES with newer libmysqlclient
2020-09-18 15:25:35 +02:00
Nikita Popov 70cba36fc9 Support NO_BACKSLASH_ESCAPES with newer libmysqlclient
Requires the use of mysql_real_escape_string_quote().
2020-09-18 15:24:57 +02:00
Dharman 74d16999fc mysqli_set_charset now throws an mysqli_sql_exception when incorrect charset is provided
Closes GH-6142.
2020-09-18 14:57:59 +02:00
Nikita Popov 64547664cb Assert that all switch cases are covered 2020-09-18 14:53:02 +02:00
Nikita Popov 2abea9c3bb Merge branch 'PHP-7.4'
* PHP-7.4:
  Use MyISAM engine for new test
2020-09-18 14:50:11 +02:00
Nikita Popov d87c393a18 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Use MyISAM engine for new test
2020-09-18 14:50:02 +02:00
Nikita Popov 77f43e48ff Use MyISAM engine for new test
Travis on 7.3 is showing this error:

> The size of BLOB/TEXT data inserted in one transaction is greater
> than 10% of redo log size. Increase the redo log size using
> innodb_log_file_size.

Force MyISAM engine to avoid this.
2020-09-18 14:49:43 +02:00
Nikita Popov c5401854fc Run tidy
This should fix most of the remaining issues with tabs and spaces
being mixed in tests.
2020-09-18 14:28:32 +02:00
Nikita Popov bfceb710be Apply tidy to SKIPIF and CLEAN section as well 2020-09-18 14:28:14 +02:00
Nikita Popov 0582c40907 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix bug #80107: Handling of large compressed packets
  Bug #80107 Add test for mysqli_query() fails for ~16 MB long query when compression is enabled
2020-09-18 12:59:10 +02:00
Nikita Popov 5e7c5a82a5 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix bug #80107: Handling of large compressed packets
  Bug #80107 Add test for mysqli_query() fails for ~16 MB long query when compression is enabled
2020-09-18 12:57:50 +02:00
Nikita Popov ecd9c42f9e Fix bug #80107: Handling of large compressed packets
There's two layers of packet splitting going on. First, packets
need to be split into having a payload of exactly 2^24-1 bytes or
being the last packet. If the split packet has size between 2^24-5
and 2^24-1 bytes, the compressed packets also needs to be split,
though the choice of split doesn't matter here. I'm splitting off
the first 8192 bytes, as that's what I observe libmysqlclient to be
doing.
2020-09-18 12:55:44 +02:00
Máté Kocsis c7ceebc42c Bug #80107 Add test for mysqli_query() fails for ~16 MB long query when compression is enabled 2020-09-18 12:42:08 +02:00
Dmitry Stogov d5d31ea3b3 Cleanup observer API and add JIT support 2020-09-18 12:55:58 +03:00
Máté Kocsis b4c2670f85 Fix UNKNOWN default values in ext/pdo_pgsql
Closes GH-6159
2020-09-18 11:13:27 +02:00
Máté Kocsis d9628b9ca9 Update the default values of xmlwriter_write_dtd_entity()
Its default method handling had already been fixed not long ago, but only the stub of its method counterpart was updated.
2020-09-18 11:13:27 +02:00
Nikita Popov 34bb5ba2ea Remove support for EXT_NOP
This is an annoying edge case that regularly gets broken. As we're
not aware of significant users of this API, and there are other
ways to hook this, remove support for EXT_NOP.
2020-09-18 11:03:08 +02:00
Sammy Kaye Powers 9e94bcfdbc Remove specialization of SPEC(OBSERVER) handlers 2020-09-18 00:47:36 +03:00
Dmitry Stogov a9cbdafa69 Support for ZEND_COMPILE_EXTENDED_STMT 2020-09-17 23:19:28 +03:00
Nikita Popov a03c1ed7aa Remove vestiges of embedded mysql from tests 2020-09-17 19:02:20 +02:00
Dmitry Stogov 0f9aefa64f Fixed incorrect live-range construction 2020-09-17 19:39:44 +03:00
Dmitry Stogov 23429b5818 Fixed incorrect register allocation 2020-09-17 18:36:45 +03:00
Sara Golemon bfa8e42a55 Use ephemeral ports during curl tests with dev server 2020-09-17 14:44:12 +00:00
Sara Golemon a61a9fe9a0 Support ephemeral ports in debug server 2020-09-17 14:44:07 +00:00
Sara Golemon 95f2583743 Allow http tests to run in parallel by using ephemeral ports 2020-09-17 14:38:54 +00:00
Christoph M. Becker cafeec34f9 Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Fix bundled libpcre2 build regarding the `-fcf-protection` gcc flag
2020-09-17 16:22:21 +02:00
Christoph M. Becker f3ea88bff7 Fix bundled libpcre2 build regarding the -fcf-protection gcc flag
Cf. <https://bugs.exim.org/show_bug.cgi?id=2578>.
2020-09-17 16:21:01 +02:00
Nikita Popov e9ac7d27ba Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix mysqli_release_savepoint() on mysqlnd
2020-09-17 16:09:41 +02:00
Nikita Popov 33069575d5 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix mysqli_release_savepoint() on mysqlnd
2020-09-17 16:03:26 +02:00
Nikita Popov c3944c4c4f Fix mysqli_release_savepoint() on mysqlnd
mysqli_release_savepoint() was not actually releasing a savepoint...
2020-09-17 15:59:09 +02:00
Nikita Popov 86e002729f Fix some tests for libmysql 2020-09-17 15:27:02 +02:00
Nikita Popov e2b3c0e291 Remove checks for old libmysqlclient versions in tests 2020-09-17 15:02:35 +02:00
Nikita Popov b0661a9667 Fix warnings when building against libmysqlclient
At least for version 8.0 this is warning free now.
2020-09-17 15:02:35 +02:00
Christoph M. Becker c584e84043 Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Update to PCRE2 10.35
2020-09-17 14:08:32 +02:00
Christoph M. Becker 9f2d03952d Update to PCRE2 10.35
We also backport the fix for bug #79846, and add a test case for the
related bug #79363.
2020-09-17 14:07:05 +02:00
Nikita Popov ec08180738 Enable unixODBC in azure
This only checks that it builds though.

Closes GH-6150.
2020-09-17 12:52:31 +02:00
Nikita Popov d4e5b5b6fc Fix compilation warnings in odbc
SQLCHAR* cast all the things.
2020-09-17 12:52:31 +02:00
Christoph M. Becker f601d7c743 Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Fix #80115: mysqlnd.debug doesn't recognize absolute paths with slashes
2020-09-17 12:39:25 +02:00
Christoph M. Becker c3c76dbfb9 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #80115: mysqlnd.debug doesn't recognize absolute paths with slashes
2020-09-17 12:38:16 +02:00
Christoph M. Becker efdbc3688b Fix #80115: mysqlnd.debug doesn't recognize absolute paths with slashes 2020-09-17 12:37:02 +02:00
Nikita Popov 5cb8b04646 Drop support for libmysqlclient < 5.5
Given how little maintenance the libmysqlclient driver sees, be
more aggressive in dropping old version support here.
2020-09-17 12:05:30 +02:00
Nikita Popov e7f98f82ac Add missing mysqlnd checks to stubs 2020-09-17 11:40:14 +02:00
Nikita Popov 3ad57f9f31 Merge branch 'PHP-7.4'
* PHP-7.4:
  pdo_mysql/mysqli (native) libmysqlclient_r no-longer used
  mysql: native mysql-8.0 uses _Bool
  mysqli: use native api
2020-09-17 11:35:03 +02:00
Nikita Popov d591e1c4f5 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  pdo_mysql/mysqli (native) libmysqlclient_r no-longer used
  mysql: native mysql-8.0 uses _Bool
  mysqli: use native api
2020-09-17 11:32:01 +02:00
Daniel Black 1aab7db6c8 pdo_mysql/mysqli (native) libmysqlclient_r no-longer used
The mysqlclient_r library exists in mysql-5.6 for compatibility only.

Later versions have it removed.
2020-09-17 11:27:31 +02:00
Daniel Black c9abb0c0ac mysql: native mysql-8.0 uses _Bool
MySQL-8.0 removes option MYSQLI_OPT_SSL_VERIFY_SERVER_CERT
2020-09-17 11:27:31 +02:00
Daniel Black 202a0697f3 mysqli: use native api
Tested with:
* mysql-5.6.49-linux-glibc2.12-x86_64
* mysql-5.7.31-linux-glibc2.12-x86_64
* mysql-8.0.21-linux-glibc2.17-x86_64
* mariadb-10.5.6

configure --with-mysqli=/usr/local/$version/bin/mysql_config   --with-pdo-mysql=/usr/local/$version

MySQL-8.0 removed my_bool
Some options where deprecated in mysql-8.0

MY_CHARSET_INFO used with exposed api mysql_get_character_set_info
rather than internal structures.
2020-09-17 11:27:31 +02:00
Máté Kocsis 8d37c37bcd Fix a few UNKNOWN default values in ext/pgsql
Closes GH-6149
2020-09-17 11:00:59 +02:00
Dmitry Stogov e9820bf470 Fixed memory leak in ext/spl/tests/bug77263.phpt 2020-09-17 11:55:50 +03:00
Nikita Popov e55a658115 Merge branch 'PHP-7.4'
* PHP-7.4:
  ext/soap: Compare Set-Cookie header case-insensitively
2020-09-17 10:31:48 +02:00
Nikita Popov f0d2efbadc Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  ext/soap: Compare Set-Cookie header case-insensitively
2020-09-17 10:31:30 +02:00
Gabríel Arthúr Pétursson efc52f1754 ext/soap: Compare Set-Cookie header case-insensitively
Closes GH-6143.
2020-09-17 10:31:06 +02:00
Nikita Popov 801cf66ab8 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fixed bug #80083
2020-09-17 10:14:19 +02:00
Nikita Popov 9c136f10cd Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fixed bug #80083
2020-09-17 10:13:53 +02:00
Nikita Popov a4f806aa79 Fixed bug #80083
Add db2_execute() to the list of functions accessing the local
scope. Ideally the API wouldn't do that, but it seems most
pragmatic to address this on the opcache side at this point.
2020-09-17 10:12:10 +02:00
Nikita Popov e3d0bc0a98 Fixed bug #80109
Skip over leading EXT_NOP, if it exists.
2020-09-17 09:59:51 +02:00
Dharman 8f56b7a755 mysqli: Promote warning in field_seek
Aligning the behaviour of fetch_field and field_seek.
2020-09-17 09:42:42 +02:00
Máté Kocsis 46d22e435f Change int parameter types to bool when the parameter behaves as bool
Closes GH-6148
2020-09-17 09:38:18 +02:00
Máté Kocsis 36fd95b524 Generate arginfos 2020-09-16 21:28:27 +02:00
Máté Kocsis de912821e0 Display string default values in stubs more uniformly
Settling on using quoted string
2020-09-16 21:27:01 +02:00
Máté Kocsis c76910cd96 Display types in stubs more uniformly
In preparation for generating method signatures for the manual.

This change gets rid of bogus false|null return types, a few unnecessary trailing backslashes, and settles on using ? when possible for nullable types.
2020-09-16 21:19:36 +02:00
Nikita Popov 0286decdb4 Accept GMP|string|int union in GMP functions
This changes GMP functions to accept a GMP|string|int union with
standard semantics (and thus also uses it in function signatures).

Relative to the previous behavior, this means that GMP functions
in weak mode now also accept float and null, and in strict mode no
longer accept bool, and have full type information.

Closes GH-6139.
2020-09-16 17:17:07 +02:00
Máté Kocsis e7e3099299 Update xmlreader arginfo hash
My git client (GitHub Desktop) decided to commit and push my staged changes, so arginfo generation was not done with the previous commit.
2020-09-16 13:51:36 +02:00
Máté Kocsis 81d6ceedec Update php_xmlreader.stub.php 2020-09-16 13:47:58 +02:00
Máté Kocsis 7a48381e22 XMLReader::getAttributeNs() can no longer return false 2020-09-16 13:45:13 +02:00
Dmitry Stogov f786c0e097 Optimize code for FETCH_THIS + INIT_METHOD_CALL/ASSIGN_OBJ_OP/etc 2020-09-16 14:22:36 +03:00
Dharman 0d99a5618f Changed the wording of the error message
"cannot be used in MYSQLI_USE_RESULT mode" sounds more correct than "cannot be used with MYSQLI_USE_RESULT"

Closes GH-6137.
2020-09-16 11:10:11 +02:00
Nikita Popov f08e666e4b Remove unused GMP_ABS() macro 2020-09-16 11:05:47 +02:00
Dmitry Stogov f896b982cc Exclude trait methods from call-graph 2020-09-16 12:04:29 +03:00
Nikita Popov 392f0abf68 Avoid ubsan warning due to memcpy null
This showed up in ext/mysqli/tests/mysqli_change_user.phpt on azure
today. Not seeing it locally though, and also not sure why it decided
to show up now...
2020-09-16 10:30:13 +02:00
Matteo Beccati 3b2410ebf6 Fix test
follow-up to 7a95e94 for MySQL < 5.6
2020-09-16 10:06:19 +02:00
Dmitry Stogov e27776343f Fixed incorrect constant string access 2020-09-16 10:49:54 +03:00
Dmitry Stogov 5f1fb1a5a4 JIT for INIT_METHOD_CALL 2020-09-16 10:25:36 +03:00
Remi Collet effa3b0883 missing fix for test for new param. name 2020-09-16 07:58:53 +02:00
George Peter Banyard 95f4ee38bb Add some ValueErrors to ext/date
Closes GH-5613
2020-09-16 01:29:28 +02:00
Sara Golemon f88867485b Update NEWS for 8.0.0RC1 2020-09-15 18:38:15 +00:00
Sara Golemon a4a5cddd77 Update NEWS for PHP 8.0.0beta4 2020-09-15 18:30:23 +00:00
Bob Weinand 6d538e83aa Fix OSS Fuzz issue: yielding from an aborted generator 2020-09-15 20:07:33 +02:00
George Peter Banyard 7a95e943d6 Promote warnings to Error in MySQLi extension
Closes GH-5803
2020-09-15 19:12:02 +02:00
Nikita Popov 7e61c2edd8 Fix uninitialized run-time cache when resolving named param defaults
Fixes oss-fuzz #25676.
2020-09-15 16:51:56 +02:00
Nikita Popov 3c53732332 Fix undef var exception handling in JMP_NULL
We need to initialize the result variable in the exceptional
case as well.

Fixes oss-fuzz #25526.
2020-09-15 15:44:01 +02:00
Nikita Popov a009d370e9 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix assumption about property guard hash value
2020-09-15 15:27:17 +02:00
Nikita Popov 2bbf2a91aa Fix assumption about property guard hash value
The "member" string here does not necessarily have a pre-calculated
hash value. In particular this is not the case if the class has no
properties.

Fixes oss-fuzz #25546.
2020-09-15 15:26:41 +02:00
Remi Collet b1c5532ad1 fix mbfl function prototypes
re-add mbfl_convert_filter_feed API
re-add pointer cast
2020-09-15 15:15:06 +02:00
Nikita Popov 16b9f19678 Fix compile-time/run-time discrepancies with unary operators
This addresses two issues:
 * ~ throws for a number of types, and we should not compile-time
   evaluate in that case. Add a check similar to what we do for
   binary ops.
 * Unary +/- may produce a different error message due to
   canonicalization of the constant operand to the RHS. To avoid
   this, put the constant operand on the RHS right away.

Fixes oss-fuzz #25649.
2020-09-15 15:08:55 +02:00
Dmitry Stogov f5bbb0480e Tracing JIT for INIT_DYNAMIC_CALL (closure only) 2020-09-15 15:57:57 +03:00
Máté Kocsis 2408991fc5 Remove unintendedly committed test 2020-09-15 14:49:30 +02:00
Máté Kocsis fa5a25b8bb Adjust ext/openssl parameter names
Closes GH-6121
2020-09-15 14:27:54 +02:00
Máté Kocsis c37a1cd650 Promote a few remaining errors in ext/standard
Closes GH-6110
2020-09-15 14:26:16 +02:00
George Peter Banyard 62c20c662a Promote warnings to Error in SNMP extension 2020-09-15 13:08:07 +02:00
Gabriel Caruso 1a8936cde3 Check ReflectionReference::fromArrayElement with union types
ReflectionReference::fromArrayElement(array $array, int|string $key): ?ReflectionReference
is going to be its official signature for PHP 8.0.

Closes GH-5651
2020-09-15 12:56:10 +02:00
George Peter Banyard c1823c6c8a Promote warning to Error in ODBC extension
Closes GH-6123
2020-09-15 12:50:00 +02:00
George Peter Banyard 063fdd9422 Use ValueError instead of exceptions in SPL extension 2020-09-15 12:49:59 +02:00
George Peter Banyard b6207338e8 Use normal error in SPL for uninitialized objects 2020-09-15 12:49:59 +02:00
George Peter Banyard 9affbef0e6 Use normal error in SPL for 'An iterator cannot be used with foreach by reference' 2020-09-15 12:49:59 +02:00
George Peter Banyard 4fc7026630 Convert warning to assetion in MySQL PDO driver
Closes GH-6120
2020-09-15 12:49:59 +02:00
Máté Kocsis 6082fd33a7 Add missing param type to pcre reflection test 2020-09-15 12:47:07 +02:00
Nikita Popov d81ea5e928 Fix preg_replace_callback_array() with array subject
Apparently this "feature" was completely untested...
2020-09-15 12:03:18 +02:00
Nikita Popov da0663a337 Add GC_TRY_ADDREF macro
That adds a ref if not immutable. Also audit uses of GC_IMMUTABLE
to either use GC_TRY_ADDREF or GC_TRY_PROTECT_RECURSION.
2020-09-15 11:41:09 +02:00
Christoph M. Becker 1bffe6b05c Merge branch 'PHP-7.4' into master
* PHP-7.4:
  7.3.24 is next
2020-09-15 10:59:24 +02:00
Christoph M. Becker e97aed4ddb Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  7.3.24 is next
2020-09-15 10:57:39 +02:00
Christoph M. Becker edddddcea8 7.3.24 is next 2020-09-15 10:51:41 +02:00
Nikita Popov ec3f3002cd Fix observer leak
Make sure to startup observer infrastructure before we register
the first observer...
2020-09-15 10:41:19 +02:00
Derick Rethans e413b4c7ba Merge branch 'PHP-7.4' into master 2020-09-15 09:37:16 +01:00
Derick Rethans 4e794b7935 The next release here will be 7.4.12 2020-09-15 09:36:57 +01:00
Dmitry Stogov 8f93709d7d micro-optimization 2020-09-15 09:39:41 +03:00
Dmitry Stogov 3228d685e2 Renumber ZEND_ACC_... constants 2020-09-15 09:39:27 +03:00
George Peter BanyardandChristopher Jones 824a2bf149 Promote some warnings to ValueError in OCI8
Closes GH-6116

Co-authored-by: Christopher Jones <sixd@php.net>
2020-09-15 02:54:12 +02:00
Bob Weinand 452f7b0d41 Fix use-after-free with yield from in yield_from_multi_tree_single_nodes.phpt
Prevent release of generator children during destruction
2020-09-14 23:07:01 +02:00
Christoph M. Becker f51bbcc2b2 Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Avoid segfault if module/extension version is not defined
2020-09-14 22:36:00 +02:00
Christoph M. Becker 15236fb83e Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Avoid segfault if module/extension version is not defined
2020-09-14 22:34:58 +02:00
Christoph M. Becker 4e198c0064 Avoid segfault if module/extension version is not defined 2020-09-14 22:34:10 +02:00
Dmitry Stogov a4c3aee5b2 Support for reference 2020-09-14 23:30:49 +03:00
Dmitry Stogov a351da55bf Simplify zend_jit_pre/post_inc/dec_typed_ref() helpers 2020-09-14 22:26:34 +03:00
Bob Weinand ad61e141dd Fix crashes with unproper cleaning of repeated yield from
Closes GH-6130
2020-09-14 20:49:24 +02:00
Benjamin Eberlei 1359a52d5b Rename zend_error_notify APIs to zend_observer_error* 2020-09-14 19:29:14 +02:00
Dmitry Stogov 8f342ad4d2 JIT for PRE/POST_INC/DEC_OBJ 2020-09-14 19:36:15 +03:00
George Peter Banyard d0111d785d Promote warnings to Errors in PostgreSQL extension
Do some drive by indentation fixes
Also fix pg_select() in regards to the $result_type arg which was missing from ZPP

Closes GH-6129
2020-09-14 17:01:35 +02:00
Larry Garfield 96f2f3174b Update array parameter names for named parameters
* The array "subject" of a function gets called $array.

* Further parameters should be self-descriptive if used
  as a named parameter, and a full word, not an abbreviation.

* If there is a "bunch more arrays" variadic, it gets
  called $arrays (because that's what was already there).

* A few functions have a variadic "a bunch more arrays,
  and then a callable", and were already called $rest.
  I left those as is and died a little inside.

* Any callable provided to an array function that acts
  on the array is called $callback. (Nearly all were already,
  I just fixed the one or two outliers.)

* array_multisort() is beyond help so I ran screaming.
2020-09-14 14:56:49 +00:00
Nikita Popov 57a4a2c5a8 Fixed bug #80096
We shouldn't assume that call->prev_execute_data is NULL here. The
value needs to be preserved for call chains.
2020-09-14 15:49:49 +02:00
George Peter Banyard 48368a6bf3 Promote Warnings to Error in PostgreSQL PDO driver
Closes GH-6119
2020-09-14 13:41:10 +02:00
George Peter Banyard 31ef94cd42 Convert Division by 0 warnings to Error per the Engine Warning RFC
Closes GH-6125
2020-09-14 13:40:07 +02:00
Dmitry Stogov bf515649ff JIT for ASSIGN_OBJ_OP 2020-09-14 13:31:41 +03:00
Nikita Popov 950ea89fb0 Convert E_ERROR to Error exception in mysqli_result iterator
The same condition uses Error exceptions in lots of other classes.
2020-09-14 12:15:24 +02:00
Nikita Popov 9d3c6665ab Drop some dead code 2020-09-14 12:03:07 +02:00
Máté Kocsis 8e8a277b2f Slightly improve error handling in DatePeriod::__construct() 2020-09-14 11:59:51 +02:00
Máté KocsisandNikita Popov 46c0c82a0f Declare array|int and object-of-class|int types in stubs
Closes GH-6081

Co-Authored-By: Nikita Popov <nikic@php.net>
2020-09-14 11:59:32 +02:00
Máté Kocsis 1c81a34563 Make mb_send_mail() consistent with mail()
The $additional_headers parameter shouldn't accept null.
2020-09-14 11:52:33 +02:00
Máté Kocsis eb86d08128 Fix a few stub parameter types in ext/standard 2020-09-14 11:46:14 +02:00
Máté Kocsis 7e0631e5ee Add Z_PARAM_OBJ_OF_CLASS ZPP macro 2020-09-14 11:40:27 +02:00
Christoph M. Becker 853b7945bc Unmark tests as XFAIL on Windows
This issue has been resolved[1], so the tests are expected to pass on
Windows again.

[1] <https://github.com/php/php-src/commit/0a03291b51e7cf199c06ba4ae914277ce0ac4202>
2020-09-14 10:14:21 +02:00
Dmitry Stogov 0a03291b51 Allocate Windows 64 shadow stack space 2020-09-14 10:41:22 +03:00
Benjamin Eberlei ff0e39bb4d Remove @jit Docblock support for now due to dev-time constraints 2020-09-14 09:21:05 +02:00
George Peter Banyard c8d47cf875 Convert warnings to assetions in OCI PDO driver
Closes GH-6118
2020-09-14 01:07:58 +02:00
Christoph M. Becker 71de8fe9b8 Mark tests as XFAIL on Windows
These tests segfault with tracing JIT on Windows as of a recent
commit[1].  A link to a backtrace is available in a comment[2].  For
now, we mark these tests as XFAIL, to keep AppVeyor CI helpful.

[1] <https://github.com/php/php-src/commit/7b0a05316957982f9e4cc021aec5c20cc80f7542>
[2] <https://github.com/php/php-src/commit/7b0a05316957982f9e4cc021aec5c20cc80f7542#commitcomment-42267637>
2020-09-13 15:38:58 +02:00
Christoph M. Becker 873c087398 Mark tests as XFAIL on Windows
These tests segfault with tracing JIT on Windows as of a recent
commit[1].  A link to a backtrace is available in a comment[2].  For
now, we mark these tests as XFAIL, to keep AppVeyor CI helpful.

[1] <https://github.com/php/php-src/commit/817ae414962480d133ed76618b88b3e7ba482718>
[2] <https://github.com/php/php-src/commit/817ae414962480d133ed76618b88b3e7ba482718#commitcomment-42227420>
2020-09-13 15:38:57 +02:00
Matteo Beccati 385423442a Fix broken test
Since e8e4ddce
2020-09-13 10:02:13 +02:00
George Peter Banyard 67d21bf237 Use Error for uninitialized SQLite object
Closes GH-6113
2020-09-12 22:37:04 +02:00
George Peter Banyard 1f118aa24c Fix SKIPIF section for SQLite3 test
Test is borked if the posix_geteui() function is unavailable.
2020-09-12 22:36:50 +02:00
Máté Kocsis e8e4ddce77 Improve parameter handling in ext/openssl
Closes GH-6025
2020-09-12 22:08:41 +02:00
Máté Kocsis 3053f6f2fa Fix prototype of get_active_function_or_method_name() 2020-09-12 19:10:48 +02:00
George Peter Banyard c93a7b50b4 Normalize behaviour of DNS function on Windows
This is a follow-up on commit 4a438b4469

Add some tests to hopefully not forget it next time
2020-09-12 18:41:25 +02:00
Nikita Popov 8446e28275 Handle missing result_var in binary_op_result_type
For dim/obj compound ops we don't have a result_var. Not sure why
this never caused issues before, but this can crash with JIT.
2020-09-11 22:36:41 +02:00
Nikita Popov 99a68775bf Fix mbstring fuzzer
mb_ereg can throw now, so we need a dummy frame and need to
free the exception afterwards.
2020-09-11 18:35:16 +02:00
George Peter Banyard cd05b56a6f Promote some warnings in BCMath to Errors
Also do a bit of refactoring at the same time.

Closes GH-6105
2020-09-11 17:40:06 +02:00
Nikita Popov f29bfc0bd8 Use string|int union types in pgsql
For "field name or field offset" parameters.

Also make $ctor_params an ?array parameter.
2020-09-11 17:33:09 +02:00
Nikita Popov b7fe1b66d0 Make argument type error message consistent for variadics
If an argument error refers to a variadic argument, we normally
do not print the name of the variadic (as it is not referring to
an individual argument, but to the collection of all of them).
However, this was not the case for the userland argument type
error message, which did it's own formatting.

Closes GH-6101.
2020-09-11 17:16:19 +02:00
Nikita Popov a79008bd91 Also forbid null bytes in mail()
I've adjusted mb_send_mail() already, but of course the handling
in mail() should be the same.
2020-09-11 15:28:51 +02:00
Christoph M. Becker 4d86000541 Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Fix #80067: Omitting the port in bindto setting errors
2020-09-11 14:49:07 +02:00
Christoph M. Becker e41867888a Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #80067: Omitting the port in bindto setting errors
2020-09-11 14:46:51 +02:00
Christoph M. Becker dfb3a79914 Fix #80067: Omitting the port in bindto setting errors
A recent commit[1] which fixed a memory leak introduced a regression
regarding the formerly liberal handling of IP addresses to bind to.  We
fix this by reverting that commit, and fix the memory leak where it
actually occurs.  In other words, this fix is less intrusive than the
former fix.

[1] <http://git.php.net/?p=php-src.git;a=commit;h=0b8c83f5936581942715d14883cdebddc18bad30>

Closes GH-6104.
2020-09-11 14:44:12 +02:00
Máté Kocsis f293e6b920 Clean up ext/session errors
Closes GH-6111
2020-09-11 11:59:04 +02:00
Máté Kocsis c98d47696f Consolidate new union type ZPP macro names
They will now follow the canonical order of types. Older macros are
left intact due to maintaining BC.

Closes GH-6112
2020-09-11 11:00:18 +02:00
Máté Kocsis a59923befd Refactor ReflectionMethod::__construct()
Closes GH-6098
2020-09-11 10:59:13 +02:00
Nikita Popov f33fd9b7fe Throw ValueError on null bytes in mb_send_mail()
Instead of silently replacing with spaces.
2020-09-11 10:46:59 +02:00
Hailong Zhao 9e3e83459c Remove the duplicate line in zend_ast.c
Closes GH-6107.
2020-09-11 09:51:44 +02:00
Nikita Popov b89aee4f87 Add missing condition on azure community job 2020-09-11 09:51:44 +02:00
Dmitry Stogov ccd0348d52 Eliminate repeatable class guards and unnecessary IS_UNDEF property checks 2020-09-11 10:30:43 +03:00
Nikita Popov 79efbb1579 Fix leak in snmp 2020-09-10 23:20:46 +02:00
Dmitry Stogov 7b0a053169 JIT for ASSIGN_OBJ 2020-09-10 23:41:50 +03:00
Dmitry Stogov e9b47df14f Fixed 32-bit JIT 2020-09-10 16:55:08 +03:00
Tyson Andre 09904242af Avoid gap in AST_CLASS child nodes for attributes
See https://github.com/nikic/php-ast/pull/181

> Hm, I'm thinking it would make more sense to change the structure in php-src.
> All the function types have consistent AST structure, but there's no reason at
> all why classes should be consistent with functions.

It's unusual to have an unused child node between other child nodes that are
used (for name, extends, implements, and attributes of AST_CLASS)

> That gap is a leftover from a previous refactoring. An earlier version of
> attributes extended `zend_ast_decl` with a new member called `attributes` and
> therefore did not need to handle functions and classes in different ways.

Closes GH-6088
2020-09-10 09:33:46 -04:00
Remi Collet 8710429283 fix zend_hash_get_current_key_type_ex proto 2020-09-10 12:40:47 +02:00
Remi Collet 7be70c6bfc fix zend_hash_get_current_key_ex proto 2020-09-10 12:36:44 +02:00
twosee bd1d11d352 Simplify error type filter
Closes GH-6049.
2020-09-10 17:36:04 +08:00
Nikita Popov 298d2db62e Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix azure i386 build, again
2020-09-10 09:58:04 +02:00
Nikita Popov 1d8ddf6c49 Fix azure i386 build, again 2020-09-10 09:57:54 +02:00
Christopher Jones 14657ec42d Squash compile warnings the easy way 2020-09-10 17:37:18 +10:00
Christopher Jones bca32de0c7 Make PDO_OCI test more resilient 2020-09-10 17:33:30 +10:00
Christopher Jones bc508b0b88 Skip PDO test for Oracle 2020-09-10 17:32:44 +10:00
Christopher Jones f8f55ba010 Fix premature test termination 2020-09-10 16:45:28 +10:00
Dmitry Stogov 00076ef2b9 Attempt to fix bug #80014 (PHP 8.0 beta2 crashes with default JIT flags due to hardware incompatibility) 2020-09-10 09:34:32 +03:00
chopins bea44429d3 Added FFI\CType::getName() method 2020-09-10 09:14:45 +03:00
Dmitry Stogov d2efb7e6c4 Eliminate unnecessary IS_INDIRECT guards 2020-09-10 02:20:15 +03:00
Dmitry Stogov 1c59bd5caa Avoid more exception checks 2020-09-09 23:25:54 +03:00
Sammy Kaye Powers 3375374c33 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix #79825: opcache.file_cache causes SIGSEGV with custom opcode handlers
2020-09-09 13:00:25 -07:00
Nikita Popov 3861cb87c2 More pgsql func info fixes 2020-09-09 21:49:13 +02:00
Máté Kocsis 8a5e3e40a9 Fix opcache return type info for pgsql functions 2020-09-09 21:43:44 +02:00
Sammy Kaye Powers 1b5268265c Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #79825: opcache.file_cache causes SIGSEGV with custom opcode handlers
2020-09-09 12:36:51 -07:00
Sammy Kaye Powers 2d4aa1ef3d Fix #79825: opcache.file_cache causes SIGSEGV with custom opcode handlers
Modules may have changed after restart which can cause dangling pointers from custom opcode handlers in the second-level cache files. This fix includes the installed module names and versions in the accel_system_id hash as entropy. Closes GH-5836
2020-09-09 12:08:19 -07:00
Dmitry Stogov 817ae41496 JIT for ASSIGN_DIM[_OP] with first IS_VAR + IS_INDIRECT operand 2020-09-09 21:41:48 +03:00
Nikita Popov 68b21939ec Use proper int type for parameter 2020-09-09 17:18:58 +02:00
Nikita Popov 6145cac1af Fix default value 2020-09-09 17:14:14 +02:00
Nikita Popov 25d0e21d77 Use PGSQL_RETURN_OID() in more places 2020-09-09 17:09:40 +02:00
Nikita Popov 47688ab6d9 Add stub for pgsql extension 2020-09-09 16:47:10 +02:00
Nikita Popov 9a6c22da70 Remove deprecated pgsql signatures
As the comment indicates, these are deprecated in PHP 4.2...
2020-09-09 15:50:30 +02:00
Dmitry Stogov ee9948bc46 Eliminate unnecessary exception checks 2020-09-09 16:15:37 +03:00
George Peter Banyard 0444158529 Promote some warnings in MBString Regexes
Closes GH-5341
2020-09-09 14:55:07 +02:00
Nikita Popov 8f415d4413 Promote pgsql no link to Error exception 2020-09-09 12:45:07 +02:00
Nikita Popov 3ab88831ae Remove deprecated multi-parameter form of pg_connect() 2020-09-09 12:31:00 +02:00
Nikita Popov d37d222835 Make array_multisort() signature more variadic
The second and third arguments are not always the sort_order and
sort_flags -- they can also be in reverse order, or be arrays
altogether. Move them into the variadic parameter to avoid awkward
error messages.
2020-09-09 11:36:38 +02:00
Nikita Popov 0222204e7f Test snmp on azure
Closes GH-6100.
2020-09-09 11:24:09 +02:00
Nikita Popov 41f4e912bb Mark snmp tests as conflicting 2020-09-09 11:24:06 +02:00
Nikita Popov 712c914fd5 Suppress uninitialized variable warning in snmp
These are false positive warnings.
2020-09-09 11:23:34 +02:00
Nikita Popov 73ab7b30ca Allow array_diff() and array_intersect() with single array argument
Both of these functions are well-defined when used with a single
array argument -- rejecting this case was an artificial limitation.
This is not useful when called with explicit arguments, but removes
edge-cases when used with argument unpacking:

    // OK even if $excludes is empty.
    array_diff($array, ...$excludes);

    // OK even if $arrays contains a single array only.
    array_intersect(...$arrays);

This matches the behavior of functions like array_merge() and
array_push(), which also allow calls with no array or a single
array respectively.

Closes GH-6097.
2020-09-09 11:03:17 +02:00
Máté Kocsis 9975986b7e Improve error messages mentioning parameters instead of arguments
Closes GH-5999
2020-09-09 10:47:43 +02:00
Dmitry Stogov c5b42be40e Fixed memory leak 2020-09-09 11:09:20 +03:00
Nikita Popov e9d1893f15 Wildcard output differences in snmp tests
And point out that snmp-mibs-downloader is needed.
2020-09-09 10:02:25 +02:00
Dmitry Stogov d6cc6b2dee Tracin JIT support for FETCH_DIM_W/RW with IS_VAR + IS_INDIRECT first operand. 2020-09-09 10:35:44 +03:00
Nikita Popov b553ba7c0d Avoid use of remote_port in snmp
This field is not used (and has not been used for a long time --
I've seen some mailing list thread from 2003 about it!) and throws
a deprecation warning.  The port is part of peername instead (for
transports that support a port at all).
2020-09-09 09:33:36 +02:00
Nikita Popov 536e5b4953 Pass correct op_info to zend_jit_fetch_dim() 2020-09-09 09:29:28 +02:00
twosee 40e5238a00 Flesh out ZEND_HASH_REVERSE_FOREACH_* macros
Closes GH-6080.
2020-09-09 15:12:18 +08:00
Christopher Jones 311fa34246 Fix 3b0fecd and resulting test fail lob_012.phpt 2020-09-09 11:28:00 +10:00
Dmitry Stogov 73c7fa272d JIT for FETCH_DIM_W/RW insructions 2020-09-09 02:41:22 +03:00
Christoph M. Becker 95cf7a0358 Fix Windows build for shared ext/sockets
We can't use `PHPAPI` for extensions which may be built shared.  Thus,
we introduce `PHP_SOCKETS_API`.
2020-09-08 22:54:21 +02:00
Nikita Popov cf8d7b3eae Don't handle missing value in zend_verify_arg_error()
This error condition is handled separately, never reaches this
function.
2020-09-08 20:42:45 +02:00
Alex Dowad 5b78d76ec8 mb_str_split is already documented on php.net
So remove TODO comment which implies that it's not.
2020-09-08 20:09:45 +02:00
Dmitry Stogov b106463d37 JIT for IN_ARRAY instruction. 2020-09-08 21:03:51 +03:00
Christoph M. Becker 59c645b3ef Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Fix #72941: Modifying bucket->data by-ref has no effect any longer
2020-09-08 18:11:26 +02:00
Christoph M. Becker e6b2a97cac Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #72941: Modifying bucket->data by-ref has no effect any longer
2020-09-08 18:08:38 +02:00
Christoph M. Becker 5dcb8f2f1c Fix #72941: Modifying bucket->data by-ref has no effect any longer
To match the PHP 5 behavior, we have to explicitly cater to `buffer` or
`data` being references.

Closes GH-6096.
2020-09-08 18:06:40 +02:00
Nikita Popov e1c422ce4f Try to fix 32-bit setcookie tests, again 2020-09-08 17:38:06 +02:00
Remi Collet 4c43806b61 add socket_ce and socket_import_file_descriptor in public API 2020-09-08 17:26:22 +02:00
Nikita Popov 905c79c05c Fix some snmp stubs
As well as some basic mistakes in tests.
2020-09-08 17:16:57 +02:00
Nikita Popov 6e91a2ef5e Suppress unused variable in snmp
force_ipv6 may be unused if compiling without ipv6 support.
2020-09-08 17:16:56 +02:00
Nikita Popov 9540e70982 Run the opcache-only configuration only for scheduled builds
The opcache-only configuration has very little signal (i.e. it is
very rare that it fails while non-opcache and opcache+jit both
pass). Switch it to run only for nightly builds, so we get faster
results on normal builds.
2020-09-08 16:29:01 +02:00
Nikita Popov 2d1b872b13 Try to fix setcookie() tests on 32-bit 2020-09-08 16:25:21 +02:00
Dmitry Stogov a6a96116ac micro-optimization 2020-09-08 16:47:30 +03:00
Dmitry Stogov 02b645e47a JIT for FETCH_LIST_R 2020-09-08 16:47:15 +03:00
Máté Kocsis 3b0fecd508 Fix UNKNOWN default values in ext/oci8
Closes GH-6089
2020-09-08 15:38:23 +02:00
Nikita Popov 7e339a335e Make null byte error a ValueError
Currently we treat paths with null bytes as a TypeError, which is
incorrect, and rather inconsistent, as we treat empty paths as
ValueError. We do this because the error is generated by zpp and
it's easier to always throw TypeError there.

This changes the zpp implementation to throw a TypeError only if
the type is actually wrong and throw ValueError for null bytes.
The error message is also split accordingly, to be more precise.

Closes GH-6094.
2020-09-08 15:23:23 +02:00
Nikita Popov 2386f655d8 Always use PCRE for mbstring.http_output_conv_mimetypes
Instead of using either oniguruma or pcre depending on which is
available. We always have PCRE, so use it. This ensures consistent
behavior.
2020-09-08 15:02:15 +02:00
George Peter Banyard 72223159e4 Promote warnings to errors for set(raw)cookie()
Closes GH-5819
2020-09-08 14:28:49 +02:00
Nikita Popov 16189974dd Merge branch 'PHP-7.4'
* PHP-7.4:
  Support more placeholders in bless_tests.php
2020-09-08 14:22:32 +02:00
Nikita Popov ababa22136 Support more placeholders in bless_tests.php
And don't replace trailing --CLEAN-- sections.
2020-09-08 14:22:20 +02:00
Nikita Popov 3e14942756 Require $method parameter in openssl_seal/openssl_open
RC4 is considered insecure, and it's not possible to change the
default of these functions. As such, require the method to be
passed explicitly.

Closes GH-6093.
2020-09-08 14:21:01 +02:00
Nikita Popov 259af931e6 Promote warnings in exif
The only thing that can promoted are the path-related checked.
Everything else is input dependent and error-suppressing these
functions is both the typical and the recommended usage.
2020-09-08 11:51:19 +02:00
Nikita Popov 382cb2e779 Merge branch 'PHP-7.4'
* PHP-7.4:
  Revert "Update libzip on macos"
  Revert "Manually build re2c on macos"
2020-09-08 10:28:07 +02:00
Nikita Popov 5a201ddad0 Revert "Update libzip on macos"
This reverts commit 090bddb934.
2020-09-08 10:27:54 +02:00
Nikita Popov 3a5b22e3b5 Revert "Manually build re2c on macos"
This reverts commit 9bbe236f6a.
2020-09-08 10:27:53 +02:00
Nikita Popov d30a648bc8 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fixed bug #80077
2020-09-08 10:01:27 +02:00
Nikita Popov d0d9c3a980 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fixed bug #80077
2020-09-08 10:01:13 +02:00
Nikita Popov 07cb665515 Fixed bug #80077
Quoting from the bug report:

> The domain names passed to getmxrr() do not contain a trailing dot.
> DNS lookups which do not find records will (depending on the local
> resolver config) try again by adding the local domain to the end of
> the searched host/domain. In many environments there's an mx record
> for any subdomain of the local domain and the MX query will return
> a hit. But the test expects no hit. So the test fails when checking
> that "qa.php.net" does not have an MX record in DNS. In our local
> environment the resolver falls back to also check qa.php.net.kippdata.de
> which does have an MX record. Using "qa.php.net." instead of "qa.php.net"
> should fix this for everyone.
2020-09-08 10:00:49 +02:00
Dmitry Stogov aae50328e2 decbin/decoct/dechex optimization. 2020-09-08 10:34:29 +03:00
Christopher Jones ec158c25c4 Catch type errors so test completes and doesn't diff 2020-09-08 16:49:54 +10:00
Christopher Jones 16d79d7acc Accept updated error number generated by the latest Oracle version 2020-09-08 16:06:33 +10:00
Christopher Jones 55afe4e7da Yes, and mask the dir path too. 2020-09-08 15:56:26 +10:00
Christopher Jones 6134bf9ab1 Fix parsing regression from PHP 7 2020-09-08 15:48:48 +10:00
Ilija Tovilo 8a49310f4e Adjust assignment line number for match
Otherwise the assignment will have the same number as the default arm
which will 1. mis-trigger a breakpoint and 2. mark the line as covered
even when it isn't.

Closes GH-6083
2020-09-08 00:08:18 +02:00
Nikita Popov af0ba0b2d3 Reduce input size limit in execute fuzzer
We only have 4 Zend test cases > 8k. Large inputs tend to just
make things slower.
2020-09-07 22:58:34 +02:00
Dmitry Stogov 4a2ae84188 Add "const". Move constant strings to read-only memory. 2020-09-07 21:35:48 +03:00
Máté Kocsis fd0b39905c Promote warnings to exceptions in ext/intl
Closes GH-5972
2020-09-07 19:46:55 +02:00
Nikita Popov 174dadf6b4 Don't allow dynamic properties on generators
Noticed this because we leak those properties in GC. This was
never intended to be allowed.
2020-09-07 19:08:04 +02:00
Máté Kocsis 628db3f3b5 Fix UNKNOWN default values in various extensions
Closes GH-6075
2020-09-07 19:02:02 +02:00
Máté Kocsis 2c96780e1c Fix UNKNOWN default values in ext/standard
Closes GH-6026
2020-09-07 18:58:11 +02:00
Nikita Popov a249980006 Merge branch 'PHP-7.4'
* PHP-7.4:
  Don't leave behind temporary file in bug70362.phpt
2020-09-07 16:16:25 +02:00
Nikita Popov 2a334f1655 Don't leave behind temporary file in bug70362.phpt 2020-09-07 16:15:44 +02:00
Nikita Popov 032f862133 Drop support for crypt() without explicit salt
crypt() without salt generates a weak $1$ MD5 hash. It has been
throwing a notice since 2013 and we provide a much better alternative
in password_hash() (which can auto-generate salts for strong
password hashes), so keeping this is just a liability.
2020-09-07 15:43:26 +02:00
Nikita Popov f4b2497ad8 Allocate temporary PCRE match data using ZMM
Create a separate general context that uses ZMM as allocator and
use it to allocate temporary PCRE match data (there is still one
global match data). There is no requirement that the match data
and the compiled regex / match context use the same general context.

This makes sure that we do not leak persistent memory on bailout
and fixes oss-fuzz #25296, on which half the libfuzzer runs
currently get stuck.
2020-09-07 12:30:43 +02:00
Nikita Popov 9475bcbef7 Avoid large eval inputs in fuzzer
While we limit the size of the main compilation input, the size
of eval inputs was not limited. This could result in stack
overflows, e.g. oss-fuzz #25464.
2020-09-07 11:53:01 +02:00
Nikita Popov f5dbebd82e Accept zend_string instead of zval in zend_compile_string 2020-09-07 11:42:21 +02:00
Nikita Popov 85b5dc4711 Private/public split curl header
To allow exporting the php_curl.h header containing curl class
entries, split off a separate curl_private.h header with all the
implementation details.

We may move or expose additional APIs in php_curl.h on an as-needed
basis.
2020-09-07 11:12:41 +02:00
Nikita Popov d1ac7e3ab1 Remove some unnecessary HAVE_EXTNAME guards
A recurring pattern in old extension: Putting the whole source
code behind HAVE_EXTNAME. This is pointless, as the code is only
compiled if the extension is enabled.

This removes a couple of them, but not all.
2020-09-07 11:05:07 +02:00
David Carlier 8e05c44496 Opcache JIT, code simplification for Haiku.
More straightforward approach to get the path of the
 current PHP process.

Closes GH-6082.
2020-09-07 10:15:28 +02:00
Nikita Popov e0c94677b7 Add phpunit to community project tests 2020-09-07 10:15:05 +02:00
Nikita Popov 623bf96e7e Throw on invalid mb_http_input() type 2020-09-07 09:59:51 +02:00
Tyson Andre ace876cdd6 Fix incorrect/unused macro
zend_ts_hash_init accepts 4 arguments, not 5.
The pHashFunction parameter was removed in 5d25762646

Closes GH-6087
2020-09-06 13:05:02 -04:00
Tyson Andre 1fc961e2de Improve handling of #[ attributes in php -a
`php -a` treats lines starting with `#` as comments when deciding if
the provided statement is valid.

So it passed `#[MyAttr]` to the parser after the user hits enter,
causing a syntax error for multi-line statements..

With this patch, the following snippet is parsed correctly

```
php > #[Attr]
php > function x() { }
php > var_export((new ReflectionFunction('x'))->getAttributes()[0]->getName());
'Attr'
```

Followup to GH-6085

Closes GH-6086
2020-09-06 10:40:26 -04:00
Tyson Andre 9439ca5322 Improve handling of #[ in php -a
PHP treats `#ini_setting=value` as a call to
`ini_set('ini_setting', 'value')`,
and silently skips undeclared settings.

This is a problem due to `#[` becoming supported attribute syntax:

- `#[Attr] const X = 123;` (this is not a valid place to put an attribute)
  This does not create a constant.
- `#[Attr] function test($x=false){}` also contains `=`.
  This does not create a function.

Instead, only treat lines starting with `#` as a special case
when the next character isn't `[`

Closes GH-6085
2020-09-05 17:33:20 -04:00
Nikita Popov aa613f8b1a Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix azure i386 build
2020-09-05 22:10:12 +02:00
Nikita Popov 4ebc04ca9d Fix azure i386 build
Looks like pgsql on i386 broke even more.
2020-09-05 22:10:02 +02:00
Nikita Popov d57f9e5ea4 Handle null encoding in mb_http_input() 2020-09-04 17:15:35 +02:00
Nikita Popov edc8dec675 Reenable s390x on travis
Only enable it for cron builds. We don't need to run exotic
architectures on every commit and PR.

Closes GH-6076.
2020-09-04 17:03:32 +02:00
Derick Rethans 2ee2335249 Fixed bug #80057 (DateTimeImmutable::createFromFormat() does not populate time) 2020-09-04 15:55:08 +01:00
Máté Kocsis 36cdbd0549 Promote warnings to exceptions in ext/ldap
Closes GH-6065
2020-09-04 15:26:16 +02:00
Máté Kocsis 8107a1da5a Use ZPP instead of custom type checks
We can add these types as a native type declaration to stubs as a side-effect. Closes GH-6068
2020-09-04 14:32:34 +02:00
Máté Kocsis e50449bcb4 Use the canonical order of types in array|string ZPP error messages 2020-09-04 14:32:33 +02:00
Máté Kocsis e50cb320b4 Add the Z_PARAM_ARRAY_HT_OR_NULL and Z_PARAM_OBJ macros 2020-09-04 14:31:27 +02:00
George Peter Banyard 7805b97720 Extract common flock code
As SPL is currently a copie of the code in file.c

Closes GH-6069
2020-09-04 14:29:31 +02:00
Nikita Popov 2e218180ef Release call trampolines in zpp fcc
When using zpp 'f' or Z_PARAM_FUNC, if the fcc points to a call
trampoline release it immediately and force zend_call_function
to refetch it. This may require additional callability checks
if __call is used, but avoids the need to carefully free fcc
values in all internal functions -- in some cases this is not
simple, as a type error might be triggered by a later argument
in the same zpp call.

This fixes oss-fuzz #25390.

Closes GH-6073.
2020-09-04 14:23:14 +02:00
Nikita Popov c0d6b05b68 Update travis to bionic 2020-09-04 14:18:58 +02:00
Nikita Popov 67e1f23999 Make gethostbyname() test more liberal
This returns 127.0.1.1 on travis bionic.
2020-09-04 14:18:58 +02:00
Nikita Popov fc8cfb1b1a Merge branch 'PHP-7.4'
* PHP-7.4:
  Avoid duplicate octal warning during heredoc scan ahead
2020-09-04 11:00:45 +02:00
Nikita Popov 2f95af996f Disable InfiniteIterator class while fuzzing
The combination of LimitIterator and InfiniteIterator can cause
effectively infinite loops that bypass the executor step limit.
2020-09-04 10:59:55 +02:00
Nikita Popov e0a14bce77 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Avoid duplicate octal warning during heredoc scan ahead
2020-09-04 10:59:41 +02:00
Nikita Popov e8d36ce762 Avoid duplicate octal warning during heredoc scan ahead 2020-09-04 10:58:51 +02:00
Dmitry Stogov 56a9eeda65 Avoid unnecessary IP initiliaization on trace linking 2020-09-04 11:42:13 +03:00
Dmitry Stogov 3f4a5003aa Cleanup macro/function names 2020-09-04 02:10:48 +03:00
Dmitry Stogov 531d17f0bd Load EX(opline) in one instuction if possible 2020-09-03 23:53:02 +03:00
Dmitry Stogov c58c4be5df Reorder DynAsm macros (no other changes) 2020-09-03 23:52:24 +03:00
George Peter Banyard 61c299fe9c Error promotions in SPL
Warning to Error promotion and a Notice to Warning promotion to align
with the behaviour specified in the Reclassify Engine Warnings RFC.

Closes GH-6072
2020-09-03 19:27:02 +02:00
George Peter Banyard 4a438b4469 Warning to Error promotion in ext/standard
Those should be the last ones other than set(raw)cookie()

Closes GH-5814
2020-09-03 17:43:57 +02:00
Nikita Popov cd1c36f772 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fixed bug #80049
2020-09-03 17:13:47 +02:00
Nikita Popov 2dabc4c305 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fixed bug #80049
2020-09-03 17:12:58 +02:00
Nikita Popov 46a49be6c8 Fixed bug #80049
Type checking may convert to refcounted values, so force freeing
of extra args.
2020-09-03 17:12:40 +02:00
Dmitry Stogov 9dc9534637 If we don't know the return address, just escape to VM, instead of adding side exit.
Remove unnecessary exception checks.
2020-09-03 17:12:23 +03:00
Alex Dowad a81061d36c Use symbolic constants in Japanese kana conversion code (not magic numbers)
Also correct misspelling of 'hiragana' as 'hirangana' at the same time.
2020-09-03 15:56:29 +02:00
Alex Dowad ec609916dc Remove unused 'from' field from mbfl_buffer_converter struct 2020-09-03 15:56:29 +02:00
Alex Dowad f699d65391 Add comment to mbfilter_tl_jisx0201_jisx0208.h
Explain the 'ZEN' and 'HAN' in symbolic constant names.
2020-09-03 15:56:29 +02:00
Alex Dowad a2b40ee9a5 Remove unneeded function mbfl_filt_ident_common_dtor
This was the default destructor for mbfl_identify_filter structs, but there's nothing
we actually need to do to those structs before freeing them.
2020-09-03 15:56:29 +02:00
Alex Dowad dcd6c6043e Remove unneeded function mbfl_filt_conv_common_dtor
This is a default destructor for mbfl_convert_filter structs. The thing is: there
isn't really anything that needs to be done to those structs before freeing them.
The default destructor just zeroed out some fields, but there's no reason why
we should actually do that.
2020-09-03 15:56:29 +02:00
Alex Dowad 409aa20ab0 Refactor mbfl_convert.c 2020-09-03 15:56:29 +02:00
Christoph M. Becker c7cba01b88 Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Fix #80048: Bug #69100 has not been fixed for Windows
2020-09-03 15:46:30 +02:00
Christoph M. Becker 2f4a2a9316 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #80048: Bug #69100 has not been fixed for Windows
2020-09-03 15:45:33 +02:00
Christoph M. Becker 1848ccdae2 Fix #80048: Bug #69100 has not been fixed for Windows
We fix the erroneous length calculation on Windows, too.

Closes GH-6067.
2020-09-03 15:43:19 +02:00
Christoph M. Becker 5fdabeb969 Fix Windows build 2020-09-03 15:31:44 +02:00
Nikita Popov 42a6ff4201 Try to fix windows build 2020-09-03 15:07:03 +02:00
Levi Morrison 94fd52dd09 Add Z_PARAM_ITERABLE and co 2020-09-03 07:03:12 -06:00
George Peter Banyard 430b3ac7df Refactor parts of SPL Dir/SplFileObject
This fixes a way it was possible to trigger an Internel Error
by disabling function (via the INI setting) when SPL was acting
as a proxy to the function call.

Fix flock_compat layer as it needs to used in SPL now.

Use macro to check if object is initialized

Closes GH-6014
2020-09-03 14:23:18 +02:00
George Peter Banyard 7b3ac296a5 Fix mismatch between macro and struct definition 2020-09-03 14:01:45 +02:00
Nikita Popov 9464576f29 Fix leaks in sapi tests
Make sure to always free compiled_filename on shutdown.
2020-09-03 12:59:30 +02:00
Nikita Popov 7620ea1580 Don't intern compiled_filename
For php-ast interning the file name is an effective memory leak,
see php-ast#134.

I don't think there's any reason to do this. At some point this
was needed due to bugs in the interned string mechanism that
caused issues if the string was later interned, e.g. through a
__FILE__ reference. These issues have since been resolved.

In conjunction with the filenames_table removal in c4016ecd44
this means that filenames now need to be refcounted like normal
strings. In particular the filename reference in op_arrays and CEs
are refcounted.
2020-09-03 12:31:23 +02:00
Nikita Popov c4016ecd44 Remove CG(filenames_table)
This doesn't seem to serve any purpose anymore.
2020-09-03 11:33:54 +02:00
Nikita Popov 397a692735 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fixed bug #80046
2020-09-03 11:19:11 +02:00
Nikita Popov 8516434a56 Fixed bug #80046
We already protect against optimizing away loop frees in DFA pass,
but not in block pass.
2020-09-03 11:19:04 +02:00
Nikita Popov ce74ff2b3d Merge branch 'PHP-7.4'
* PHP-7.4:
  Fixed bug #80046
2020-09-03 11:18:11 +02:00
Nikita Popov 04e77d2dea Fixed bug #80046
We already protect against optimizing away loop frees in DFA pass,
but not in block pass.
2020-09-03 11:18:01 +02:00
Dmitry Stogov 67e9b3be39 JIT for FE_FETCH_R 2020-09-03 12:06:06 +03:00
Christoph M. Becker 7769ae18a1 Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Skip test if A: drive exists
2020-09-03 10:33:35 +02:00
Christoph M. Becker 658ad4d046 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Skip test if A: drive exists
2020-09-03 10:30:39 +02:00
Christoph M. Becker c70a938f28 Skip test if A: drive exists
Otherwise the test case will fail for a very different reason.
2020-09-03 10:29:38 +02:00
Nikita Popov 3b853c97f3 Fixed bug #80045
Applying the obvious fix ... however, I think we may need to
rething how we handle trampoline fcc for "f" zpp. It might make
sense to use fcc->function_handler == NULL for that case and
force it to be fetched in zend_call_function instead (it will
be reset to that after the call anyway). Otherwise we will keep
chasing these leaks, as it's the only instance where it's
necessary to free a zpp result.
2020-09-03 10:29:18 +02:00
Nikita Popov daf222c9f8 Merge branch 'PHP-7.4'
* PHP-7.4:
  Handle memory limit error during string reallocation correctly
2020-09-03 09:51:54 +02:00
Nikita Popov 0fc65ed133 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Handle memory limit error during string reallocation correctly
2020-09-03 09:51:35 +02:00
Dmitry Stogov 6b521a98d4 Fixed support for deprecated constants (Zend/tests/const_deprecation.phpt failure) 2020-09-03 10:49:58 +03:00
Nikita Popov 573ad182d2 Handle memory limit error during string reallocation correctly
Do not decrement the refcount before allocating the new string,
as the allocation operation may bail out and cause a use-after-free
lateron. We can only decrement the refcount once the allocation
has succeeded.

Fixes oss-fuzz #25384.
2020-09-03 09:49:29 +02:00
Dmitry Stogov 91edb90767 JIT for FETCH_CONSTANT 2020-09-03 00:51:43 +03:00
Dmitry Stogov 508f8285e2 Reorder switch cases for consistency between zend_jit() and zend_jit_trace() 2020-09-02 23:16:58 +03:00
Anatol Belski e64c386b62 libmagic: Update patch
[ci skip]

Signed-off-by: Anatol Belski <ab@php.net>
2020-09-02 21:25:24 +02:00
Alex Dowad 73dcfb6faa Fix typos in mbstring tests
Man, I can be pedantic sometimes. Tiny little things like misspelled words just
hurt me inside. So while it's not really a big deal, I couldn't leave these typos
alone...
2020-09-02 20:48:22 +02:00
Benjamin Eberlei 842be67b60 Update NEWS, UPGRADING 2020-09-02 20:32:52 +02:00
Benjamin Eberlei 8b37c1e993 Change Attribute Syntax from @@ to #[] 2020-09-02 20:26:50 +02:00
Anatol Belski f2b40775af Revert "libmagic: Move the allocation on the stack"
This reverts commit 1d84a58736.

Signed-off-by: Anatol Belski <ab@php.net>
2020-09-02 20:04:00 +02:00
Dmitry Stogov f3f5719355 JIT for FE_FETCH_R 2020-09-02 20:10:02 +03:00
Anatol Belski 8c31001bf1 libmagic: Constify arg 2020-09-02 17:35:51 +02:00
Anatol Belski 1d84a58736 libmagic: Move the allocation on the stack 2020-09-02 17:35:51 +02:00
Anatol Belski 3d1e7d37eb hash: Fix warning in the bench script 2020-09-02 17:35:51 +02:00
Nikita Popov 05cd31ef64 Extend function blacklist in execute fuzzer
Add pfsockopen and stream_socket_server.
2020-09-02 17:30:19 +02:00
Nikita Popov 0bc2657b2f Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix binary-safety of parse_url
2020-09-02 16:46:49 +02:00
Nikita Popov 81811dbbfb Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix binary-safety of parse_url
2020-09-02 16:45:57 +02:00
Nikita Popov 54dbd3eccc Fix binary-safety of parse_url
php_parse_url() is intended to support strings that are not zero
terminated. We can't use strcspn in the implementation.

As we have two uses of strcspn, add a helper.
2020-09-02 16:45:25 +02:00
Dmitry Stogov 0d157cf526 Micro-optimization 2020-09-02 17:31:48 +03:00
Frank Du c3299d7dab X86: Fast CRC32 computation using PCLMULQDQ instruction
Based on:
"Fast CRC Computation for Generic Polynomials Using PCLMULQDQ Instruction"
V. Gopal, E. Ozturk, et al., 2009, http://intel.ly/2ySEwL0

Signed-off-by: Frank Du <frank.du@intel.com>

Closes GH-6018
2020-09-02 15:10:41 +02:00
Michael Voříšek cb284f668c Fix typo in test description
Closes GH-6062.
2020-09-02 13:07:40 +02:00
Dmitry Stogov 4d97ab20fc Added missing helper 2020-09-02 12:59:52 +03:00
Dmitry Stogov 225cd9da86 Improved JIT for VERIFY_RETURN_TYPE 2020-09-02 12:55:16 +03:00
Máté Kocsis 3e800e997b Move custom type checks to ZPP
Closes GH-6034
2020-09-02 11:11:38 +02:00
Nikita Popov ddc2a2d381 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix throwing of yield from related exceptions into generator
2020-09-02 10:53:44 +02:00
Nikita Popov c6fd37cee3 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix throwing of yield from related exceptions into generator
2020-09-02 10:53:13 +02:00
Nikita Popov 2e9e706a82 Fix throwing of yield from related exceptions into generator
Use the general zend_generator_throw_exception() helper for this.
Otherwise we don't handle the off-by-one opline correctly (should
we maybe just stop doing that?)

This is a followup to ad750c3bb6,
which fixed a different yield from exception handling problem that
happened to show up in the same test case from oss-fuzz #25321.
Now both issues should be fixed.
2020-09-02 10:52:55 +02:00
Dmitry Stogov c98e1747a8 Minimal JIT support for JMP_NULL 2020-09-02 11:49:42 +03:00
Nikita Popov 8b6b2bda09 Fix by-ref list assign LIST_W+MAKE_REF separation
Shift the responsibility for emitting MAKE_REF to the list assignment
code, to make sure that LIST_W and MAKE_REF are directly adjacent,
and there are no opcodes in between that could modify the LIST_W
result.

Additionally, adjust the zend_wrong_string_offset() code to not
perform a loop over opcodes and assert that the next opcode is
a relevant one. The VM write-safety model requires this.

This is a followup to a07c1f56aa
and the full fix for oss-fuzz #25352.
2020-09-02 10:26:55 +02:00
Nikita Popov aedc7b0fb4 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix infinite loop on string offset during by-ref list assign
2020-09-02 10:16:46 +02:00
Nikita Popov 605ee9c8eb Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix infinite loop on string offset during by-ref list assign
2020-09-02 10:16:35 +02:00
Nikita Popov a07c1f56aa Fix infinite loop on string offset during by-ref list assign
There is a deeper underlying issue here, in that the opcodes violate
VM write-fetch safety, but let's fix the infinite loop first.

This fixes oss-fuzz #25352.
2020-09-02 10:16:05 +02:00
Dmitry Stogov 7484b8f036 Preallocate zval for unused result of internal function on CPU stack 2020-09-02 02:03:38 +03:00
Nikita Popov a8687804bb Disable ifunc resolvers under dataflow sanitizer
As with other sanitizers, this is not supported.
2020-09-01 20:37:43 +02:00
Nikita Popov c6ea0e90c2 Assert there are children in zend_generator_get_child() 2020-09-01 20:37:43 +02:00
Gabriel Caruso 1e8e8ab6c9 Update NEWS for 8.0.0rc1 2020-09-01 17:19:26 +00:00
Gabriel Caruso ea14de77cc Update NEWS for PHP 8.0.0beta3 2020-09-01 17:08:27 +00:00
66c3e900e2 Add zend_observer API
Closes GH-5857.

Co-authored-by: Nikita Popov <nikita.ppv@gmail.com>
Co-authored-by: Sammy Powers <sammyk@datadoghq.com>
2020-09-01 09:59:59 -06:00
Dmitry Stogov bd8e0a96a5 Eliminate useless EG(exception) checks aftr FE_RESET/FE_FETCH 2020-09-01 18:56:47 +03:00
Máté Kocsis f7fbc6333f Add more precise type info for stubs
Closes GH-6005
2020-09-01 16:35:56 +02:00
Dmitry Stogov 1c56b40a5c Eliminate some EX_CALL_INFO() checks 2020-09-01 16:26:29 +03:00
Nikita Popov 88a8ebce6a Merge branch 'PHP-7.4'
* PHP-7.4:
  Check for null EX(func) in write_property
2020-09-01 15:17:28 +02:00
Nikita Popov f92a03627a Check for null EX(func) in write_property
This can happen if zend_call_function inserted a dummy frame,
and we already switched to the dummy frame in leave_helper,
and an exception is thrown during CV destruction.

Fixes oss-fuzz #25343.
2020-09-01 15:16:41 +02:00
George Peter Banyard 5c1cf7669b Prepend compiler warning flags to CFLAG instead to append them
Credit to @bwoebi for the idea

Closes GH-6057
2020-09-01 14:45:57 +02:00
Nikita Popov 48e31be7a3 Fix FE_FETCH_R_SIMPLE specialization
After a99d08b5d1 the type can
include UNDEF. However, UNDEF can only reach FE_FREE, not FE_FETCH.
As such, simply ignore this type.
2020-09-01 14:43:06 +02:00
Nikita Popov 6ff5b3df1c Avoid null pointer UB in accel blacklist
Pretty annoying...
2020-09-01 14:43:06 +02:00
Máté Kocsis 47d9446c48 Promote warnings to exceptions in ext/soap and ext/xmlwriter
Closes GH-5998
2020-09-01 14:22:19 +02:00
Máté Kocsis 7476d2c188 Promote warnings to exceptions in ext/tidy
Closes GH-6051
2020-09-01 14:18:02 +02:00
Nikita Popov a99d08b5d1 Fix type inference for FE_RESET on invalid type
FE_RESET sets the result to UNDEF in this case. We should infer
some type here, because no type generally implies unreachable
code. In this case SCCP ended up replacing the FE_RESET result
with null, including in FE_FREE.
2020-09-01 13:59:36 +02:00
Nikita Popov c088a9369f Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix pi node removal when removing predecessor
2020-09-01 12:26:18 +02:00
Nikita Popov 682823b75b Add explicit double cast
Avoid precision warning.
2020-09-01 12:25:38 +02:00
Nikita Popov 37612936a1 Fix pi node removal when removing predecessor
We can't just remove the uses, we need to replace uses.

The test case only fails on master with SSA integrity violations,
but I believe the root issue also existed previously.
2020-09-01 12:25:00 +02:00
Dmitry Stogov 91d7e872e0 Fixed nested init fcall guards. 2020-09-01 12:24:11 +03:00
Alex Dowad b03fd37677 Code cleanup in mbstring.c 2020-08-31 23:19:43 +02:00
Alex Dowad cdc664049c Comment constants in mbfl_consts.h, remove unused ones
These were unused, and almost certainly will never be used:

- MBFL_ENCTYPE_MWC4BE
- MBFL_ENCTYPE_MWC4LE
- MBFL_ENCTYPE_SHFTCODE
- MBFL_ENCTYPE_ENC_STRM

For the latter two, there were some encodings which were marked with these flags;
but nothing ever _checked_ these particular flags.
2020-08-31 23:18:56 +02:00
Alex Dowad 3a100cd7ac Add comment on mbstring East Asian Width table 2020-08-31 23:18:45 +02:00
Alex Dowad 7eddcabe2b Don't guard mbstring code with #ifdef HAVE_MBSTRING
This is just a very silly feature of mbstring -- you can compile the source files with
HAVE_MBSTRING undefined, and it will all just compile to (almost) nothing. What is the
use of this? Why compile the source files and link against them if you don't want the
mbstring extension? It doesn't make any kind of sense.
2020-08-31 23:18:13 +02:00
Alex Dowad 62317d592f Remove redundant includes from mbstring (and make sure correct config.h is used)
Very interesting... it turns out that when Valgrind support was enabled,
`#include "config.h"` from within mbstring was actually including the file "config.h"
from Valgrind, and not the one from mbstring!!

This is because -I/usr/include/valgrind was added to the compiler invocation _before_
-Iext/mbstring/libmbfl.

Make sure we actually include the file which was intended.
2020-08-31 23:17:58 +02:00
Alex Dowad b7808d02e8 Remove useless definition of NULL in mbfl_string.h
If NULL is not defined by the platform, mbfl_defs.h already defines it.
2020-08-31 23:17:49 +02:00
Alex Dowad ea3f0ee0b9 Optimize php_unicode_convert_case (cuts mbstring case conversion time ~15%)
This function uses various subfunctions to convert case of Unicode wchars.
Previously, these subfunctions would store the case-converted characters in
a buffer, and the parent function would then pass them (byte by byte) to
the next filter in the filter chain.

Rather than passing around that buffer, it's better for the subfunctions to
directly pass the case-converted bytes to the next filter in the filter chain.
This speeds things up nicely.
2020-08-31 23:17:25 +02:00
Alex Dowad ddc76e5abf Fix typos in comments in mb_send_mail 2020-08-31 23:17:14 +02:00
Alex Dowad a64241b540 Remove unused functions from mbstring
- mbfl_buffer_converter_reset
- mbfl_buffer_converter_strncat
- mbfl_buffer_converter_getbuffer
- mbfl_oddlen
- mbfl_filter_output_pipe_flush
- mbfl_memory_device_output2
- mbfl_memory_device_output4
- mbfl_is_support_encoding
- mbfl_buffer_converter_feed2
- _php_mb_regex_globals_dtor
- mime_header_encoder_feed
- mime_header_decoder_feed
- mbfl_convert_filter_feed
2020-08-31 23:16:57 +02:00
Alex Dowad 8d13348bb5 Separate implementation of mb_{en,de}code_numericentity
Rather than using a magic boolean parameter to choose different behavior of
the subfunction, inline it. The code size doesn't really grow anyways. And
soon these will be trimmed down more.
2020-08-31 23:16:28 +02:00
Alex Dowad 29b02bf290 Use new-style argument parsing macros in mbstring.c 2020-08-31 23:16:21 +02:00
Alex Dowad d4ef7ef11d Inline unneeded indirection for mbstring memory management
All memory allocation and deallocation for mbstring bounces through a table of
function pointers before going to emalloc/efree/etc. But this is unnecessary.
The allocators are never swapped out. Better to just call them directly.
2020-08-31 23:16:09 +02:00
Alex Dowad dc98c1346d Additional tests for mbstring extension 2020-08-31 23:15:57 +02:00
Christoph M. Becker d4d52ba945 Prevent com::__construct() to modify the $server_name array
We switch to `zend_string`s for simplicity, so there's no need to
`convert_to_string()` anymore, what makes the array separation
superfluous.

Closes GH-6040
2020-08-31 17:44:27 +02:00
Nikita Popov 4acac9bd72 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix leak on assign concat of array and empty string
2020-08-31 17:06:21 +02:00
Nikita Popov 9560e3ba7a Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix leak on assign concat of array and empty string
2020-08-31 17:05:55 +02:00
Nikita Popov cd2afd99b1 Fix leak on assign concat of array and empty string 2020-08-31 17:05:31 +02:00
Nikita Popov 2022f2e5c9 Fix nullsafe operator with delayed oplines
Closes GH-6056.
2020-08-31 16:44:36 +02:00
Ilija Tovilo 70300f6c9d Add tests for nullsafe operator on delayed oplines 2020-08-31 16:44:36 +02:00
Dmitry Stogov 4163923e83 More agressive "packed array" guards insertion 2020-08-31 16:34:56 +03:00
Nikita Popov 53a87547c8 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix leak on consteval exception in ReflectionClass::__toString()
2020-08-31 15:10:53 +02:00
Nikita Popov 1f6f9c70cb Fix leak on consteval exception in ReflectionClass::__toString() 2020-08-31 15:10:09 +02:00
Nikita Popov 1036fd2a70 Merge branch 'PHP-7.4'
* PHP-7.4:
  Check update constant failure in ReflectionClassConstant::__toString()
2020-08-31 14:50:40 +02:00
Nikita Popov 8bb2f406de Check update constant failure in ReflectionClassConstant::__toString() 2020-08-31 14:50:20 +02:00
Nikita Popov ecd986c879 Fix build warnings after timelib update 2020-08-31 14:28:39 +02:00
Dmitry Stogov 5828d547ba Perform type guard checks before IS_UNDEF checks (check IS_UNDEF during deoptimization) 2020-08-31 15:25:23 +03:00
Nikita Popov b4196ae9df Fix fetching default value of internal function with userland arginfo
"Fix" in the sense of "not crash". We aren't able to actually
display the default value for this case, as there's no way to
fetch the relevant information right now.
2020-08-31 14:03:54 +02:00
Derick Rethans bef20d47af Merge branch 'PHP-7.4' into master 2020-08-31 12:33:44 +01:00
Derick Rethans 41e11a8e71 Merge branch 'PHP-7.3' into PHP-7.4 2020-08-31 12:31:44 +01:00
Derick Rethans 488e53c18b Fixed test case 2020-08-31 12:31:23 +01:00
Derick Rethans 8ec906563c Update timelib to 2020.02 2020-08-31 12:23:54 +01:00
Derick Rethans c9b5a29eb6 Merge branch 'master' of git.php.net:php-src into master 2020-08-31 12:03:21 +01:00
Derick Rethans 0bc8785b61 Update timelib to 2020.01 2020-08-31 12:03:08 +01:00
Máté Kocsis 1410cd6b08 Promote warnings to exceptions in ext/ftp
Closes GH-6054
2020-08-31 12:49:17 +02:00
Derick Rethans 4a84aca68f Merge branch 'PHP-7.4' into master 2020-08-31 11:42:20 +01:00
Derick Rethans 932b735822 Merge branch 'PHP-7.3' into PHP-7.4 2020-08-31 11:41:57 +01:00
Derick Rethans 778902db63 Update timelib to 2018.04 2020-08-31 11:41:41 +01:00
Nikita Popov 50975640bc Fixed bug #80030 2020-08-31 12:38:11 +02:00
Nikita Popov 570f463fb8 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix bug #80037
2020-08-31 12:19:00 +02:00
Nikita Popov dfaa4768d2 Fix bug #80037
If we're accessing an uninitialized typed property and __get is
defined, don't perform a read_property callback, as __get is
supposed to have no effect on uninitialized typed properties.
Usually it doesn't, but by-reference assignments cannot be
performed through read_property.

I'm deleting the test for bug #80039 again, as it doesn't really
make sense anymore with this fix.
2020-08-31 12:17:00 +02:00
Nikita Popov 0e9d76ee62 Merge branch 'PHP-7.4'
* PHP-7.4:
  Add test for bug #80039
2020-08-31 11:22:51 +02:00
Nikita Popov 8f7c529720 Add test for bug #80039
This has already been fixed by 247105ae1a,
but let's add the additional test case.
2020-08-31 11:22:16 +02:00
Matteo Beccati dc4d5548df Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix #80027 Terrible performance using $query->fetch on queries with many bind parameters
2020-08-31 11:09:36 +02:00
Matteo Beccati 42b6b8a3ae Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #80027 Terrible performance using $query->fetch on queries with many bind parameters
2020-08-31 11:08:26 +02:00
Matteo Beccati 44ade0e875 Fix #80027 Terrible performance using $query->fetch on queries with many bind parameters
Added new flags that allow skipping param_evt(s) that are not used by drivers,
in a backwards and forward compatible manner. Updated the pgsql, mysql, sqlite
and oci drivers to properly use the new flags. I've left out pdo_dblib, which
doesn't have a param_hook, and pdo_firebird, which seems to be using
PARAM_EVT_NORMALIZE in a wrong context (param type vs event type).
2020-08-31 11:03:03 +02:00
Matteo Beccati ee2506cc02 Fix #80027 Terrible performance using $query->fetch on queries with many bind parameters
Added new flags that allow skipping param_evt(s) that are not used by drivers,
in a backwards and forward compatible manner. Updated the pgsql, mysql, sqlite
and oci drivers to properly use the new flags. I've left out pdo_dblib, which
doesn't have a param_hook, and pdo_firebird, which seems to be using
PARAM_EVT_NORMALIZE in a wrong context (param type vs event type).
2020-08-31 11:02:34 +02:00
Nikita Popov ad97739eac Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix handling of exception if valid() during yield from
2020-08-31 10:52:07 +02:00
Nikita Popov b396fb348b Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix handling of exception if valid() during yield from
2020-08-31 10:51:49 +02:00
Nikita Popov ad750c3bb6 Fix handling of exception if valid() during yield from
Fixes oss-fuzz #25296.
2020-08-31 10:51:31 +02:00
Nikita Popov 061c708a93 Correctly report failure in zend_handle_undef_args()
And do the check before increfing the closure object, otherwise
we'd have to release it as well.

Fixes oss-fuzz #25313.
2020-08-31 10:37:55 +02:00
Nikita Popov e81becce08 Fix trampoline leak in array_map 2020-08-31 10:14:39 +02:00
Jamie Liu c8093fe94a Fix bug #80018: Tolerate var_dump() printing floats in exponential notation in tests 2020-08-31 09:51:01 +02:00
Nikita Popov 5f4b169be8 Merge branch 'PHP-7.4'
* PHP-7.4:
  Make MAX_IFD_NESTING_LEVEL an actual nesting level
2020-08-31 09:36:48 +02:00
Nikita Popov c45985d266 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Make MAX_IFD_NESTING_LEVEL an actual nesting level
2020-08-31 09:32:55 +02:00
Nikita Popov 376bbbdf3b Make MAX_IFD_NESTING_LEVEL an actual nesting level
Currently we only ever increment ifd_nesting_level, so this ends up
being a limit on the total number of IFD tags and we regularly get
bug reports of it being exceeded. I think the intention behind this
limit was to prevent recursion stack overflow, and for that we only
need to check actual recursive usage. I've implemented that here,
and dropped the nesting limit down to a smaller value
(which still passes our tests).

However, it seems that we do also need to have a total limit on
the number of tags, as we don't catch some instances of infinite
looping otherwise. Add this as a separate limit with a higher
value, that should hopefully be sufficient.

This is expected to fix a number of bugs:

https://bugs.php.net/bug.php?id=78083
https://bugs.php.net/bug.php?id=78701
https://bugs.php.net/bug.php?id=79907
https://bugs.php.net/bug.php?id=80016
2020-08-31 09:28:59 +02:00
twosee f982038fb6 Merge branch 'PHP-7.4'
* PHP-7.4:
  Improve error_handing replacement functions

# Conflicts:
# Zend/zend_API.c
2020-08-30 17:06:59 +08:00
twosee 45ed9b42a5 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Improve error_handing replacement functions
2020-08-30 16:25:12 +08:00
twosee e948188832 Improve error_handing replacement functions
We explicitly skip calls to user_error_handler in EH_THROW mode

Closes GH-6050.
2020-08-30 16:24:42 +08:00
Anatol Belski 486866c1b9 libmagic: Update patch [ci skip]
Signed-off-by: Anatol Belski <ab@php.net>
2020-08-29 21:27:01 +02:00
Anatol Belski 9ddf8e524a EXTENSIONS: Update fileinfo maintainership info [ci skip]
Signed-off-by: Anatol Belski <ab@php.net>
2020-08-29 21:05:10 +02:00
Anatol Belski 66f15e7e92 NEWS: Add libmagic note [ci skip]
Signed-off-by: Anatol Belski <ab@php.net>
2020-08-29 21:04:34 +02:00
Anatol Belski c676e8f356 libmagic: Fix VS compat 2020-08-29 19:58:26 +02:00
Anatol Belski f8f288145b libmagic: Remove unneeded includes
Signed-off-by: Anatol Belski <ab@php.net>
2020-08-29 19:41:53 +02:00
Anatol Belski bf93f1d824 fileinfo: Followup fixes
Signed-off-by: Anatol Belski <ab@php.net>
2020-08-29 19:03:41 +02:00
Anatol Belski c3eeab01ba fileinfo: Upgrade to libmagic 5.39
Signed-off-by: Anatol Belski <ab@php.net>
2020-08-29 02:05:56 +02:00
Christoph M. Becker 1902f730ee Support cli_server.color on Windows
On Windows, we have to check whether stdout is attached to a console,
and whether that console supports VT100 control codes.

Closes GH-5996
2020-08-28 18:45:09 +02:00
Nikita Popov a1a4c03b9b Fix call to type error functions from jit
Missed to adjust those calls.
2020-08-28 17:37:00 +02:00
Nikita Popov 86364013f9 Avoid ubsan warning with dummy cache slot addr 2020-08-28 17:24:21 +02:00
Nikita Popov 927771333b Fix unused variable warning 2020-08-28 17:19:32 +02:00
Nikita Popov b2bc2c62fa Remove unnecessary cache_slot arguments
zend_verify_type_error_common() no longer needs the cache_slot,
so drop it there and from all users.
2020-08-28 17:15:09 +02:00
Nikita Popov f0dfdca0ae Fix execute fuzzer on i386
Opcode handlers use the FASTCALL calling convention...
2020-08-28 17:03:54 +02:00
Nikita Popov 2c15c9ce80 Rehash function table after disabling functions
To perform fast shutdown without full table cleanup we need all
internal functions to be in one continuous chunk. This was
violated when functions were deleted via disable_functions.

This drops the zend_disable_function() API in favor of
zend_disable_functions(), which disables the given list of
functions and performs the necessary rehash afterwards.

Also drop PG(disabled_functions), which is no longer used.
2020-08-28 16:50:07 +02:00
Nikita Popov 138f141605 Don't mark variadic functions as ZEND_FASTCALL
Variadic functions do not support the fastcall calling convention.
2020-08-28 16:45:13 +02:00
George Peter Banyard fa8d9b1183 Improve type declarations for Zend APIs
Voidification of Zend API which always succeeded
Use bool argument types instead of int for boolean arguments
Use bool return type for functions which return true/false (1/0)
Use zend_result return type for functions which return SUCCESS/FAILURE as they don't follow normal boolean semantics

Closes GH-6002
2020-08-28 15:41:27 +02:00
Dmitry Stogov 7690439edd Don't load IP when entering inlined function 2020-08-28 13:27:35 +03:00
Nikita Popov 5db44e39b1 Fix tracked_realloc
We should only drop the information about the old allocation after
checking the memory limit. This makes the code a bit more awkward...
2020-08-28 11:37:42 +02:00
Nikita Popov 32315c247f Promote incomplete class to modification to Error
In line with engine diagnostic promotions, property writes throw
an Error exception, while reads throw a warning.
2020-08-28 11:14:43 +02:00
Nikita Popov f965e20059 Promote ArrayObject modification during sorting to Error exception 2020-08-28 10:42:14 +02:00
Nikita Popov 99c5e083ca Throw Error instead of E_ERROR when calling method on incomplete class
There's no reason for this to abort execution completely.
2020-08-28 10:34:21 +02:00
Nikita Popov 4ce38304bb Remove unused BG(str_ebuf) global
Also change BG(strtok_len) to size_t. This stores a string length,
so it should be size_t rather than zend_ulong.
2020-08-28 10:14:41 +02:00
Nikita Popov df5011f56c Export and reuse zend_is_valid_class_name API
Unserialization does the same check as zend_lookup_class, so let's
share the same optimized implementation.
2020-08-28 10:06:01 +02:00
Nikita Popov c47011ba05 Use zend_string when storing incomplete class name
No need to copy the string here...
2020-08-28 10:01:46 +02:00
Nikita Popov 1d0f55315e Store incomplete_class entry as normal global
I don't see any reason why this needs to live in a thread-safe
global, unlikely all other class entries.
2020-08-28 09:57:54 +02:00
Dmitry Stogov 1c1165f8cd Avoid useless IP load 2020-08-28 00:53:09 +03:00
Dmitry Stogov 0866208988 Remove useless register allocations 2020-08-28 00:02:10 +03:00
Dmitry Stogov 972041d68d Replace "mov %eax, %ecx; shl $1, $ecx" by "lea (%eax,%eax), %ecx" 2020-08-27 22:59:30 +03:00
Nikita Popov bb1d0319d7 Fix typo
This was supposed to include the header, not the C file...
2020-08-27 16:57:09 +02:00
Nikita Popov a88226d116 Generate execute corpus in generate_all.php
And add crypt() to the function blacklist, it can be very slow.
2020-08-27 16:34:36 +02:00
Nikita Popov ac98ac7225 Merge branch 'PHP-7.4'
* PHP-7.4:
  Don't assert when comparing uninit DateTimeZone objects
2020-08-27 16:20:24 +02:00
Nikita Popov 5ae657b296 Don't assert when comparing uninit DateTimeZone objects
Nothing guarantees that the objects are initialized here... just
check as usual.
2020-08-27 16:18:45 +02:00
Nikita Popov e083cfaf6d Merge branch 'PHP-7.4'
* PHP-7.4:
  Require non-negative length in stream_get_contents()
2020-08-27 15:51:58 +02:00
Nikita Popov 8daf79215d Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Require non-negative length in stream_get_contents()
2020-08-27 15:51:35 +02:00
Nikita Popov 62dce97973 Require non-negative length in stream_get_contents()
If the length is not -1, require it to be non-negative.

Using such lengths doesn't make sense (as only -1 is special-case
to read in chunks, anything else will end up doing a huge upfront
allocation) and can lead to string allocation overflow.

A similar check is already in place for file_get_contents(). That
one does not allow -1 (and uses null instead), but this function
is explicitly specified to accept -1, so stick to that behavior.
2020-08-27 15:50:49 +02:00
Nikita Popov a3d0d947bd Use zend_dval_to_lval() in spl_offset_convert_to_long()
Avoid fptoi UB and use the standard PHP conversion behavior.
2020-08-27 14:53:56 +02:00
Nikita Popov a2bbd8f01f Fix leak in typed reference assignment
We're only creating tmp here to compare against the existing
coerced_value. We need to destroy it in all cases.
2020-08-27 14:40:35 +02:00
Dmitry Stogov e701146070 Update operands range information accoring to the taken branches and use this indormation to eliminate useless overflow checks. 2020-08-27 15:29:11 +03:00
Nikita Popov c29838c561 Add experimental "execute" fuzzer
This is an end-to-end fuzzer that executes arbitrary PHP code.

We replace the executor with a finite-step executor to avoid
getting stuck in loops or recursion.
2020-08-27 13:06:24 +02:00
Nikita Popov 988fc94bbb Fix leak on failed DatePeriod initialization
We need to free not only p here, but also b and e.
2020-08-27 12:54:43 +02:00
Nikita Popov 614c0b846e Allow removing non-existing key from WeakMap
In line with usual PHP semantics. This previously triggered an
assertion failure.
2020-08-27 12:42:08 +02:00
Nikita Popov ce83ec8790 Clean up strtok implementation
Store the zend_string instead of performing a copy and storing
in a zval. Also make sure the string is released immediately if
it's no longer needed. Finally, avoid null pointer offset UB if
no string has been set -- though I'm wondering if this case
shouldn't be generating a warning?
2020-08-27 12:24:58 +02:00
Nikita Popov 0026d8a783 Fix use-after-free is WeakMap key and value are the same
Drop the object from the WeakMap as the last step, as this might
end up destroying the object.
2020-08-27 12:05:06 +02:00
Dmitry Stogov 9d409f2c1e Eliminate ZSTR_IS_INTERNED() check 2020-08-27 11:38:15 +03:00
Christoph M. Becker f956434df2 Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Catch potential exceptions during to string conversion
2020-08-27 10:26:15 +02:00
Christoph M. Becker 296030119c Catch potential exceptions during to string conversion
As of PHP 7.4.0, exceptions are allowed to be thrown from inside
`__toString()` methods; we have to cater to that, and catch these
exceptions early.

Closes GH-6042
2020-08-27 10:23:18 +02:00
Nikita Popov bd6feb7b12 Enforce memory limit in tracked allocation mode
A very basic limit (for single allocations) was already enforced.
This extends it to count the total memory allocations.

This is useful to avoid out of memory conditions while fuzzing.
2020-08-27 10:18:18 +02:00
Dmitry Stogov 3ead24ecfa Check interrupt only if the link is a part of the loop. 2020-08-27 11:04:23 +03:00
Dmitry Stogov c4fc453771 Rename zend_jit_var_may_be_modified_indirectly() into zend_jit_var_may_alias() 2020-08-27 10:31:39 +03:00
Dmitry Stogov 16b3b339ed Check reference guard once 2020-08-27 00:40:55 +03:00
Dmitry Stogov b9e3de0a32 Use "movaps" instead of "movsd" to copy the whole %xmm register. 2020-08-26 21:13:55 +03:00
Dmitry Stogov c1f14b8a49 Fixed reference-counting 2020-08-26 18:56:54 +03:00
Nikita Popov e069032e5c Merge branch 'PHP-7.4'
* PHP-7.4:
  Property handle read_property exception in fetch_property_address
2020-08-26 16:13:10 +02:00
Nikita Popov 247105ae1a Property handle read_property exception in fetch_property_address
Otherwise we leak (and corrupt uninitialized_zval).
2020-08-26 16:12:34 +02:00
Christoph M. Becker 00edc3f4bc Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Fix com_safearray_proxy related memory management issues
2020-08-26 15:43:43 +02:00
Christoph M. Becker 8e2f219fad Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix com_safearray_proxy related memory management issues
2020-08-26 15:40:57 +02:00
Christoph M. Becker 1b7ee6db88 Fix com_safearray_proxy related memory management issues 2020-08-26 15:39:32 +02:00
Nikita Popov 55798e0e39 Lowercase method name in zend_call_method() 2020-08-26 15:19:23 +02:00
Nikita Popov 86cd009718 Fix pass by ref error for named params 2020-08-26 15:10:08 +02:00
Christoph M. Becker 2f9e9d4d97 Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Separate COM::__construct()s $server_name array
2020-08-26 15:02:34 +02:00
Christoph M. Becker b087bd2404 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Separate COM::__construct()s $server_name array
2020-08-26 15:01:22 +02:00
Christoph M. Becker 75ac3f1cba Separate COM::__construct()s $server_name array
This may otherwise be modified.
2020-08-26 15:00:02 +02:00
Christoph M. Becker fc4a6cda4b Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Fix #64130: COM obj parameters passed by reference are not updated
2020-08-26 14:55:34 +02:00
Christoph M. Becker 1ff981d7a6 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #64130: COM obj parameters passed by reference are not updated
2020-08-26 14:53:46 +02:00
Christoph M. Becker 5ff15e2651 Fix #64130: COM obj parameters passed by reference are not updated
`ITypeInfo_GetIDsOfNames()` is supposed to fail with `E_NOTIMPL` for
out-of-process servers, thus we should not remove the already available
typeinfo of the object in this case.

We also properly free the `byref_vals`.
2020-08-26 14:50:04 +02:00
George Peter Banyard 1b2ec73c1d Drop various unused macros/APIs
Also convert_libmagic_pattern() to return a zend_string*

Closes GH-6029
2020-08-26 12:59:43 +02:00
Nikita Popov ebbe333ede Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix file name clash in test
2020-08-26 12:32:22 +02:00
Nikita Popov 358721bcf7 Fix file name clash in test 2020-08-26 12:32:06 +02:00
Nikita Popov 795ad1e354 Fix memory leak on unknown named param in iterator unpack 2020-08-26 12:19:17 +02:00
Nikita Popov eb17f996fb Merge branch 'PHP-7.4'
* PHP-7.4:
  Avoid socket path clash in test
2020-08-26 12:12:23 +02:00
Nikita Popov 0487bcfac7 Avoid socket path clash in test 2020-08-26 12:11:22 +02:00
Dmitry Stogov 083f5f2005 Improved JIT for FETCH_DIM_R/IS and ISSET_DIM_OBJ 2020-08-26 13:09:16 +03:00
Nikita Popov 1003ae2692 Fix passing of undef var to named arg
This needs to use the previously computed argument target.
2020-08-26 11:53:02 +02:00
Nikita Popov 492621f99e Fix memory leak on unknown named param 2020-08-26 11:44:15 +02:00
Nikita Popov d7d2b060e1 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix memory leak when yielding from non-iterable
2020-08-26 11:32:56 +02:00
Nikita Popov bf3e772361 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix memory leak when yielding from non-iterable
2020-08-26 11:32:31 +02:00
Nikita Popov d179e34e42 Fix memory leak when yielding from non-iterable 2020-08-26 11:32:01 +02:00
Nikita Popov 1954aed745 Fix over-eager named params optimization
We can't relax a named param to a positional param if we encountered
any unknown parameters in the meantime.
2020-08-26 11:01:15 +02:00
Nikita Popov f593019819 Prevent ResourceBundle double-construction 2020-08-26 10:25:15 +02:00
Nikita Popov 6b554251f7 Prevent double-construction of NumberFormatter 2020-08-26 10:25:09 +02:00
Nikita Popov 72eaf509d3 Prevent double-construction of IntlGregorianCalendar 2020-08-26 10:24:57 +02:00
Nikita Popov f6e5cc3391 Prevent double-construction of IntlRuleBasedBreakIterator 2020-08-26 10:03:28 +02:00
Dmitry Stogov d4383be6fa Use guard to check if array is packed or hash 2020-08-26 02:34:31 +03:00
Dmitry Stogov 5948a6674a Prevent negative array index access 2020-08-26 01:07:34 +03:00
Dmitry Stogov 145aba5c83 Merge branch 'jit_match'
* jit_match:
  Support for CASE_STRICT
  JIT for MATCH and CASE_STRICT instructions
2020-08-25 22:33:52 +03:00
Dmitry Stogov e99954492e Avoid priniting "array [long, string] of" 2020-08-25 21:38:23 +03:00
Nikita Popov c2c90cfc65 Merge branch 'PHP-7.4'
* PHP-7.4:
  Don't enable --with-mm in CI
2020-08-25 20:26:17 +02:00
Nikita Popov 571f6a598f Don't enable --with-mm in CI
Turns out this has a large negative effect on startup time,
making tests much slower.
2020-08-25 20:25:07 +02:00
Dmitry Stogov e86b5c872d Record information about packed arrays 2020-08-25 19:39:42 +03:00
Máté Kocsis ea87d0480f Promote warnings to exceptions in ext/pcre
Closes GH-6006
2020-08-25 18:09:50 +02:00
Dmitry Stogov 2369f48092 Infer information about packed/hash arrays and use it for JIT 2020-08-25 18:28:23 +03:00
Nikita Popov 647fb38d58 Ensure RuleBasedBreakIterator constructor throws on failure
Constructors must throw on failure indepdendent of the configured
intl error mode.
2020-08-25 15:28:58 +02:00
Máté KocsisandNikita Popov 6c8fb123d2 Promote warnings to exceptions in ext/simplexml
Closes GH-6011

Co-authored-by: Nikita Popov <nikita.ppv@gmail.com>
2020-08-25 15:15:58 +02:00
Dmitry Stogov f77200f5c6 Fixed JIT failure on "$a = []; $a[1] += 2;" 2020-08-25 16:08:33 +03:00
Christoph M. Becker 7e5ed818a4 Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Avoid double-free
2020-08-25 13:15:06 +02:00
Christoph M. Becker 923a14626c Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Avoid double-free
2020-08-25 13:12:41 +02:00
Nikita Popov 259d050a39 Clean up BreakIterator create_object handler
Use standard zend_object_alloc() function and fix the
object_init_properties() call (which works out okay because there
are no properties).
2020-08-25 13:11:43 +02:00
Nikita Popov 5ecefd0760 Fix XMLWriter::writeDtdEntity() stub
$isparam is optional.
2020-08-25 13:11:43 +02:00
Christoph M. Becker 3324bb893e Avoid double-free
As of commit b2e3fd1[1] the `authid.User` is no longer newly allocated,
so we must not free it.

[1] <http://git.php.net/?p=php-src.git;a=commit;h=b2e3fd1e691b1dc82aaaf4150461db97bd5acf4a>
2020-08-25 13:11:22 +02:00
Máté Kocsis d54bc29540 Promote warnings to exceptions in ext/shmop
Closes GH-5986
2020-08-25 13:09:23 +02:00
Máté Kocsis 3df306de94 Promote warnings to exceptions in ext/pcntl
Closes GH-6004
2020-08-25 13:02:13 +02:00
Nikita Popov 4a98b64413 Merge branch 'PHP-7.4'
* PHP-7.4:
  Remove bogus REGISTER_LONG_CONSTANT
2020-08-25 12:36:06 +02:00
Nikita Popov 86e7aa20ad Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Remove bogus REGISTER_LONG_CONSTANT
2020-08-25 12:35:54 +02:00
Nikita Popov 063082043a Remove bogus REGISTER_LONG_CONSTANT
This shouldn't be in this function, probably a copy/paste mistake...
2020-08-25 12:35:38 +02:00
twosee 9f05c32704 Remove useless same_zval function
Closes GH-6039.
2020-08-25 18:02:38 +08:00
Máté Kocsis be5ba20132 Promote warnings to exceptions in ext/phar
Closes GH-6008
2020-08-25 11:57:37 +02:00
Máté Kocsis f068fbcf1f Promote warnings to exceptions in ext/xmlreader
Closes GH-6021
2020-08-25 11:54:45 +02:00
Nikita Popov f4e9d0e325 Don't return temporary from SXE write_property handler
Return the original value. If we don't return the original value,
we need to own the zval, which we don't.

For clarity also switch things to work on a zend_string* value
instead of a zval*.
2020-08-25 11:28:44 +02:00
Nikita Popov afde6dcf5f Simplify change_node_zval implementation
At this point, the value has already been converted into a string.
2020-08-25 11:01:48 +02:00
Dmitry Stogov d384537859 Move AVOID_REFCOUNTING type info flag into a separate bit 2020-08-25 11:37:30 +03:00
Dmitry Stogov 54fd1fcd27 Support for CASE_STRICT 2020-08-25 00:53:39 +03:00
Dmitry Stogov ef7904b35c JIT for MATCH and CASE_STRICT instructions 2020-08-25 00:53:39 +03:00
Christoph M. Becker ecf4e7063d Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Fix potential integer overflow detected by oss-fuzz
2020-08-24 17:38:50 +02:00
Máté Kocsis 1fb66b8114 Promote warning to exception in ext/enchant
Closes GH-6022
2020-08-24 17:37:20 +02:00
Christoph M. Becker 5dd1877ca1 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix potential integer overflow detected by oss-fuzz
2020-08-24 17:36:50 +02:00
Christoph M. Becker 74de17f2ea Fix potential integer overflow detected by oss-fuzz
We port the respective fix from upstream[1].

[1] <https://github.com/libgd/libgd/commit/9ed642764cf0b4585d135eb738812a43265cb2d3>
2020-08-24 17:35:04 +02:00
Máté Kocsis ffff237497 Promote warning to exception in ext/posix
Closes GH-6009
2020-08-24 17:34:33 +02:00
Máté Kocsis cc35cfd2eb Promote warnings to exceptions in ext/filter
Closes GH-5970
2020-08-24 17:34:32 +02:00
Nikita Popov c557c410af Drop a spurious zend_string_release
This should have been dropped in the refactoring.
2020-08-24 17:30:31 +02:00
Nikita Popov 9feb98859f Clean up setlocale implementation
Factor out the core logic into a separate function and drop the
"clever" code that combines iteration through variadic arguments
and arrays.

This fixes bug #79829 as a side effect.
2020-08-24 17:09:33 +02:00
Nikita Popov 8c3574bd6c Remove php_my_setlocale workaround
This works around a macro-expansion issue that is no longer
relevant in PHP 8.
2020-08-24 16:50:03 +02:00
Nikita Popov 7a6ae9b148 Fix refcounting for the named params case as well
Adjust the test case to pass a refcounted value and to also check
the named params case.
2020-08-24 16:30:49 +02:00
Nikita Popov 779e904465 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix refcounting
2020-08-24 16:23:33 +02:00
Nikita Popov bb54694f4f Fix refcounting 2020-08-24 16:23:19 +02:00
Tyson Andre e056e2dae9 Check for duplicate names in gen_stub.php
With named arguments in php 8.0, it's important that php's modules
or PECL extensions using gen_stub.php don't generate functions
with duplicate names.

Warn if a parameter name is repeated,
even if the last occurrence is a variadic parameter

Closes GH-6035
2020-08-24 09:31:46 -04:00
Christoph M. Becker 5643f34a1e Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Fix #79979: passing value to by-ref param via CUFA crashes
2020-08-24 15:03:26 +02:00
Christoph M. Becker 6b6c2c003c Fix #79979: passing value to by-ref param via CUFA crashes
If a by-val send is not allowed, we must not do so.  Instead we wrap
the value in a temporary reference.

Closes GH-6000
2020-08-24 14:08:32 +02:00
Berbe bfeb2f6abc Fix: Gracefully handle empty user input in run-tests.php
Closes GH-6016.
2020-08-24 11:46:01 +02:00
David Carlier 32c6a0bbbb further network libraries detection for Haiku system.
Closes GH-5997.
2020-08-24 11:37:48 +02:00
Christoph M. Becker c925028d49 Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Fix #79986: str_ireplace bug with diacritics characters
2020-08-24 11:10:09 +02:00
Christoph M. Becker 5ab7b30cd6 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #79986: str_ireplace bug with diacritics characters
2020-08-24 11:09:38 +02:00
Christoph M. Becker 844a2dd6ac Fix #79986: str_ireplace bug with diacritics characters
`tolower()` returns an `int`, so we must not convert to `char` which
may be `signed` and as such may be subject to overflow (actually,
implementation defined behavior).

Closes GH-6007
2020-08-24 11:08:48 +02:00
Christoph M. Becker 08d2e511e4 Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Fix #80002: calc free space for new interned string is wrong
2020-08-24 11:04:27 +02:00
Christoph M. Becker 10df94dd0e Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #80002: calc free space for new interned string is wrong
2020-08-24 11:04:03 +02:00
Christoph M. Becker fcd26ffcc3 Fix #80002: calc free space for new interned string is wrong
We need to calculate the free size in bytes.

Patch contributed by t-matsuno.

Closes GH-6024
2020-08-24 11:03:19 +02:00
Nikita Popov 9395e01e3d Check variadic parameter for type and duplicate name
Set HAS_TYPE_HINTS flag if the variadic parameter is types as well,
and make sure it has a distinct name. This was previously missed,
because the variadic parameter is not part of num_args.
2020-08-24 10:15:57 +02:00
Kees Cook 2c2bb50984 sapi/fpm/config.m4: check for libapparmor's aa_change_profile()
The fpm code actually uses aa_change_profile(), not change_hat(). Test
for the correct function. (libapparmor always has both, so this is just
a correctness fix.)

Closes GH-6037.
2020-08-24 10:10:12 +02:00
Dmitry Stogov 5c18ee58b9 Fixed use-after-free introduced by aed1f78515 2020-08-24 09:50:54 +03:00
Máté Kocsis 118406a31c Remove custom hacks from gen_stub.php after PHP-Parser upgrade 2020-08-23 21:17:05 +02:00
Tyson Andre 4bba59d491 Update PHP-Parser from 4.3.0 to 4.9.0
PHP-Parser 4.3.0 failed to recognize that the `match` keyword could be
used as a class constant name.
4.9.0 also adds support for keywords in namespaced names.
See https://github.com/nikic/PHP-Parser/releases

So forcing regeneration of spl_iterators.stub.php failed.

PECL extensions using gen_stub.php would also be affected
by the same issue.

```
ext/spl/spl_iterators.stub.php
    public function __construct(Iterator $iterator, string $regex,
    int $mode = self::MATCH, int $flags = 0, int $preg_flags = 0) {}
```

Testing: I successfully regenerated stubs by setting forceRegeneration to true
and running `touch **/*.stub.php; make`.
The stubs did not change, as expected.

Closes GH-6036
2020-08-23 11:51:57 -04:00
Christoph M. Becker e6044d4455 Fix #55847: DOTNET .NET 4.0 GAC new location
If we do not specify the exact version of the .NET framework to use,
the default CLR is loaded, which is typically CLR 2, which is very old.
Therefore, we introduce a `PHP_INI_SYSTEM` setting, which allows users
to choose the desired .NET framework version.  The value of the setting
are the first three parts of the framework's version number, separated
by dots, and prefixed with "v", e.g. "v4.0.30319".  If the value of the
INI setting is `NULL` (the default) or an empty string, the default CLR
is used.

Internally, we switch from the most generic `CoCreateInstance()` to
`CorBindToRuntime()` which is implemented in mscoree.dll.  To avoid the
hard dependency to that library, we load dynamically.

So this fix is supposed to be fully backwards compatible.

Closes GH-5949
2020-08-22 12:42:34 +02:00
Christoph M. Becker 969a432fd8 Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Fix #80007: Potential type confusion in unixtojd() parameter parsing
2020-08-22 12:34:24 +02:00
Christoph M. Becker 81fffa86b2 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #80007: Potential type confusion in unixtojd() parameter parsing
2020-08-22 12:31:07 +02:00
Andy Postnikov b2a33ab06b Fix #80007: Potential type confusion in unixtojd() parameter parsing
Also it fixes test on 32-bit armv7 and x86
- Test unixtojd() function : error conditions [ext/calendar/tests/unixtojd_error1.phpt]

Closes GH-6033
2020-08-22 12:30:04 +02:00
Christopher Jones 47c787ff5b Squash a Linux compile warning 2020-08-22 11:37:23 +10:00
David Carlier f32653accc fileinfo build fix proposal for haiku.
Haiku already defines a unichar type and different than the fileinfo's anyway.

Closed GH-5983
2020-08-21 16:13:09 +02:00
Christoph M. Becker 3c5412fc8f Merge branch 'PHP-7.4' into master
* PHP-7.4:
  sqlite3 linkage issue on some systems/package combination fix.
2020-08-21 15:46:30 +02:00
David Carlier 1b21b56074 sqlite3 linkage issue on some systems/package combination fix.
Checking the version is not enough, the function might be available
but the symbols are not present still.

Closes GH-5993
2020-08-21 15:45:51 +02:00
Christoph M. Becker 13419befff Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Fix wrong datatype
2020-08-21 15:30:07 +02:00
Christoph M. Becker 8f9f308bb9 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix wrong datatype
2020-08-21 15:28:37 +02:00
Manuel Mausz 46d62e5464 Fix wrong datatype
ini_entry->modifiable is of type uint8_t and so should be the temp. variable. Especially important after 4b77a158.

Closes GH-6028
2020-08-21 15:28:12 +02:00
Remi Collet 8c57474e35 ensure installed ini don't interfere 2020-08-21 14:41:35 +02:00
Christopher Jones ff66e4945e OCI8 classes were already renamed in 8; this now follows the new-new standard 2020-08-21 17:46:16 +10:00
Dmitry Stogov 8095a0ef7f Better register usage for ASSIGN_DIM_OP 2020-08-21 09:50:28 +03:00
Dmitry Stogov 35a3e450bc Better registers usage 2020-08-21 01:57:03 +03:00
Dmitry Stogov c64cb19138 cleanup unused parameters 2020-08-20 20:43:40 +03:00
Dmitry Stogov dd29a6e79e efree() doesn't use line number arguments (pass zeros) 2020-08-20 20:39:13 +03:00
Dmitry Stogov aed1f78515 micro-optimization 2020-08-20 15:02:12 +03:00
Máté Kocsis 4e6fbb0a12 Promote warnings to exceptions in ext/gd
Closes GH-6023
2020-08-20 12:07:04 +02:00
Dmitry Stogov 22982eee33 Load zval type into register to eliminate double load 2020-08-19 17:51:23 +03:00
Dmitry Stogov bcadf9da8a Shrink live intervals of IS_VAR/IS_TMP_VAR 2020-08-19 14:53:01 +03:00
Dmitry Stogov c6c1682d7a Fixed tracing JIT crash in case SSA for op_array is not provided 2020-08-19 14:51:39 +03:00
Benjamin Eberlei a34fd4d590 Update NEWS w.r.t to bugfix #79968 2020-08-19 12:20:11 +02:00
Benjamin Eberlei 9f6820f7f1 Fix #79968: Manipulation on unattached DOMChildNode should throw DOMException 2020-08-19 11:54:41 +02:00
Dmitry Stogov 736c5dca10 Fixed memory leak (ext/hash/tests/mhash_001.phpt failure) 2020-08-19 09:30:08 +03:00
Tyson Andre 9883fec99f Fix more basic function stubs
User-defined functions can't have multiple parameters with the same name.
Don't do that for var_dump/debug_zval_dump.

Consistently use array $array to match docs

Fix typo in UPGRADING

Fixes GH-6015
2020-08-18 20:23:42 -04:00
Dmitry Stogov f559c78000 Check for exception after $this destruction 2020-08-18 21:13:18 +03:00
Dmitry Stogov f2d8488806 Fixed register allocation for CASE instruction. CASE don't destroy first operand and it may be used later in VM or different trace. 2020-08-18 21:10:34 +03:00
Máté Kocsis bf9ef513c0 Promote warnings to exceptions in ext/pspell
Closes GH-6010
2020-08-18 19:24:18 +02:00
Matteo Beccati cf3fb14679 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix #47021: SoapClient stumbles over WSDL delivered with "Transfer-Encoding: chunked"
2020-08-18 18:31:11 +02:00
Matteo Beccati 3877172411 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #47021: SoapClient stumbles over WSDL delivered with "Transfer-Encoding: chunked"
2020-08-18 18:27:26 +02:00
Matteo Beccati f7c43b8c72 Fix #47021: SoapClient stumbles over WSDL delivered with "Transfer-Encoding: chunked" 2020-08-18 18:10:39 +02:00
Sara Golemon c905717dfa Update NEWS for 8.0.0beta3 2020-08-18 14:03:56 +00:00
Sara Golemon 9b4abd0cff Update NEWS for PHP 8.0.0beta2 2020-08-18 13:44:29 +00:00
Christoph M. Becker 4514afc187 Fix #79988: new reserved keyword match is a backward incompatible change 2020-08-18 12:39:18 +02:00
Dmitry Stogov 6f36b20abf Don't add guard for empty() 2020-08-18 13:13:58 +03:00
Dmitry Stogov 8c90002201 Fixed bug #79987 (Memory leak in SplFileInfo because of missing zend_restore_error_handling()) 2020-08-18 11:08:04 +03:00
Christoph M. Becker 2d32ddb273 Merge branch 'PHP-7.4' into master
* PHP-7.4:
  7.3.23 is next
2020-08-18 10:03:17 +02:00
Christoph M. Becker 48d712565c Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  7.3.23 is next
2020-08-18 10:00:46 +02:00
Christoph M. Becker ff14b7adad 7.3.23 is next 2020-08-18 09:55:37 +02:00
Derick Rethans ac97e4be12 Merge branch 'PHP-7.4' into master 2020-08-18 08:06:35 +01:00
Derick Rethans 499bf91cd0 Prepare for 7.4.11 2020-08-18 08:06:20 +01:00
Christoph M. Becker c8e6f05e70 Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Fix HTTP response status code
2020-08-18 08:37:36 +02:00
Christoph M. Becker 3e8172d27b Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix HTTP response status code
2020-08-18 08:35:56 +02:00
Christoph M. Becker 1ae80f8c92 Fix HTTP response status code 2020-08-18 08:33:45 +02:00
Dmitry Stogov 5d94ff8a00 JIT extension may be NULL 2020-08-18 09:28:13 +03:00
Dmitry Stogov fd0b57d48b Fixed support for named arguments 2020-08-18 00:12:05 +03:00
Dmitry Stogov 3343eb64d7 Fixed trace type inference for FE_FETCH_R/RW 2020-08-17 22:55:25 +03:00
Dmitry Stogov 32052e7470 Fixed support for possible indirect variable modification (ext/standard/tests/array/bug77135.phpt failure). 2020-08-17 22:31:03 +03:00
Dmitry Stogov afc93e44e5 JIT for ZEND_ISSET_ISEMPTY_CV 2020-08-17 20:48:48 +03:00
Dmitry Stogov 28e24e7acc Fixed JIT for indirectly recursive traces 2020-08-17 20:47:06 +03:00
George Peter Banyard 72383ccabb Promote warnings in ext/zip 2020-08-17 15:52:20 +02:00
Dmitry Stogov a02237d2a9 Removed outdated/duplicated code 2020-08-17 15:24:33 +03:00
Dmitry Stogov 8202b4ed09 Properly patch jmp tables 2020-08-17 13:50:03 +03:00
George Peter Banyard 4522cbb789 Promote various OpenSSL warnings into Errors
Closes GH-5111
2020-08-16 18:59:52 +02:00
Tyson Andre 0461c1574a Add run-tests.php --context [n] option.
Mentioned in https://github.com/php/php-src/pull/5965#discussion_r467621123

This PR proposes 3 lines of context so the impact can be seen in tests.
Other `diff` programs show around 3 lines of context.
(This helps indicate exactly which position a test should be updated
to add a new expected line at)

Use the mapping for choosing order to display diffs

Properly include context in cases where the expected output had more lines than
the actual output, e.g.

```
--FILE--
A
A1
A
C
NEARBY
--EXPECTF--
A
B
A1
B
A
B
A
B
NEARBY
```

Closes GH-5968
2020-08-16 09:31:38 -04:00
Máté Kocsis 517c9938af Promote warnings to exceptions in ext/curl
Closes GH-5963
2020-08-14 17:40:35 +02:00
Nikita Popov 124260c165 Merge branch 'PHP-7.4'
* PHP-7.4:
  Null terminate the sodium_crypto_kx_keypair() result
2020-08-14 15:52:31 +02:00
Nikita Popov 5885eecf23 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Null terminate the sodium_crypto_kx_keypair() result
2020-08-14 15:52:15 +02:00
Nikita Popov f6d7af21a3 Null terminate the sodium_crypto_kx_keypair() result 2020-08-14 15:51:31 +02:00
Nikita Popov 86072d60de Reduce cost factors in sodium password_hash tests
Drop the 4x factors to make these tests a bit less obscenely
slow.
2020-08-14 15:39:42 +02:00
Christoph M. Becker 5072321c55 Improve test portability
We have to ensure that the attempted connection to the MySQL server
fails, and do that by passing an unknown host instead of falling back
to localhost.
2020-08-14 15:33:02 +02:00
Nikita Popov 2ca5d663f3 Avoid fatal error in session handler 2020-08-14 15:19:18 +02:00
Nikita Popov cfaa270da5 Use variadic signature for PDOStatement::fetchAll()
The current signature is incorrect, because the $ctor_args parameter
is not required to be an array (it can at least also be null, and
isn't enforced by an exception anyway).

I'm going for the variadic signature here, because we already use
the same variadic signature in PDO::query() and
PDOStatement::setFetchMode(), all of them accepting essentially the
same arguments.
2020-08-14 15:19:18 +02:00
Nikita Popov ca20f36b2a Fix types in openssl stub
These two $recipcert parameters don't use proper union types
right now. They are a bit tricky due to the $recipkey -> $recipcert
fallback.
2020-08-14 15:19:18 +02:00
Christoph M. Becker 64368f4786 Fix newly introduced test for Windows
The warning message is rather different there, but since that is
irrelevant for this test case, we just suppress the warning.
2020-08-14 14:36:32 +02:00
Máté Kocsis d72161505c Add a few callable method parameter types to ext/sqlite3
Closes GH-5988
2020-08-14 13:43:11 +02:00
Nikita Popov ce38d3a919 Don't assert mysql->mysql is non-null
There is an edge case in constructor behavior where we can end up
with mysql->mysql being NULL (rather than mysql itself already being
NULL). I think that ultimately that's a bug in the constructor code,
and we should probably be destroying the outer structure on
construction failure as well. However it's pretty hard to unravel
with when considering all the construction permutations.
2020-08-14 12:44:13 +02:00
Nikita Popov 196671a2b2 Simplify mysqli_stmt_bind_param() implementation
By using zpp.
2020-08-14 11:45:08 +02:00
Nikita Popov 179bc21f5f Use normal zpp in mysqli_result::__construct()
This method doesn't need any special handling...
2020-08-14 11:15:36 +02:00
Nikita Popov 6570fc2cf8 Remove dummy aliases for mysqli constructors
These are only available as methods. Directly declare them as
such instead of aliasing to functions that don't actually exist.
2020-08-14 11:12:41 +02:00
Nikita Popov 07539685b9 Return empty string from SplFileInfo::getPathname()
Instead of false. This is consistent with how other methods like
SplFileInfo::getPath() behave. It's also a requirement before
SplFileInfo::__toString() calls SplFileInfo::getPathname() and
needs to return a string.
2020-08-14 11:09:30 +02:00
Nikita Popov 0a439fa932 Merge branch 'PHP-7.4'
* PHP-7.4:
  Add missing initialization check to RegexIterator::getRegex()
2020-08-14 10:42:14 +02:00
Nikita Popov a0c231c0f5 Add missing initialization check to RegexIterator::getRegex() 2020-08-14 10:41:36 +02:00
Nikita Popov 964f66942c Fix test after is_callable change 2020-08-14 10:40:20 +02:00
Nikita Popov befe10fd21 Fix bug #78770
Refactor the zend_is_callable implementation to check callability
at a particular frame (this is an implementation detail for now,
but could be exposed in the API if useful). Pick the first parent
user frame as the one to check.
2020-08-14 10:24:06 +02:00
Máté Kocsis f83368c6d9 Fix ZPP for mhash()
Closes GH-5985
2020-08-14 10:02:45 +02:00
George Peter Banyard 96c7d42a3c Use ZPP callable check for ldap_set_rebind_proc() 2020-08-13 21:14:51 +02:00
George Peter Banyard dae83cd7cb Use ZPP callable check for Windows specific functions 2020-08-13 21:14:50 +02:00
George Peter Banyard 9cb522166c Allow number_format to be only passed 3 arguments
Closes GH-5977
2020-08-13 18:07:17 +02:00
Tyson Andre 7be61bec80 Colorize --show-diff, only on stdout
Don't add colors to the saved `.diff` file.

Related to a41cf3e1d2
2020-08-13 11:27:32 -04:00
Nikita Popov c3ddda4e3c Merge branch 'PHP-7.4'
* PHP-7.4:
  Fixed bug #79724
2020-08-13 17:26:20 +02:00
Nikita Popov 8bda799d6f Fixed bug #79724 2020-08-13 17:25:51 +02:00
Nikita Popov e40c9d4918 Add some missing DatePeriod initialization checks 2020-08-13 17:23:23 +02:00
Nikita Popov 8f61854108 Add a missing null check in simplexml 2020-08-13 16:46:08 +02:00
Nikita Popov 8fbc618a3c Fix invalid zpp calls in pcntl_get/setpriority 2020-08-13 16:46:02 +02:00
Nikita Popov b03e300a29 Fix test after PDOStatement::fetchObject() change 2020-08-13 16:45:32 +02:00
Nikita Popov 396b47061f Use zpp C in pg_fetch_object 2020-08-13 16:24:08 +02:00
Nikita Popov 670036e2a9 Use Z_PARAM_CLASS in PDOStatement::fetchObject()
Instead of implementing custom logic.
2020-08-13 16:20:29 +02:00
Nikita Popov 1511bdae96 Throw Error on uninitialized XMLWriter 2020-08-13 16:13:02 +02:00
Nikita Popov fc7bab3aee Throw on uninitialized SimpleXMLElement
Elevate this warning into an Error, as usual. Add a few checks
in places that were missing them.
2020-08-13 16:13:02 +02:00
Nikita Popov f5e6f9bd27 Avoid fatal error on not found class in mysqli_fetch_object()
Instead use C zpp modifier and throw TypeError.
2020-08-13 16:13:02 +02:00
Máté Kocsis a10f8876ef Check missing parameter types in stubs
[skip ci] Closes GH-5627
2020-08-13 15:17:31 +02:00
Máté Kocsis cb2f689778 Fix param name in PHPDoc 2020-08-13 14:54:48 +02:00
Máté Kocsis 2803c8fb8d Add all the missing parameter types to stubs
Closes GH-5955
2020-08-13 14:47:18 +02:00
Nikita Popov f3d6203b0b Use a dedicated method for MultipleIterator::countIterators()
This method has a different signature from
SplObjectStorage::count(), so don't share implementations.
2020-08-13 14:44:03 +02:00
Nikita Popov f0bf3d4672 Replace fatal error in SplFileInfo with exception
Using RuntimeException here, because the same error condition
uses that in many other places in this file.
2020-08-13 14:43:45 +02:00
Nikita Popov 634dd38289 Throw Error exception in DOM_GET_OBJ
Per general convention for handling of uninitialized objects.
2020-08-13 14:43:40 +02:00
Nikita Popov e17ff61962 Switch to mime-db as source of extension => MIME map
The Apache MIME type map is not actively maintained anymore, so
this switches to jshttp/mime-db, which seems to be the de-facto
standard in this area now. This avoid the need to patch in our
own MIME types over time.

The preference algorithm is based on:
https://github.com/jshttp/mime-types/blob/47b62ac45e9b176a2af35532d0eea4968bb9eb6d/index.js#L154

Closes GH-5764.
2020-08-13 12:37:33 +02:00
Nikita Popov cdc4e49b84 Make strftime tests musl compatible
* Remove usage of strftime() in favor of date() in cases where
   we are not specifically testing strftime(). We implement
   date() ourselves, and as such are insulated from implementation-
   defined behavior.
 * Add skipif for broken strftime() %Z support. We have decided
   not to work around the issue for musl using manual expansion,
   as people should not be using this function anyway, and it is
   slated for future deprecation.
 * Don't test strftime() with invalid format specifier. The
   behavior is implementation-dependent.
2020-08-13 12:02:27 +02:00
Remi Collet f16c1dc7ee fix test expectation 2020-08-13 09:36:42 +02:00
George Peter Banyard 90330a4460 Drop redundant arg count check 2020-08-13 02:37:00 +02:00
Tyson Andre 45d69fb809 Support NO_COLOR environment variable in run-tests.php
And add a --color option for run-tests.php

See https://no-color.org/

> an informal standard is hereby proposed:
>
> All command-line software which outputs text with ANSI color added should check
> for the presence of a `NO_COLOR` environment variable that, when present
> (regardless of its value), prevents the addition of ANSI color.
2020-08-12 09:37:45 -04:00
Nikita Popov b480e6841e Recognize gnu-libiconv location on alpine 2020-08-12 15:32:11 +02:00
David Carlier 6ca6e9f891 Fix crypt_r detection under BSD system
For BSD systems, crypt.h does not exist, instead we need to
include unistd.h.

Closes GH-5971.
2020-08-12 15:09:21 +02:00
Nyholm 3485ec40ce Small CS fix
The comments were incorrectly aligned. Fix this by dropping the
alignment and moving the comments before the declarations.

Closes GH-5975.
2020-08-12 12:16:53 +02:00
Nikita Popov 824541d57e Disable report_zend_debug by default
We might just want to drop this completely, but at least don't
enable it by default. It already gets disabled by a number of
SAPIs, but we should make that the default state.
2020-08-12 10:36:40 +02:00
Tyson Andre 1e9a5c67ef Rename standard array function parameters to $array
This is targeting 8.0.

`$arg` seems like a poor choice of a name,
especially if the function were to have arguments added.

In many cases, the php.net documentation already has $array for these functions.
E.g. https://www.php.net/manual/en/function.array-intersect.php

I'd assume that since named arguments was added to 8.0 near the feature freeze,
PHP's maintainers had planned to make the names consistent
and gradually use the same name for  docs and implementation.
2020-08-11 19:11:59 -04:00
Ilija Tovilo 10f660f0a5 Fix ?-> in encaps vars without braces
Closes GH-5966.
2020-08-11 21:16:44 +02:00
Nikita Popov 898bb97706 Drop php_pdo_get_exception_base() function
This API is more confusing than helpful.
2020-08-11 17:40:39 +02:00
Nikita Popov 33028bf014 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix #64705 errorInfo property of PDOException is null when PDO::__construct() fails
2020-08-11 17:16:38 +02:00
Nikita Popov 981af26d7b Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #64705 errorInfo property of PDOException is null when PDO::__construct() fails
2020-08-11 17:13:28 +02:00
Ahmed Abdou 2fe2e5b48f Fix #64705 errorInfo property of PDOException is null when PDO::__construct() fails
PDO driver constructors are throwing PdoException without setting
errorInfo, so create a new reusable function that throws exceptions
for PDO and will also set the errorInfo. Use this function in
pdo_mysql, pdo_sqlite, and pdo_pgsql.
2020-08-11 17:12:48 +02:00
Nikita Popov 8694eb14f4 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix bug #75785 by attempt switching endianness on Maker's Note
2020-08-11 16:29:01 +02:00
Nikita Popov 5c5508698d Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix bug #75785 by attempt switching endianness on Maker's Note
2020-08-11 16:27:06 +02:00
Nawarian 2fa4ca95db Fix bug #75785 by attempt switching endianness on Maker's Note
Different manufacturer models may come with a
different endianness (motorola/intel) format. In
order to avoid a big refactor and a gigantic lookup
table, this commit simply attempts to switch the
endianness and proceed when values are acceptable.

Closes GH-5849.
2020-08-11 16:26:34 +02:00
Nikita Popov e25aab6426 Fixed bug #79927
We need to unset the AT_FIRST_YIELD flag when yielding from an
array as well.

In the interest of being conservative, I'm applying this only to
PHP 8.
2020-08-11 15:48:40 +02:00
Nikita Popov 227f1f1481 Fix nullsafe operator on $this 2020-08-11 15:22:14 +02:00
Nikita Popov 42eda5160d SAVE_OPLINE in NULL_HANDLER
Let's avoid crashing before the nice error message gets printed...
2020-08-11 15:14:50 +02:00
Nikita Popov f491dabe40 Fix nullsafe operator on reference
Dereference the value before checking the type. As the happy path
necessarily has to check for references, I'm not bothering to
delay the comparison.
2020-08-11 15:11:36 +02:00
Nikita Popov 75baa729f5 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fixed bug #79917
2020-08-11 14:59:04 +02:00
Nikita Popov 4609ded082 Fixed bug #79917
op_arrays can be shared on two levels: Either the op_array is
completely shared, or it is distinct but shares all members
(apart from static_variables).

The the op_array is distinct, we need to make sure to properly
initialize the MAP_PTR structures.
2020-08-11 14:58:54 +02:00
Christoph M. BeckerandNikita Popov 9e930907df Autogenerate function entries for COMPersistHelper
Co-authored-by: Nikita Popov <nikita.ppv@googlemail.com>
2020-08-11 11:42:40 +02:00
Christoph M. Becker dc5077cc53 Remove practically unused parameter
The `cached` out parameter of `php_com_load_typelib_via_cache()` was
meant to signal whether a particular typelib actually has been cached.
This is not really relevant, though, for the imagined purposes, and
since the parameter is no longer really used, we removed it altohether.
2020-08-11 11:38:43 +02:00
Christoph M. Becker 013dcab344 Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Fix #48585: com_load_typelib holds reference, fails on second call
2020-08-11 11:28:41 +02:00
Christoph M. Becker 183b853dc6 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #48585: com_load_typelib holds reference, fails on second call
2020-08-11 11:28:07 +02:00
Christoph M. Becker dc108feab8 Fix #48585: com_load_typelib holds reference, fails on second call
Whether the type library is cached is actually irrelevant here; what
matters is that the symbols are imported, and since these are not
cached, we have to import them for every request.  And we cannot cache
the symbols, because the import depends on the current codepage, but
the codepage is a `PHP_INI_ALL` setting.
2020-08-11 11:26:50 +02:00
Nikita Popov dd858460bb Merge branch 'PHP-7.4'
* PHP-7.4:
  Fixed bug #79951
2020-08-11 10:35:59 +02:00
Nikita Popov 66d9f4d985 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fixed bug #79951
2020-08-11 10:35:25 +02:00
Nikita Popov 9d9dffe60a Fixed bug #79951
One branch did not release tmp_replace_entry_str.

Also reduce the scope of some variables.
2020-08-11 10:33:59 +02:00
Máté Kocsis 56135654a0 Remove unnecessary function entry array 2020-08-11 09:41:54 +02:00
George Wang e05439e7a4 Merge branch 'PHP-7.4' 2020-08-10 19:11:48 -04:00
George Wang 1b0a2bb0f5 Merge branch 'PHP-7.3' into PHP-7.4 2020-08-10 19:11:26 -04:00
George Wang 07cb2755be Make sure string is NUL byte terminated. 2020-08-10 19:11:03 -04:00
Christoph M. Becker 2538e31b58 Fix signature of callback function
Cf. <https://docs.microsoft.com/en-us/windows/win32/api/imagehlp/nc-imagehlp-pimagehlp_status_routine>.
2020-08-10 23:26:54 +02:00
Nikita Popov 7e87173497 Merge branch 'PHP-7.4'
* PHP-7.4:
  Check the correct list
2020-08-10 21:53:26 +02:00
Nikita Popov 81e31eff0b Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Check the correct list
2020-08-10 21:53:20 +02:00
Nikita Popov 4723bd4ffa Check the correct list
This was supposed to check mx_list, not weight_list... oops.
2020-08-10 21:52:36 +02:00
Nikita Popov 59fbdf7326 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix bug #79944
2020-08-10 20:43:24 +02:00
Nikita Popov 5b8b480d23 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix bug #79944
2020-08-10 20:43:13 +02:00
Nikita Popov a06eed0c0e Fix bug #79944
Only return true from dns_get_mx if we actually found any MX record.
2020-08-10 20:42:50 +02:00
Nikita Popov 657707a105 Skip bug70417.phpt if lsof output looks wrong
On alpine lsof accepts -p but it doesn't actually do anything.
Add a crude check for whether lsof looks like Linux lsof.
2020-08-10 15:59:08 +02:00
Nikita Popov 217d05b18e Check permissions in pcntl_unshare_03.phpt 2020-08-10 15:59:02 +02:00
Nikita Popov dad25538f6 Don't check specific message in socket_shutdown.phpt 2020-08-10 15:58:54 +02:00
Nikita Popov e4f5190942 Only test one error in socket_strerror() test
The messages differ by used libc and version, so let's not try to
do exhaustive testing here.
2020-08-10 15:58:38 +02:00
Nikita Popov c439f1fa6a Fixed bug #62294
The primary issue was already resolved in 7c3e487289,
but the particular example used in this bug report ran into an
additional issue on PHP 8, because I forgot to drop a number of
zend_bailout calls when switch require failure to throw.
2020-08-10 12:54:02 +02:00
Nikita Popov 7c3e487289 Fixed bug #65275
Make EG(exit_status) the single source of truth for the exit status,
instead of having two variables that we cannot really keep
synchronized.
2020-08-10 12:40:26 +02:00
Christoph M. Becker 4c1a490be5 Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Fix #79922: Crash after multiple calls to xml_parser_free()
2020-08-10 12:27:33 +02:00
Christoph M. Becker 2830c3ef52 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #79922: Crash after multiple calls to xml_parser_free()
2020-08-10 12:25:26 +02:00
Christoph M. Becker 0af3f49312 Fix #79922: Crash after multiple calls to xml_parser_free()
We must not call `zend_list_delete()` in resource closer functions
exposed to userland, because decreasing the refcount there leads to
use-after-free scenarios.  In this case, commit 4a42fbb worked for
typical use-cases where `xml_parser_free()` has been called exactly
once for the resource, because there is an internal zval (`->index`)
referencing the same resource which already increased the refcount by
one.  However, when `xml_parser_free()` is called multiple times on the
same XML parser resource, the resource would be freed prematurely.

Instead we forcefully close the resource in `xml_parser_free()`.  We
also could decrease the refcount of the resource there, but that would
require to call `xml_parser_free()` which is somewhat uncommon, and
would be particularly bad wrt. PHP 8 where that function is a NOP, and
as such doesn't have to be called.  So we do no longer increase the
refcount of the resource when copying it to the internal zval, and let
the usualy refcounting semantics take care of the resource destruction.

[1] <http://git.php.net/?p=php-src.git;a=commit;h=4a42fbbbc73aad7427aef5c89974d1833636e082>
2020-08-10 12:23:44 +02:00
Nikita Popov 90a2c79be0 Remove some unnnecessary null checks in openssl
Remove null checks before EVP_PKEY_free and BIO_free. NULL is a
no-op for both of these. Probably applies to most other freeing
function as well...
2020-08-10 12:10:30 +02:00
Nikita Popov 80d3ce3d19 Improve X509_PKEY management in OpenSSL
Remove the free_pkey argument from php_openssl_pkey_from_zval,
instead return an EVP_PKEY that always needs to be freed
(by incrementing refcount if necessary).

This makes the code simpler and fixes a number of bugs in the
existing handling.

Closes GH-5946.
2020-08-10 11:43:49 +02:00
Nikita Popov e81ad4089e Expand upgrading note for namespaced name change
Mention the case from bug #79942.

[ci skip]
2020-08-10 11:20:07 +02:00
Nikita Popov ee16316148 Fixed bug #79948
Make sure we don't execute further scripts if one of them encountered
an exit exception.

Also make sure that we free file handles that end up unused due to
an early abort in php_execute_scripts(), which turned up as an
issue in the added test case.

Finally, make use of EG(exit_status) in the places where we
zend_eval_string_ex, instead of unconditionally assigning exit
code 254. If an error occurs, the error handler will already set
exit status 255.
2020-08-10 11:15:16 +02:00
Nikita Popov 1974522a2d Fixup phar test 2020-08-10 10:47:18 +02:00
Nikita Popov 896dad4c79 Fixed bug #77561
Unconditionally strip shebang lines when using the CLI SAPI,
independently of whether they occur in the primary or non-primary
script. It's unlikely that someone intentionally wants to print
that shebang line when including a script, and this regularly
causes issues when scripts are used in multiple contexts, e.g.
for direct invocation and as a phar bootstrap.
2020-08-10 10:38:33 +02:00
Nikita Popov 74c4381806 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fixed bug #79947
2020-08-10 10:13:34 +02:00
Nikita Popov 2d087210eb Fixed bug #79947
Move the FREE_OP for op_data out of the zend_binary_assign_op_dim_slow()
slow path, so it can be used by the other error path as well. This
makes ASSIGN_DIM_OP structurally more similar to ASSIGN_DIM.
2020-08-10 10:11:56 +02:00
Nikita Popov da0a0a13be Fixed bug #79946
Declare __STDC_CONSTANT_MACROS and __STDC_FORMAT_MACROS via -D
to make sure they are declared before the first stdint.h include.
We also define these in php_stdint.h, but don't always include that
file first.

This is necessary for old compilers that use C99 rather than C11
semantics for stdint.h.
2020-08-10 09:52:22 +02:00
David Carlier cedf463d1b proc_open/openpty: DragonFlyBSD build fix.
Similarly to NetBSD emalloc-ish api had been introduced into libutil.

Closes GH-5960.
2020-08-10 09:49:18 +02:00
Nikita Popov a41cf3e1d2 Revert "Make diff section contents red(-)/green(+) in run-tests.php"
This reverts commit 58489bd3b9.

This also uses ANSI escape code coloring for .diff files, where it
is not meaningful.
2020-08-10 09:38:48 +02:00
Tyson Andre 58489bd3b9 Make diff section contents red(-)/green(+) in run-tests.php
This uses green for lines with `+` and red for lines with `-`.

Colors(Red and Green) would make the failure causes stand out visually when scrolling through errors.

Closes GH-5965
2020-08-09 20:59:43 -04:00
Tyson Andre e79adf6381 Use short array values in run-tests.php
The run-tests.php file already requires php 7 syntax.
Done automatically with phpcbf with no other changes done/planned.

This file is already using short arrays in other places.

run-tests has already been substantially refactored in PHP 8.0
compared to PHP 7.4.

This makes merge conflicts more likely, but changes to run-tests.php on older
versions are less frequent bug fixes.
2020-08-09 16:09:55 -04:00
Máté Kocsis 7aacc705d0 Add many missing closing PHP tags to tests
Closes GH-5958
2020-08-09 22:03:36 +02:00
Nikita Popov 05478e985e Fix m4 quotation
We should not try to expand AX_CHECK_COMPILE_FLAG inside the
error message...
2020-08-08 10:38:51 +02:00
George Peter Banyard e208cb23c6 Promote various warnings to Error in GMP extension
This gets rid of most false returns

Closes GH-5882
2020-08-07 18:17:34 +02:00
George Peter Banyard 5d72e40dfb Add colours to test results in run-tests.php
The test runner will attempt to colourise the result of each test

The --no-color option is introduced to disable this feature.

Closes GH-5901
2020-08-07 18:17:34 +02:00
George Peter Banyard c74001997f Drop '#if 0' in mysqlnd_debug() from the MySQLnd extension
Closes GH-5587
2020-08-07 18:17:33 +02:00
Nikita Popov 8bc505cf47 Remove some duplicate iconv path logic
PHP_SETUP_ICONV already adds the include path to INCLUDES and the
library path to SHARED_LIBADD.
2020-08-07 18:10:29 +02:00
Nikita Popov 7bd1d70341 Remove PHP_ICONV_H_PATH
Directly include <iconv.h> instead, now that the giconv.h
distinction no longer exists.
2020-08-07 17:03:41 +02:00
Nikita Popov 2d359749a4 Remove giconv support
The best information I was able to find about this is this mail
from 2009 which indicates that giconv is an old FreeBSD iconv
implementation that has long since been superseded by libiconv.

https://lists.samba.org/archive/samba-technical/2009-June/065177.html
2020-08-07 17:03:41 +02:00
Nikita Popov 65592840f0 Remove more leftovers of PHP_DEFINE handling 2020-08-07 17:03:41 +02:00
David Carlier 327db7e595 opcache gdb: Set the EI_OSABI value for NetBSD.
Closes GH-5948.
2020-08-07 17:00:32 +02:00
Máté Kocsis 046cc5e4c2 Add another round of missing parameter types to stubs
Closes GH-5950
2020-08-07 16:48:45 +02:00
Máté Kocsis 7b9f37c389 Fix ZPP order in ext/phar 2020-08-07 16:47:50 +02:00
Nikita Popov 45ece5bf19 Add UPGRADING.INTERNALS notes for zend_object* changes
Closes GH-5953.
2020-08-07 16:40:27 +02:00
Nikita Popov 8b77c58130 Accept zend_object* in zend_update_property 2020-08-07 16:40:27 +02:00
Nikita Popov 01cbb5967c Accept zend_object* in zend_unset_property 2020-08-07 16:40:27 +02:00
Nikita Popov 978b7de244 Accept zend_object* in zend_get_exception_base 2020-08-07 16:40:27 +02:00
Nikita Popov 7991fc2753 Accept zend_object in zend_read_property 2020-08-07 16:40:27 +02:00
Christoph M. Becker 0400d07e61 Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Prevent tempnam tests conflicts
2020-08-07 15:06:40 +02:00
Christoph M. Becker fa9bd812fc Prevent tempnam tests conflicts 2020-08-07 15:04:27 +02:00
Nikita Popov 17d1eb3ca6 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix bug #70574: Move files to proper locale dir
2020-08-07 14:37:50 +02:00
Nikita Popov fab2c3ba86 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix bug #70574: Move files to proper locale dir
2020-08-07 14:37:43 +02:00
Florian Engelhardt 5be670265b Fix bug #70574: Move files to proper locale dir
Closes GH-5940.
2020-08-07 14:37:27 +02:00
Nikita Popov e6f7784210 Don't use PHP_DEFINE in iconv
iconv is the only consumer of this custom define mechanism that
puts every define into a single file. Use the standard mechanism
instead.
2020-08-07 14:29:04 +02:00
Máté Kocsis af80d8a14e Add more argument types to stubs
Closes GH-5943
2020-08-07 12:35:30 +02:00
Nikita Popov 3bb1830369 Reapply "Explicitly validate popen mode"
To avoid behavior differences due to libc. This time with the
check only for the non-win32 case, as Windows support additional
modifiers here (t/b).
2020-08-07 10:33:27 +02:00
Nikita Popov 7c8467562d Revert "Explicitly validate popen mode"
This reverts commit ab36540bdd.

Causes a test failure on Windows.
2020-08-06 21:53:13 +02:00
George Peter Banyard 11274f53e7 Add type information to test-runner
Closes GH-5942
2020-08-06 20:37:36 +02:00
George Peter Banyard 196f8fdfc3 Promote warnings to Error in FileInfo extension
Closes GH-5914
2020-08-06 13:37:36 +02:00
Nikita Popov b3f0f35fd7 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix file clash in zlib test
2020-08-06 12:35:37 +02:00
Nikita Popov a35379de2e Fix file clash in zlib test 2020-08-06 12:34:14 +02:00
Derick Rethans da56e87eca Mention security in step 3, as otherwise it might be overlooked 2020-08-06 11:14:39 +01:00
Nikita Popov fcff418411 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix #79934: CRLF-only line in heredoc causes parsing error
2020-08-06 12:04:23 +02:00
Nikita Popov 2cbc94097e Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #79934: CRLF-only line in heredoc causes parsing error
2020-08-06 12:03:57 +02:00
Pieter van den Ham 06ade15528 Fix #79934: CRLF-only line in heredoc causes parsing error
Fixes the function `next_newline()` in zend_language_scanner.l. The
function now correctly returns a newline_len of 2 for "\r\n".

Closes GH-5944.
2020-08-06 12:02:54 +02:00
Nikita Popov 84a080ef50 Avoid getThis() usages in zip extension
There isn't any magic going on here, we can just use ZEND_THIS
and assume it exists.
2020-08-06 11:28:35 +02:00
Nikita Popov ab36540bdd Explicitly validate popen mode
To avoid behavior differences due to libc.
2020-08-06 10:26:46 +02:00
Nikita Popov 0dda242bde Add GLOB_BRACE skipif 2020-08-06 10:26:32 +02:00
Nikita Popov 069bd49b02 Temporarily disable s390x job
These aren't getting scheduled and just keep hogging jobs so
nothing else gets scheduled either.
2020-08-05 19:58:44 +02:00
Nikita Popov 2965c8f868 Prefer strtoll over atoll
Both are specified by C99, but strtoll has specified overflow
behavior while atoll does not, so prefer using it.
2020-08-05 18:40:23 +02:00
Nikita Popov 74b285d78c Merge branch 'PHP-7.4'
* PHP-7.4:
  Check ps -p availability in process title test
  Add privilege check in pcntl_unshare test
2020-08-05 18:18:51 +02:00
Nikita Popov 99645f5352 Check ps -p availability in process title test 2020-08-05 18:18:18 +02:00
Nikita Popov 8fd79d3574 Add privilege check in pcntl_unshare test
Privileges for CLONE_NEWPID were not checked.
2020-08-05 18:18:06 +02:00
Nikita Popov 52047addc7 Only force log startup errors if display_startup_errors disabled
Otherwise this results in duplicate errors.

Closes GH-5941.
2020-08-05 18:17:00 +02:00
Nikita Popov af64001dcb Normalize error message capitalization 2020-08-05 16:44:06 +02:00
Nikita Popov 25d849d40b Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix memory leak on socket_sendmsg() / socket_recvmsg() error
2020-08-05 16:42:55 +02:00
Nikita Popov 3b86be23e6 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix memory leak on socket_sendmsg() / socket_recvmsg() error
2020-08-05 16:42:13 +02:00
Nikita Popov 6a1bd57df5 Fix memory leak on socket_sendmsg() / socket_recvmsg() error 2020-08-05 16:41:40 +02:00
Nikita Popov 643145b59d Merge branch 'PHP-7.4'
* PHP-7.4:
  Fixed bug #79930
  Fix iov_base pointer type for illumos
  Backport bless_tests.php changes from PHP 8
2020-08-05 15:44:04 +02:00
Nikita Popov 6bf8ff6d97 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fixed bug #79930
2020-08-05 15:44:00 +02:00
Nikita Popov da786a22af Fixed bug #79930
We're inserting src_zval, so that's what we should addref.
2020-08-05 15:43:41 +02:00
Nikita Popov 9d9fa32fe5 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix iov_base pointer type for illumos
2020-08-05 15:18:03 +02:00
David Carlier 12db8b90a7 Fix iov_base pointer type for illumos
These systems has two versions of the iovec interface dependent on
compiler flags passed, the legacy version causing little build issue.

Closes GH-5939.
2020-08-05 15:17:51 +02:00
Nikita Popov a2604e628f Backport bless_tests.php changes from PHP 8 2020-08-05 14:59:56 +02:00
Nikita Popov 002908a5c5 Merge branch 'PHP-7.4'
* PHP-7.4:
  Unset ai_canonname field in dump
2020-08-05 14:59:06 +02:00
Nikita Popov b69a98cfb3 Unset ai_canonname field in dump
Okay, looks like ai_canonname does not get set on macos even if
AI_CANONNAME is specified, so canonicalize this in the other
direction instead and unset ai_canonname if it is present.
2020-08-05 14:58:56 +02:00
Nikita Popov 7575340427 Merge branch 'PHP-7.4'
* PHP-7.4:
  Check ps -p availability in proc_nice test
  Set AI_CANONNAME flag in socket_addrinfo test
  Add ipv6 skipif to test
  Improve privilege check in pcntl_setpriority() test
2020-08-05 12:12:24 +02:00
Nikita Popov 25bdf9d3e0 Check ps -p availability in proc_nice test 2020-08-05 12:10:35 +02:00
Nikita Popov 741daa8605 Set AI_CANONNAME flag in socket_addrinfo test
Musl always populates ai_canonname. Set the flag to avoid output
discrepancies.
2020-08-05 12:10:12 +02:00
Nikita Popov 58ab49111e Add ipv6 skipif to test
This was done for the -unix variant, but not the (formerly
windows-only?) main test.
2020-08-05 12:09:54 +02:00
Nikita Popov 34e7d78df7 Improve privilege check in pcntl_setpriority() test
We need CAP_SYS_NICE privileges, which might not be available
just because we're running as root (Docker...)
2020-08-05 12:09:10 +02:00
Nikita Popov 879525efa8 Merge branch 'PHP-7.4'
* PHP-7.4:
  Suppress warning in pcntl_unshare skipif
  Use standard types in fopencookie test
  Remove posix_kill() test
  Relax error message check
  Check whether setlocale -a is available
2020-08-05 10:42:08 +02:00
Nikita Popov fcfa0a46c3 Suppress warning in pcntl_unshare skipif 2020-08-05 10:39:45 +02:00
Nikita Popov 4cc4f9c00a Use standard types in fopencookie test
Instead of internal __size_t / __off64_t types use ssize_t and off64_t.
This makes it work on musl as well.
2020-08-05 10:39:37 +02:00
Nikita Popov ef773bf4d5 Remove posix_kill() test
This test is doing something really dubious. There's a race
condition here that would kill some poor process that happens
to start at just the wrong time.
2020-08-05 10:39:30 +02:00
Nikita Popov b6e45b58d7 Relax error message check 2020-08-05 10:39:17 +02:00
Nikita Popov ee75524bff Check whether setlocale -a is available 2020-08-05 10:38:59 +02:00
Nikita Popov 36a1197f12 Suppress warning in pcntl_unshare skipif 2020-08-05 09:46:07 +02:00
Nikita Popov b0d139456a Use standard types in fopencookie test
Instead of internal __size_t / __off64_t types use ssize_t and off64_t.
This makes it work on musl as well.
2020-08-05 09:45:51 +02:00
Nikita Popov ed13fee971 Remove posix_kill() test
This test is doing something really dubious. There's a race
condition here that would kill some poor process that happens
to start at just the wrong time.
2020-08-05 09:45:42 +02:00
Nikita Popov 430137d82a Relax error message check 2020-08-05 09:45:32 +02:00
Nikita Popov b1ce3d29ff Check whether setlocale -a is available 2020-08-05 09:45:21 +02:00
Gabriel Caruso 542ef74533 Update NEWS for 8.0.0beta2 2020-08-04 22:26:01 +02:00
Gabriel Caruso 7479ab9f80 Update API version numbers
In preparation for PHP 8.0.
2020-08-04 22:25:28 +02:00
Nikita Popov 0d836a39a7 Revert "Prepare for PHP 8.1"
This reverts commit 1ab4d0e6b7.
This reverts commit a359635cb1.
2020-08-04 22:24:44 +02:00
Jakub Zelenka 37a878b8c3 FPM: Prevent warning with raising pm.max_children for shared pool 2020-08-04 21:01:13 +01:00
Gabriel Caruso a359635cb1 Prepare for PHP 8.1 2020-08-04 18:46:14 +02:00
Gabriel Caruso 1ab4d0e6b7 Update API version numbers
In preparation for PHP 8.0.
2020-08-04 18:07:16 +02:00
Nikita Popov 300d108a0e Relax precision in atan test 2020-08-04 16:12:40 +02:00
Nikita Popov feba69ce2d Relax precision in hypot test 2020-08-04 16:12:33 +02:00
Nikita Popov 442cf83b5c Add compatibility define for PHP_CHECK_GCC_ARG
This defines the m4 macro, but makes it always error.
2020-08-04 16:11:58 +02:00
Christoph M. Becker 9acabd8389 Merge branch 'PHP-7.4' into master
* PHP-7.4:
  [ci skip] Fix 7.3.21 release date
2020-08-04 12:34:54 +02:00
Christoph M. Becker 6a5f8512ac Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  [ci skip] Fix 7.3.21 release date
2020-08-04 12:32:32 +02:00
Christoph M. Becker c4677af67e [ci skip] Fix 7.3.21 release date 2020-08-04 12:31:24 +02:00
David Carlier 362194165a Fix opcache JIT on NetBSD with PaX
When PaX mprotect active, opcache JIT test fail as it needs
the PROT_MPROTECT macro to be able to allow further permission
promotion with mprotect.

Closes GH-5929.
2020-08-04 10:34:31 +02:00
Nikita Popov 4644a3ed8a XFAIL status-listen FPM test
Has frequent intermittent failures with:

ERROR: The NOTICE does not match expected message:
- PATTERN: /^\[\d\d-\w\w\w-\d{4} \d\d:\d\d:\d\d\] NOTICE: Terminating ...$/
- MESSAGE: [04-Aug-2020 08:15:37] WARNING: [pool unconfined_status] server reached max_children setting (2), consider raising it
- EXPECT: 'Terminating ...'
- ACTUAL: '2020 08:15:37] WARNING: [pool unconfined_status] server reached max_children setting (2), consider raising it'
2020-08-04 10:27:33 +02:00
Nikita Popov 10cf18ce6e Merge branch 'PHP-7.4'
* PHP-7.4:
  Manually build re2c on macos
2020-08-04 10:26:27 +02:00
Nikita Popov 9bbe236f6a Manually build re2c on macos
Avoid issues with the licensing mafia, see:
https://github.com/Homebrew/homebrew-core/pull/59094

Closes GH-5932.
2020-08-04 10:26:02 +02:00
Benjamin Eberlei 53ef244923 Add opcache.jit=tracing|function values, make on/yes/true synonym for tracing. 2020-08-04 10:15:22 +02:00
Remi Collet 1213907b83 Merge branch 'PHP-7.4'
* PHP-7.4:
  bump version to 7.2.34-dev
  Update NEWS
2020-08-04 09:56:07 +02:00
Remi Collet 09be6394ad Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  bump version to 7.2.34-dev
  Update NEWS
2020-08-04 09:55:50 +02:00
Remi Collet 4221e000b1 Merge branch 'PHP-7.2' into PHP-7.3
* PHP-7.2:
  bump version to 7.2.34-dev
  Update NEWS
2020-08-04 09:55:40 +02:00
Remi Collet 6b8ffdbdeb bump version to 7.2.34-dev 2020-08-04 09:55:29 +02:00
Máté Kocsis ae34a6539f Fix Socket related tests on Windows 2020-08-04 09:25:41 +02:00
Máté Kocsis 2d32b633b2 Cleanup snmp after resource to object migration 2020-08-04 09:14:12 +02:00
Máté Kocsis 040b5e727a Fix posix test 2020-08-04 09:11:55 +02:00
Christoph M. Becker bfdbb90d30 Fix Windows build 2020-08-04 00:10:29 +02:00
Máté Kocsis 71bfa5344a Add upgrading note for the resource to object migration in ext/sockets 2020-08-03 23:41:00 +02:00
Theodore Brown e2b4687403 Minor grammar/consistency fixes in upgrade guide
[ci skip]
2020-08-03 15:34:10 -06:00
Máté Kocsis 77172c220a Convert resources to objects in ext/sockets
Closes GH-5900.
2020-08-03 23:26:38 +02:00
Dik Takken e0fa48f69d Deprecate libxml_disable_entity_loader()
This method was used to protect code against XXE processing attacks.
Since PHP now requires libxml >= 2.9.0 external entity loading no longer
needs to be disabled to prevent these attacks. It is disabled by default.
Also, the method has an unwanted side effect that causes a lot of
confusion: Parsing XML data from resources like files is no longer possible.

Closes GH-5867.
2020-08-03 21:53:29 +02:00
Dik Takken 691a09f291 Bump libxml version requirement 2.7.6 => 2.9.0
Since libxml version 2.9.0 external entity loading is disabled by default.
Bumping the version requirement means that XML processing in PHP is no
longer vulnerable to XXE processing attacks by default.
2020-08-03 21:51:10 +02:00
Jakub Zelenka 44c7128fb7 FPM: Add pm.status_listen option
This option allows getting status from different endpoint (e.g. port
or UDS file) which is useful for getting status when all children are
busy with serving long running requests.

Internally a new shared pool with ondemand process manager is used. It
means that the status requests have reserved resources and should not
be blocked by other requests.
2020-08-03 19:14:13 +01:00
Máté Kocsis 4c89ed61fb Promote warnings to exceptions in ext/gettext, ext/sysvmsg and ext/xml
Closes GH-5926
2020-08-03 20:09:28 +02:00
Tyson Andre 0c238ede01 [RFC] Only unserialize Phar metadata when getMetadata() is called
In other words, don't automatically unserialize when the magic
phar:// stream wrappers are used.
RFC: https://wiki.php.net/rfc/phar_stop_autoloading_metadata

Also, change the signature from `getMetadata()`
to `getMetadata(array $unserialize_options = [])`.
Start throwing earlier if setMetadata() is called and serialization threw.

See https://externals.io/message/110856 and
https://bugs.php.net/bug.php?id=76774

This was refactored to add a phar_metadata_tracker for the following reasons:
- The way to properly copy a zval was previously implicit and undocumented
  (e.g. is it a pointer to a raw string or an actual value)
- Avoid unnecessary serialization and unserialization in the most common case
- If a metadata value is serialized once while saving a new/modified phar file,
  this allows reusing the same serialized string.
- Have as few ways to copy/clone/lazily parse metadata (etc.) as possible,
  so that code changes can be limited to only a few places in the future.
- Performance is hopefully not a concern - copying a string should be faster
  than unserializing a value, and metadata should be rare in most cases.

Remove unnecessary skip in a test(Compression's unused)

Add additional assertions about usage of persistent phars

Improve robustness of `Phar*->setMetadata()`

- Add sanity checks for edge cases freeing metadata, when destructors
  or serializers modify the phar recursively.
- Typical use cases of php have phar.readonly=1 and would not be affected.

Closes GH-5855
2020-08-03 13:28:51 -04:00
Rowan Tommins f9f769d4b9 Make http stream wrapper advertise HTTP/1.1 by default
In practice, we always act as an HTTP/1.1 client, for compatibility
with servers which ignore protocol version. Sending the version in
the request will avoid problems with servers which don't ignore it.

HTTP/1.0 can still be forced using a stream context option.

Closes GH-5899.
2020-08-03 16:30:09 +02:00
Levi Morrison 9b975fe98e Merge branch 'levim/assert-throw'
This changes assert.exception to default to 1, or on by default.
Closes GH-5925.
2020-08-03 08:04:48 -06:00
Nikita Popov b7f281f09a Merge branch 'PHP-7.4'
* PHP-7.4:
  Removed space from bug55086.phpt
2020-08-03 15:15:04 +02:00
Nikita Popov dc1107ba5b Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Removed space from bug55086.phpt
2020-08-03 15:14:36 +02:00
Graham Campbell f3a43e85e7 Removed space from bug55086.phpt
Closes GH-5923.
2020-08-03 15:14:15 +02:00
Santiago M. Mola 65713aaddd Fix #79923: fix socket_set_option_bindtodevice test
Closes GH-5924.
2020-08-03 15:03:07 +02:00
Nikita Popov 501db98e57 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix bug #79924
2020-08-03 14:56:57 +02:00
Nikita Popov 8b4da1774f Fix bug #79924
Move functions that are only used with ipv6 support under
HAVE_IPV6 checks.
2020-08-03 14:56:27 +02:00
Nikita Popov 56f11e2d1f Merge branch 'PHP-7.4'
* PHP-7.4:
  set -ex on travis/compile.sh
2020-08-03 14:48:40 +02:00
Nikita Popov c0fac0357c Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  set -ex on travis/compile.sh
2020-08-03 14:48:18 +02:00
Santiago M. Mola fdf6b0fefe set -ex on travis/compile.sh
-e to fail early: ./configure may fail and further errors from make bury
the original problem in the logs.

-x for easier debugging
2020-08-03 14:48:00 +02:00
Nikita Popov c48b745f00 Promote "undefined array key" notice to warning
This implements the last remaining part of the
https://wiki.php.net/rfc/engine_warnings RFC.

Closes GH-5927.
2020-08-03 14:40:50 +02:00
Christoph M. Becker b9171d8a93 Fix fix for bug #79877 for PHP 8
PHP 8 is supposed to throw here.
2020-08-03 12:01:56 +02:00
Nikita Popov b891adea8d Don't suppress notices in rfc1867 tests
The references notices in debug builds don't seem to be present
anymore.
2020-08-03 11:58:59 +02:00
Christoph M. Becker c169819750 Merge branch 'PHP-7.4' into master
* PHP-7.4:
  [ci skip] Add missing NEWS entries
2020-08-03 11:21:39 +02:00
Christoph M. Becker 6f0c3386d4 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  [ci skip] Add missing NEWS entries
2020-08-03 11:19:44 +02:00
Christoph M. Becker 17d64af186 [ci skip] Add missing NEWS entries 2020-08-03 11:18:18 +02:00
Nikita Popov 7a4b594c6f Convert SPL illegal offset type into TypeError
Make this consistent with the corresponding engine behavior.
Also adjust the messages to match.
2020-08-03 11:17:49 +02:00
Christoph M. Becker e1f55de8b9 Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Fix #79877: getimagesize function silently truncates after a null byte
  Fix #79797: Use of freed hash key in the phar_parse_zipfile function
  Fix #79877: getimagesize function silently truncates after a null byte
  Fix #79797: Use of freed hash key in the phar_parse_zipfile function
2020-08-03 11:15:24 +02:00
Christoph M. Becker cf855ede8a Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #79877: getimagesize function silently truncates after a null byte
  Fix #79797: Use of freed hash key in the phar_parse_zipfile function
2020-08-03 11:13:49 +02:00
Gregor Harlan a6e3ce4fd6 datetime: new format "p", same as "P" but returning "Z" for UTC 2020-08-03 10:44:48 +02:00
Nikita Popov bb8b95be63 Fix bug #79925
If the expected return type of a magic method is "object", we also
need to allow class types and "static" to comply with covariance.
2020-08-03 10:35:26 +02:00
Nikita Popov 5d4659c25c Enforce __set_state() parameter type
This fixes one of the issues reported in bug #79925. The parameter
type check for this particular method was missed.
2020-08-03 10:23:06 +02:00
Nikita Popov a4c015b4b2 Fix handling of nullsafe method in empty()
Fixes oss-fuzz #24627.
2020-08-03 10:16:38 +02:00
Stanislav Malyshev 07aeb9171d Update NEWS 2020-08-03 01:14:38 -07:00
Christoph M. Becker 05c5c93705 Fix #79877: getimagesize function silently truncates after a null byte
We have to check for NUL bytes if `getimagesize()` has been called.
2020-08-03 01:10:24 -07:00
Christoph M. Becker 775385df0e Fix #79797: Use of freed hash key in the phar_parse_zipfile function
We must not use heap memory after we freed it.
2020-08-03 01:10:22 -07:00
Christoph M. Becker 4d2560dd6a Fix #79877: getimagesize function silently truncates after a null byte
We have to check for NUL bytes if `getimagesize()` has been called.
2020-08-03 01:09:44 -07:00
Christoph M. Becker 9c3171f019 Fix #79797: Use of freed hash key in the phar_parse_zipfile function
We must not use heap memory after we freed it.
2020-08-03 01:09:44 -07:00
Christoph M. Becker 24495ba778 Merge branch 'PHP-7.4' into master
* PHP-7.4:
  Enable libxml entity loader test case on Windows
2020-08-03 09:15:50 +02:00
Christoph M. Becker d4b32e82c8 Enable libxml entity loader test case on Windows 2020-08-03 09:13:30 +02:00
Stanislav Malyshev 5b29af5c78 Merge branch 'PHP-7.2' into PHP-7.3
* PHP-7.2:
  Fix #79877: getimagesize function silently truncates after a null byte
  Fix #79797: Use of freed hash key in the phar_parse_zipfile function
2020-08-02 23:56:37 -07:00
tangl163 7d4ae7fa23 Drop the unneeded pointer casting
The standard says that "A pointer to void may be converted to or from a
pointer to any object type". So the casting is unneeded.

REF:
    * c11: http://port70.net/~nsz/c/c11/n1570.html#6.3.2.3p1
    * c99: http://port70.net/~nsz/c/c99/n1256.html

Closes GH-5916
2020-08-03 02:05:14 +01:00
Derick Rethans 90434d7fe3 Fixed bug #60302: DateTime::createFromFormat should new static(), not new self()
Also fixes similar issues for DateTimeImmutable::createFromFormat,
DateTime::createFromImmmutable, DateTime::createFromInterface,
DateTimeImmutable::createFromMutable, and
DateTimeImmutable::createFromInterface.
2020-08-03 00:43:41 +01:00
Máté Kocsis 6b7e2f0d15 Fix stub hash of ext/ldap 2020-08-03 01:06:21 +02:00
Máté Kocsis 79981a394e Add a bunch of missing argument types to stubs 2020-08-03 00:45:51 +02:00
Máté Kocsis 6ba24e9615 Improve a few parameter names in ext/spl
Use the same names which are used by zend functions.
2020-08-03 00:45:12 +02:00
Máté Kocsis 156c1806db Convert the $ttl parameter of ldap_exop_refresh() to int 2020-08-03 00:38:59 +02:00
Christoph M. Becker ff577b04c0 Fix #79877: getimagesize function silently truncates after a null byte
We have to check for NUL bytes if `getimagesize()` has been called.
2020-08-02 15:33:24 -07:00
Christoph M. Becker 7355ab8176 Fix #79797: Use of freed hash key in the phar_parse_zipfile function
We must not use heap memory after we freed it.
2020-08-02 15:31:29 -07:00
Levi Morrison 853eb8373f Default assert.exception to 1 2020-08-02 13:39:35 -06:00
Nikita Popov 00743f3fae Bump timeouts, again
Now that we're testing an additional JIT configuration in nightly
builds, the jobs are running close to an hour.

[ci skip]
2020-08-02 10:11:33 +02:00
Gabriel Caruso e3d06fc79d Ensure correct signatures for magic methods 2020-08-02 01:29:56 +02:00
Tyson Andre 650801ce45 [skip ci] Fix grammar/typo nits in docs
The PHP error message says "well-formed", not "well formed"

Fixes GH-5920
2020-08-01 18:03:45 -04:00
Máté Kocsis bdacd2ae8f Add a few missing types to stubs 2020-08-01 23:55:08 +02:00
Nikita Popov c10a406500 Bump timeout again 2020-08-01 23:50:56 +02:00
Máté KocsisandNikita Popov 9f44eca6b6 Convert resources to objects in ext/openssl
Closes GH-5860

Co-authored-by: Nikita Popov <nikita.ppv@gmail.com>
2020-08-01 22:47:20 +02:00
Tyson Andre 97f10fc341 Allow overriding completion in auto_prepend_file
Currently, it's possible to override `php -a`s completion
functionality to provide an alternative to the C implementation,
with `readline_completion_function()`.

However, that surprisingly gets overridden when called from
`auto_prepend_file`, because those scripts get run before the interactive shell
is started. I believe that not overriding it would be more consistent
with what happens when you override the completion function **after** the
interactive shell.

CLI is the only built-in API that uses this (See discussion in GH-5872).
I believe MINIT and RINIT will only run once when invoked with `php -a`.

Add documentation about the architecture of how php uses readline/libedit

Closes GH-5872
2020-08-01 11:39:08 -04:00
Máté Kocsis ec22e5aa38 Get rid of empty function entries
Closes GH-5917
2020-08-01 10:07:05 +02:00
Nikita Popov d92229d8c7 Implement named parameters
From an engine perspective, named parameters mainly add three
concepts:

 * The SEND_* opcodes now accept a CONST op2, which is the
   argument name. For now, it is looked up by linear scan and
   runtime cached.
 * This may leave UNDEF arguments on the stack. To avoid having
   to deal with them in other places, a CHECK_UNDEF_ARGS opcode
   is used to either replace them with defaults, or error.
 * For variadic functions, EX(extra_named_params) are collected
   and need to be freed based on ZEND_CALL_HAS_EXTRA_NAMED_PARAMS.

RFC: https://wiki.php.net/rfc/named_params

Closes GH-5357.
2020-07-31 15:53:36 +02:00
George Peter Banyard 9a71d47d73 Throw ValueError on empty tag in enchant_broker_request_dict() 2020-07-31 14:35:14 +01:00
George Peter Banyard 0ba31e19c6 Change leftover RETURN_FALSE to RETURN_THROWS() from 4095c0a 2020-07-31 14:11:10 +01:00
George Peter Banyard 4095c0a28d Promote empty filename to ValueError in BZ2 extension 2020-07-31 14:01:05 +01:00
George Peter Banyard c3105a1f8d ValueError for empty path in stream code
Closes GH-5902
2020-07-31 13:39:58 +01:00
George Peter Banyard f78a091014 Warning to ValueError promotion in Intl extension Part 1
Affects:
- IntlCalendar
- IntlGregorianCalendar
- IntlBreakIterator

Closes GH-5669
2020-07-31 13:27:22 +01:00
Nikita Popov d3a9e1503f Update i386 job to Ubuntu 20.04 2020-07-31 12:52:40 +02:00
Nikita Popov 91a1747ef7 Also run function jit tests on macos 2020-07-31 12:51:58 +02:00
Nikita Popov a6e63b42c3 Make check in RECV_VARIADIC more precise
Fetch arg_info only once (it's always the same one...) and check
ZEND_TYPE_IS_SET on it, rather than checking if *any* parameter
has a type.
2020-07-31 12:02:28 +02:00
Dmitry Stogov b3e12325f6 Fixed JIT when result of ASSIGN is in register, but the original variable might need to be destroyed 2020-07-31 12:31:46 +03:00
Christoph M. Becker 8c4f7d668e Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix #79919: Stack use-after-scope in define()
2020-07-31 10:59:17 +02:00
Christoph M. Becker fce8061ede Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #79919: Stack use-after-scope in define()
2020-07-31 10:57:02 +02:00
Christoph M. Becker 1e0bc6e30f Fix #79919: Stack use-after-scope in define()
Instead of the temporary `rv`, we use the `val_free` which is there for
this purpose.
2020-07-31 10:54:41 +02:00
Máté Kocsis 02b03df91a Document the signature change of zend_get_closure_method_def() 2020-07-31 10:04:49 +02:00
Máté Kocsis d94d426f60 Fix the default value handling of imagegif() 2020-07-31 10:01:08 +02:00
Nikita Popov 47e4001976 Remove more unused func_info fields 2020-07-30 18:50:12 +02:00
Dmitry Stogov 8ea9e1ae4c We check result type guard in FETCH_DIM_R/IS only if index is long or string. 2020-07-30 19:19:10 +03:00
Nikita Popov 9dacc85251 Add type inference support for RECV_VARIADIC 2020-07-30 17:14:34 +02:00
Nikita Popov 104b7addc4 Remove unused recv_arg_info from func_info 2020-07-30 17:04:56 +02:00
Nikita Popov ce22cf5198 Remove some dead code in RECV type inference
We must always have arg_info corresponding to RECV.
2020-07-30 16:55:21 +02:00
Dmitry Stogov 28eaad0969 Clear result type for exit point caused by JMPZ_EX/NZ_EX 2020-07-30 17:01:08 +03:00
Dmitry Stogov 8b43976483 Fixed memory leaks caused by incorrect AVOID_REFCOUNTING flag 2020-07-30 16:59:41 +03:00
Máté Kocsis 5f25618f83 Add missing RETURN_THROWS() 2020-07-30 14:55:13 +02:00
Máté Kocsis 0d330e1a02 Add a few missing parameter types in stubs
Related to GH-5627
2020-07-30 14:26:45 +02:00
Dmitry Stogov 41de27ecc2 Skip tests leaking because of preloading failure. 2020-07-30 14:04:14 +03:00
Deus Kane f475edc2f1 Fixed bug #79897: Promoted constructor params with attribs cause crash
This was caused by the attribute AST being used twice, and was fixed by
creating a temporary copy of it (and destroying said copy) when neccesary.
2020-07-30 11:08:31 +02:00
Nikita Popov 3690a805c1 Check non-zero in is_power_of_two()
And assert non-zero in floor_log2().

Fixes DASM_S_RANGE_I in ext/simplexml/tests/021.phpt.
2020-07-30 10:17:37 +02:00
Nikita Popov 849c7415b5 Increase timeout on asan job
We now also run tests with function JIT here, which makes this
slower.

Probably, this job should be split up into asan and ubsan, and
possibly run with optimization.

[ci skip]
2020-07-30 09:59:08 +02:00
Theodore Brown e8c4ae83cb Improve wording and spelling consistency in UPGRADING
[ci skip]
2020-07-29 17:40:02 -06:00
Dmitry Stogov bbbccf0811 Force type update if the previous value was in register only 2020-07-30 01:32:23 +03:00
Dmitry Stogov 713d3ea4e6 Don't skip fcall guard for method calls from trait 2020-07-30 00:31:46 +03:00
Dmitry Stogov 44384dfb3e Fixed temporary register usage 2020-07-29 22:01:19 +03:00
Christoph M. Becker 59921aa9b3 Merge branch 'PHP-7.4'
* PHP-7.4:
  Amendment to OPcache base file removal
2020-07-29 18:45:03 +02:00
Christoph M. Becker 4b84a1f9e0 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Amendment to OPcache base file removal
2020-07-29 18:44:35 +02:00
Christoph M. Becker d95c53834c Amendment to OPcache base file removal
We fix the erroneous segment size.  We also keep the segment pointer at
the allocated address, but increase the position instead.
2020-07-29 18:44:08 +02:00
Christoph M. Becker 88a3bdd1e4 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix #73060: php failed with error after temp folder cleaned up
2020-07-29 18:31:28 +02:00
Nikita Popov 62cd52a41a Update azure macos builds to 10.15
Closes GH-5908.
2020-07-29 18:22:06 +02:00
Christoph M. Becker 2bcc419800 Fix #73060: php failed with error after temp folder cleaned up
Instead of storing the mapping base address and the address of
`execute_ex()` in a separate file in the temporary folder, we store
them right at the beginning of the memory mapping.
2020-07-29 18:21:05 +02:00
Nikita Popov 34fe1b91f6 Run function JIT tests in nightly build
Changing this for primary x64 and i386 jobs for now.
The different test configurations are now consolidated in one
file shared between both.
2020-07-29 18:20:46 +02:00
Nikita Popov d8d2a7801a Merge branch 'PHP-7.4'
* PHP-7.4:
  Consider op1 literal of FETCH_OBJ_R
2020-07-29 17:05:42 +02:00
Nikita Popov f8ff8bb767 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Consider op1 literal of FETCH_OBJ_R
2020-07-29 17:05:35 +02:00
Nikita Popov 57ad5b3432 Consider op1 literal of FETCH_OBJ_R
FETCH_OBJ_R may have an op1 CONST operand, even though it will
always error. We should take this into account when compacting
literals.
2020-07-29 17:04:23 +02:00
Dmitry Stogov 9e80558047 Load ptoper IP value 2020-07-29 17:37:01 +03:00
Dmitry Stogov 02fae1fc53 Fixed bug #79888 (Incorrect execution with JIT enabled) 2020-07-29 17:32:57 +03:00
Nikita Popov ee7eecf321 Fix leak with nullsafe operator with constant LHS
Followup to 5303bcdd32. We need to
perform the addref after emitting the opline, because that might
intern the string.

Fixes oss-fuzz #24479.
2020-07-29 15:51:47 +02:00
Nikita Popov c206c742d6 Fix bug #79900
Run debug build shutdown GC regardless even if GC has been disabled.
Of course, this only does something meaningful if the GC has been
disabled at runtime and root collection is still enabled. We cannot
prevent leaks if GC is disabled completely.
2020-07-29 15:27:48 +02:00
Nikita Popov e2f39f84e2 Remove PHP_CHECK_GCC_ARG()
In favor of AX_CHECK_COMPILE_FLAG(), which we bundle since at least
PHP 7.

Closes GH-5904.
2020-07-29 15:07:53 +02:00
Nikita Popov 3a29da022b Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix test
2020-07-29 15:05:03 +02:00
Nikita Popov c6d539ae01 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix test
2020-07-29 15:04:23 +02:00
Nikita Popov 99c48a2477 Fix test 2020-07-29 15:04:05 +02:00
Dmitry Stogov 0ef0ea5810 Temporary disable abstract test usage for inferring previous type of variables (previous value may be in CPU register and type of the stack slot may be inconsistent). 2020-07-29 14:58:41 +03:00
Christoph M. Becker da0f3279ea Merge branch 'PHP-7.4'
* PHP-7.4:
  Revert "Merge branch 'PHP-7.3' into PHP-7.4"
2020-07-29 13:38:53 +02:00
Christoph M. Becker 826b90a5f0 Revert "Merge branch 'PHP-7.3' into PHP-7.4"
This reverts commit e1f6ab3388, reversing
changes made to e0ebe56ebf.

There are obviously issues with running tests in parallel, maybe
related to the cache ID.  This needs to be investigated.  Revert for
now.
2020-07-29 13:32:59 +02:00
Christoph M. Becker 687e14ddc2 Merge branch 'PHP-7.4'
* PHP-7.4:
  Prevent test case from stalling
2020-07-29 12:47:41 +02:00
Christoph M. Becker f8792443a2 Prevent test case from stalling
If the CTRL-C event can't be sent to the child for whatever reason, the
test will never terminate, because `proc_close()` waits for an infinite
amount of time.  Therefore, we `proc_terminate()` the child instead,
after explicitly closing the pipes.
2020-07-29 12:46:14 +02:00
Nikita Popov ae8dea0b10 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix #79895: support = in PHP_CHECK_GCC_ARG m4 macro
2020-07-29 12:39:58 +02:00
Nikita Popov 678f5b6068 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #79895: support = in PHP_CHECK_GCC_ARG m4 macro
2020-07-29 12:39:30 +02:00
Santiago M. Mola e767ca60a0 Fix #79895: support = in PHP_CHECK_GCC_ARG m4 macro
Closes GH-5890.
2020-07-29 12:36:52 +02:00
Dmitry Stogov 5f2adfb690 Fixed live-range interval construction (close all frames) 2020-07-29 13:11:27 +03:00
twosee ab9d10d023 Merge branch 'PHP-7.4'
* PHP-7.4:
  Handle bindto error
2020-07-29 17:48:01 +08:00
twosee 12bd3cc146 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Handle bindto error
2020-07-29 17:46:57 +08:00
twosee 0b8c83f593 Handle bindto error
Closes GH-5903.
2020-07-29 17:46:27 +08:00
Nikita Popov 993be4b9bf Fix STR_OR_OBJ_OF_TYPE stringable handling 2020-07-29 11:29:49 +02:00
Nikita Popov 213494f55d Move patch to right place
This was supposed to be for laravel, not symfony.

[ci skip]
2020-07-29 11:01:57 +02:00
Christoph M. Becker fc3439a7b3 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix #73060: php failed with error after temp folder cleaned up
2020-07-29 10:17:22 +02:00
Christoph M. Becker e1f6ab3388 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #73060: php failed with error after temp folder cleaned up
2020-07-29 10:11:29 +02:00
Christoph M. Becker 9a744c66e7 Fix #73060: php failed with error after temp folder cleaned up
Instead of storing the mapping base address and the address of
`execute_ex()` in a separate file in the temporary folder, we store
them right at the beginning of the memory mapping.
2020-07-29 10:07:23 +02:00
Nikita Popov 9eb7990085 Try to fix laravel PHP 8 incompatibility
[ci skip]
2020-07-29 09:54:12 +02:00
Dmitry Stogov 709925a03a Use inline function instead of macro 2020-07-29 10:42:12 +03:00
Dmitry Stogov 4b4869ffe3 Merge common "cold" part 2020-07-29 10:10:37 +03:00
George Peter Banyard b2248789ed Implement 'Saner Numeric Strings' RFC:
RFC: https://wiki.php.net/rfc/saner-numeric-strings

This removes the -1 allow_error mode from is_numeric_string functions and replaces it by
a trailing boolean out argument to preserve BC in a couple of places.

Most of the changes can be resumed to "numeric" strings which emitted a E_NOTICE now emit
a E_WARNING and "numeric" strings which emitted a E_WARNING now throw a TypeError.

This mostly affects:
 - String offsets
 - Arithmetic operations
 - Bitwise operations

Closes GH-5762
2020-07-29 02:51:09 +01:00
Andrea Faulds f759936591 Permit trailing whitespace in numeric strings
This is part 1 of the 'Saner Numeric Strings' RFC:
https://wiki.php.net/rfc/saner-numeric-strings
2020-07-29 02:22:38 +01:00
Dmitry Stogov 99ee73e6a9 Fixed incorrect reuse of exit_point 2020-07-28 23:31:58 +03:00
George Peter Banyard 73e070a614 Refactor user streams to use ZPP class check
Closes GH-5876
2020-07-28 17:12:40 +01:00
Dmitry Stogov 2a72778e2d Check for EG(exception) after leaving function frame 2020-07-28 19:03:05 +03:00
Dmitry Stogov 251e667488 Prevent incorrect optimization 2020-07-28 19:02:08 +03:00
Máté Kocsis ac0da090ae Fix UNKNOWN default values in ext/mbstring and ext/gd
Closes GH-5598
2020-07-28 17:06:25 +02:00
David Carlier 118fa69e70 Check for shm_open() in libroot to support Haiku
Resides on libroot (system runtime) on this platform.

Closes GH-5892.
2020-07-28 16:33:17 +02:00
Nikita Popov c434bbb344 Fix typo in test 2020-07-28 15:39:22 +02:00
Theodore BrownandMartin Schröder 470d1696d9 Implement Shorter Attribute Syntax
RFC: https://wiki.php.net/rfc/shorter_attribute_syntax

Closes GH-5796.

Co-authored-by: Martin Schröder <m.schroeder2007@gmail.com>
2020-07-28 15:28:57 +02:00
Christoph M. Becker 44ad2db15f Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix #79806: realpath() erroneously resolves link to link
2020-07-28 14:02:25 +02:00
Christoph M. Becker e0ebe56ebf Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #79806: realpath() erroneously resolves link to link
2020-07-28 14:00:52 +02:00
Christoph M. Becker c756f82c02 Fix #79806: realpath() erroneously resolves link to link
After resolving reparse points, the path still may be a reparse point;
in that case we have to resolve that reparse point as well.
2020-07-28 13:55:22 +02:00
Dmitry Stogov f41bceb94e Move asserts to better places 2020-07-28 13:38:43 +03:00
Côme Chilliet b71b696826 Merge branch 'master' of git.php.net:/php-src
* 'master' of git.php.net:/php-src:
  Replace ZEND_JIT_TRACE_MAX_EXIT_COUNTERS constant by opcache.jit_max_exit_counters configuration directive
  Fix use-after-free when nullsafe used with constant LHS
2020-07-28 10:32:03 +02:00
Côme Chilliet 08dcb8e604 Merge branch 'PHP-7.4'
* PHP-7.4:
  Updated NEWS
  fix memory leaks in ext/ldap/ldap.c
  fix memory leaks in ext/ldap/ldap.c
2020-07-28 10:29:59 +02:00
Côme Chilliet 1ba88355d7 Updated NEWS 2020-07-28 10:28:31 +02:00
Côme Chilliet 52eebc5afd Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  fix memory leaks in ext/ldap/ldap.c
2020-07-28 10:27:52 +02:00
Paweł Tomulik fef5a9e502 fix memory leaks in ext/ldap/ldap.c 2020-07-28 10:27:22 +02:00
Paweł Tomulik efe6d96b45 fix memory leaks in ext/ldap/ldap.c 2020-07-28 10:23:10 +02:00
Dmitry Stogov 8a42f357bf Replace ZEND_JIT_TRACE_MAX_EXIT_COUNTERS constant by opcache.jit_max_exit_counters configuration directive 2020-07-28 11:18:18 +03:00
Nikita Popov 5303bcdd32 Fix use-after-free when nullsafe used with constant LHS
Fixes oss-fuzz #24436.
2020-07-28 09:48:13 +02:00
Dmitry Stogov 2dbb4ecfa1 Avoid redundand EX(opline) initialization 2020-07-28 04:16:16 +03:00
Dmitry Stogov fd56fd2279 Always record ZEND_JIT_TRACE_START and ZEND_JIT_TRACE_END 2020-07-28 03:23:28 +03:00
Dmitry Stogov 226617d358 Update abstarct stack before guard to keep proper type in side trace 2020-07-28 00:14:28 +03:00
Dmitry Stogov 274131e4af Fixed incorrect side exit opline of "fake" init_fcall guard 2020-07-27 23:27:07 +03:00
Benjamin EberleiandThomas Weinert eaeceb3293 Consolidate Parameter Names For ext/simplexml
Co-authored-by: Thomas Weinert <thomas@weinert.info>
2020-07-27 21:42:33 +02:00
Benjamin EberleiandThomas Weinert 8a6bc6767d Consolidate Parameter Names For ext/dom
Co-authored-by: Thomas Weinert <thomas@weinert.info>
2020-07-27 21:42:33 +02:00
Dmitry Stogov ee00f51e0a Correct assertion 2020-07-27 21:53:58 +03:00
Dmitry Stogov fbb18e4409 Fixed incorrect abstract stack size calculation 2020-07-27 21:11:07 +03:00
Nikita Popov dc1a6dc0de Remove unused func_info variable 2020-07-27 18:40:51 +02:00
Nikita Popov d4c30ff99b Automatically enable DASM_CHECKS in debug mode 2020-07-27 18:40:03 +02:00
Christoph M. Becker 592f70bc46 Merge branch 'PHP-7.4'
* PHP-7.4:
  Revert "Fix #79806: realpath() erroneously resolves link to link"
2020-07-27 17:53:23 +02:00
Christoph M. Becker f02507469d Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Revert "Fix #79806: realpath() erroneously resolves link to link"
2020-07-27 17:51:56 +02:00
Christoph M. Becker 1aeff522b8 Revert "Fix #79806: realpath() erroneously resolves link to link"
This reverts commit d5b59b4303.
2020-07-27 17:50:41 +02:00
Dmitry Stogov b23188962e Remove unused fields 2020-07-27 17:31:02 +03:00
Dmitry Stogov 04c3e3182a More accurate checks to eliminate reloading 2020-07-27 17:22:03 +03:00
Nikita Popov f9f6123941 Fix verify type jit for complex type masks
We should not try to check things like MAY_BE_CALLABLE in the fast
path, because those aren't real types. This is only actively wrong
for the concrete_type case, for the mask case it just uses an
unnecessarily large immediate.
2020-07-27 15:54:22 +02:00
Nikita Popov e0aa2724c3 Emit diagnostic on dasm_link() failure 2020-07-27 15:54:22 +02:00
Tyson Andre 85d4b560df [skip ci] Add zend.exception_string_param_max_len to UPGRADING
For GH-5769 (mentioned in 07db64156e)
2020-07-27 09:40:24 -04:00
Dmitry Stogov 8d773a768f Properly cleanup in case of abort because too many functions in single trace. 2020-07-27 16:37:15 +03:00
Derick Rethans d66a6ba58a Mention that an API bump must be done with RC1
It's okay to change the API change up until the first release candidate only,
and it may not be changed afterwards.

There is a discussion at https://github.com/php/php-src/pull/4470/files that
never resulted in a fix.

/cc @sgolemon @carusogabriel
2020-07-27 14:19:21 +01:00
Christoph M. Becker 54e15dcd6f Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix #79806: realpath() erroneously resolves link to link
2020-07-27 15:11:39 +02:00
Christoph M. Becker 85a26fef11 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #79806: realpath() erroneously resolves link to link
2020-07-27 15:10:22 +02:00
Christoph M. Becker d5b59b4303 Fix #79806: realpath() erroneously resolves link to link
After resolving reparse points, the path still may be a reparse point;
in that case we have to resolve that reparse point as well.
2020-07-27 15:08:39 +02:00
Nikita Popov 6d97e7f0e9 JIT internal functions with return type in debug mode
The return type check is just a debug assertion, it's okay if it
is not performed in JIT mode. We already don't perform all the
argument validation in that case. Just disable the one test that
checks for this.

This removes an annoying discrepancy between debug&release mode.
2020-07-27 15:02:59 +02:00
Dmitry Stogov 52cebf65f8 Prevent setting of incorrect continuation counters 2020-07-27 14:45:02 +03:00
Máté Kocsis f62ec5cf6c Fix microtime() test 2020-07-27 13:14:21 +02:00
Derick Rethans cdc8523300 Last pass of 'More consistent parameter names for date/time functions' 2020-07-27 11:42:13 +01:00
Dmitry Stogov c56c19cec3 Fixed incorrect reference counting (we shouldn't skip ADDREF for IS_CV result) 2020-07-27 13:18:34 +03:00
Christoph M. Becker 041cbec023 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix #77932: File extensions are case-sensitive
2020-07-27 11:56:52 +02:00
Christoph M. Becker 68aa1329eb Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #77932: File extensions are case-sensitive
2020-07-27 11:54:54 +02:00
Christoph M. Becker 6f18d7e2f9 Fix #77932: File extensions are case-sensitive
The file extension to mime type mapping *must* not depend on the file
extension's case for case-insensitive file systems, and *should* not
for case-sensitive file systems.
2020-07-27 11:52:18 +02:00
Nikita Popov 08e6c20955 Fix null pointer deref in compile_return()
Fixes oss-fuzz #24387.
2020-07-27 10:27:26 +02:00
Nikita Popov 3b5b288127 Add AST export support for nullsafe operator
Fixes oss-fuzz #24403 and variants.
2020-07-27 10:20:02 +02:00
Dmitry Stogov d9f5c44d5f type in comment 2020-07-27 11:13:23 +03:00
Dmitry Stogov 9aa5967a5f Fixed memory leaks 2020-07-27 10:46:58 +03:00
Derick Rethans f66627abff Another pass of improving ext/date argument names 2020-07-26 10:38:53 +01:00
Derick Rethans 2b66cc95d9 Merge branch 'PHP-7.4' 2020-07-26 10:09:27 +01:00
Derick Rethans 877a351ea8 PHP-7.4 is 7.4.10-dev now 2020-07-26 10:08:52 +01:00
Tyson Andre 07db64156e [RFC] Make string length for getTraceAsString() configurable
Add a `zend.exception_string_param_max_len` ini setting.
(same suffix as `log_errors_max_len`)

Allow values between 0 and 1000000 bytes.
For example, with zend.exception_string_param_max_len=0,
"" would represent the empty string, and "..." would represent something
longer than the empty string.
Previously, this was hardcoded as exactly 15 bytes.

Discussion: https://externals.io/message/110717

Closes GH-5769
2020-07-25 09:50:57 -04:00
Máté Kocsis 8664ff7ae1 Cleanup argument handling in ext/reflection
Closes GH-5850
2020-07-24 17:47:42 +02:00
Nikita Popov 1f8a93abaa Support class+mask union for internal argument 2020-07-24 16:40:14 +02:00
Derick Rethans e96e4ac726 More consistent parameter names for date/time functions 2020-07-24 11:49:01 +01:00
Dmitry Stogov 0ef8e0c115 Result of branching opcode in side trace is unknown 2020-07-24 13:26:03 +03:00
Nikita Popov d65d3f5298 Fix bug #79108
Don't expose references in debug_backtrace() or exception traces.
This is regardless of whether the argument is by-reference or not.

As a side-effect of this change, exception traces may now acquire
the interior value of a reference, which may be unexpected for
some internal functions. This is what necessitated the change in
the spl_array sort implementation.
2020-07-24 12:23:34 +02:00
Nikita Popov 27ad19c3e8 Validate collator earlier during sort
Check this once before the sort, instead of on every compare.
Also directly store the UCollator to make things more obvious.
2020-07-24 11:58:10 +02:00
Nikita Popov 7eec281b5e Avoid UNKNOWN default in PDO::query() 2020-07-24 11:44:47 +02:00
Máté Kocsis 70a3a909cd Add the Z_PARAM_PATH_OR_NULL() and Z_PARAM_ZVAL_OR_NULL() macros 2020-07-24 10:37:35 +02:00
Nikita Popov 0a5b7c81b7 Make nested ternary without parentheses a compile error
This was deprecated in PHP 7.4.
2020-07-24 10:35:42 +02:00
Ilija ToviloandNikita Popov 9bf119832d Implement nullsafe ?-> operator
RFC: https://wiki.php.net/rfc/nullsafe_operator

Closes GH-5619.

Co-authored-by: Nikita Popov <nikita.ppv@gmail.com>
2020-07-24 10:05:03 +02:00
George Wang 293d2f99f1 Address some compiler warnings. 2020-07-23 17:21:24 -04:00
George Wang 78fc12a37a Merge branch 'PHP-7.4' 2020-07-23 16:08:54 -04:00
George Wang 27bd16e71f Merge branch 'PHP-7.3' into PHP-7.4 2020-07-23 15:54:48 -04:00
George Wang 874284d1c9 Merge branch 'PHP-7.2' into PHP-7.3 2020-07-23 15:36:35 -04:00
George Wang c39f5fe94e Security: update to LiteSpeed SAPI v7.7 to address an buffer overflow, and some log message tunings. 2020-07-23 15:35:32 -04:00
Dmitry Stogov bc4201f6b7 Cleanup abstract test usage 2020-07-23 21:38:34 +03:00
Nikita Popov 86882060ab Use zend_call_method in SoapFault::__toString() 2020-07-23 16:45:53 +02:00
Nikita Popov a1ab7bbc3a Simplify user_stream_create_object 2020-07-23 16:20:25 +02:00
Dmitry Stogov b3e51b7675 Allow keeping result of FETCH_DIM_R in CPU register 2020-07-23 17:08:28 +03:00
Nikita Popov dc30e1d812 Cleanup SPL instantiation code 2020-07-23 16:00:12 +02:00
Christoph M. Becker fc4d462e94 Fix #78236: convert error on receiving variables when duplicate [
When an input variable name contains a non matched open bracket, we not
only have to replace that with an underscore, but also all following
forbidden characters.
2020-07-23 15:48:09 +02:00
Christoph M. Becker 4293dd5d34 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix #79884: PHP_CONFIG_FILE_PATH is meaningless
2020-07-23 15:43:02 +02:00
Christoph M. Becker 3deb6b555a Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #79884: PHP_CONFIG_FILE_PATH is meaningless
2020-07-23 15:41:20 +02:00
Christoph M. Becker 15efb96d4c Fix #79884: PHP_CONFIG_FILE_PATH is meaningless
It does not make sense to make assumptions about `PHP_CONFIG_FILE_PATH`
during build time, since that value is never used during run time on
Windows.  Since there is no `--with-config-file-path` on Windows
either, we define `PHP_CONFIG_FILE_PATH` as `""`.
2020-07-23 15:39:22 +02:00
Dmitry Stogov 96a1b409df Don't record "fake" closures 2020-07-23 15:18:28 +03:00
Nikita Popov 93594862f4 Remove no longer needed stdint compatibility defines
Closes GH-5886.
2020-07-23 13:00:04 +02:00
Dmitry Stogov 14400b50d3 We track only arguments of user functions on abstract stack 2020-07-23 13:39:49 +03:00
Dmitry Stogov 7de23662df Fixed 32-bit build 2020-07-23 12:26:34 +03:00
Dmitry Stogov f6164b8407 Revert "Fixed DynASM failure"
This reverts commit 62ca6b567c.
2020-07-23 12:16:58 +03:00
Dmitry Stogov 62ca6b567c Fixed DynASM failure 2020-07-23 12:13:33 +03:00
Dmitry Stogov b0c3ca0e52 Avoid register reloading 2020-07-23 12:08:07 +03:00
Nikita Popov 545928e4b8 Fix some clang warnings 2020-07-23 10:35:40 +02:00
Nikita Popov b6b6e76937 Try to fix 32-bit NTS build 2020-07-23 09:58:17 +02:00
Christopher Jones 99d2b24b15 Make test decimal to binary conversion expectation more tolerant 2020-07-23 16:31:33 +10:00
Christopher Jones b2d1736de8 Fix cut/paste error in expected test output 2020-07-23 16:29:51 +10:00
Christoph M. Becker 1e938e8eba Fix build
MSVC is pretty picky there, so we add the `ZEND_VOIDP` cast.
2020-07-22 22:57:58 +02:00
Christoph M. Becker dd30a3d8ce Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix brittle test
2020-07-22 20:47:16 +02:00
Christoph M. Becker 0a59a71947 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix brittle test
2020-07-22 20:46:28 +02:00
Christoph M. Becker 6b99a8be4d Fix brittle test
This test fails occasionally due to timing issues, because the session
file may have been unlinked by the first `session_start()`'s GC.  We
adapt the test expectation to this reality.
2020-07-22 20:45:56 +02:00
Christoph M. Becker f1436c4832 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix minor memory leak of CG(script_encoding_list)
2020-07-22 20:34:21 +02:00
Christoph M. Becker c1a80e075a Fix minor memory leak of CG(script_encoding_list)
This only leaks at the end of the process, so per se not an issue, but
the leak is caught by MSVC's CRT leak checker, so we better properly
clean up to avoid false positives.
2020-07-22 20:32:48 +02:00
Dmitry Stogov d05e88250a Revert "Disable tracing JIT on AppVeyor"
This reverts commit a986933dde.

	Tracing JIT for Windows is already fixed.
2020-07-22 20:03:50 +03:00
twosee 6e92487f66 Fix warnings of strict-prototypes
Closes GH-5887.
2020-07-23 00:59:00 +08:00
twosee a65ec4c2db Change type of max_num_args to uint32_t
Closes GH-5885.
2020-07-23 00:55:58 +08:00
twosee e29ee65ec0 Export zend_register_error_notify_callback() with ZEND_API 2020-07-23 00:45:06 +08:00
Nikita Popov 5febd633b9 Accept unsigned instead of enum pdo_attribute_type
Driver-specific options get passed to these functions, which are
not part of the pdo_attribute_type enum. Newer GCC versions don't
like that. Accept a simple integr type instead.
2020-07-22 18:28:22 +02:00
Dmitry Stogov bc1d7b6040 Reserve WIN64 shadow space 2020-07-22 17:49:51 +03:00
Nikita Popov 9250abfb04 php.ini cleanup
[ci skip]
2020-07-22 15:46:03 +02:00
Dmitry Stogov c9434a4af2 Separate and fix deoptimization code generator 2020-07-22 15:04:17 +03:00
Nikita Popov 7a3dcc3e33 Treat namespaced names as single token
Namespace names are now lexed as single tokens of type
T_NAME_QUALIFIED, T_NAME_FULLY_QUALIFIED or T_NAME_RELATIVE.

RFC: https://wiki.php.net/rfc/namespaced_names_as_token

Closes GH-5827.
2020-07-22 12:36:05 +02:00
Nikita Popov acbf7802af Improved number to string comparison semantics
RFC: https://wiki.php.net/rfc/string_to_number_comparison

Closes GH-3886.
2020-07-22 12:23:49 +02:00
Dmitry Stogov 2940839d28 Prevent incorrect trasing JIT TSSA usage for range() result type inference 2020-07-22 13:01:11 +03:00
Nikita Popov e6ae1bf489 Check dual_it validity in CallbackFilterIterator::accept()
Avoid accessing intern->u.cbfilter null pointer, though it's
harmless here.
2020-07-22 11:31:15 +02:00
Nikita Popov f90c735957 Drop no-op dasm_growpc() call
This doesn't do anything, as maxpc=0 is passed. However, ubsan
complains about the memset of a null pointer, so avoid it.
2020-07-22 11:11:36 +02:00
Nikita Popov aaedbde8b4 Mark zend_jit_patch memory accesses as unaligned
This prevents ubsan from complaining.
2020-07-22 11:02:24 +02:00
Nikita Popov eb04cb5f20 Move checks after zpp in opcache_is_script_cached() 2020-07-22 10:52:50 +02:00
Nikita Popov 80b4d49f90 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fixed bug #79881
2020-07-22 10:21:29 +02:00
Nikita Popov 657a832a77 Fixed bug #79881 2020-07-22 10:21:24 +02:00
Christopher Jones 30073ac645 Update NEWS 2020-07-22 17:30:20 +10:00
George Peter Banyard 7a3375a08c Use ZPP callable check for oci_register_taf_callback() 2020-07-22 17:29:30 +10:00
George Peter Banyard 0d146cb3eb Some cleanup in OCI8 extension for PHP 8 2020-07-22 17:29:30 +10:00
Christoph M. Becker a986933dde Disable tracing JIT on AppVeyor
This is a temporary measure until the current issues[1] are resolved.

[1] <https://github.com/php/php-src/commit/0e1e991a89528b571a0271a3f24f9d3c2c36e23a#commitcomment-40805659>
2020-07-22 08:55:52 +02:00
Dmitry Stogov b5e2b64adc Fix deoptimization info and corresponding memory leaks 2020-07-21 22:58:24 +03:00
Dmitry Stogov b44169e9dd Fixed bug #79864 (JIT segfault in Symfony OptionsResolver) 2020-07-21 20:54:33 +03:00
Tyson Andre 4cf8b6f1c9 Support optional comma in closure use list
RFC: https://wiki.php.net/rfc/trailing_comma_in_closure_use_list
Discussion: https://externals.io/message/110715

The release manager has agreed to allow merging of RFCs that have near-unanimous
votes. If an RFC ends up not achieving the required 2/3 majority at the time the
announced voting period closes, this implementation commit will be reverted
in time for the feature freeze.

Closes GH-5793
2020-07-21 13:01:27 -04:00
Máté Kocsis 69a5c561d0 Improve argument types and names in ext/ctype
Closes GH-5878
2020-07-21 16:40:47 +02:00
Nikita Popov e079e753dc Give zend_pass_function an arginfo
Now that the ZEND_ACC_VARIADIC flag is set, we should also make
sure there is a variadic arg that can be looked up.
2020-07-21 16:01:45 +02:00
Nikita Popov df2749da70 Tweak zend_test arginfo/zpp 2020-07-21 15:33:01 +02:00
Nikita Popov 1d4e229ab7 Fix incorrect initialization in date_sunrise() 2020-07-21 15:33:01 +02:00
Dmitry Stogov 0e1e991a89 Switch to tracing JIT by default 2020-07-21 16:15:11 +03:00
Nikita Popov f7f557926e Fix arg/func info
* mysqli_get_server_info() cannot return null. The underlying API
   is infallible.
 * mysqli_select_db() func info is redundant.
 * mb_detect_order() can only return array|true, not array|false.

Also make the func_info.phpt test that is supposed to catch these
kinds of issues actually work.
2020-07-21 15:00:33 +02:00
Máté Kocsis 5770b66722 Cleanup argument handling of Zend functions and methods
Closes GH-5847
2020-07-21 14:47:03 +02:00
Remi Collet 42226fcf03 add ZipArchive::CM_XZ constant (in upcoming libzip 1.8.0) 2020-07-21 14:43:52 +02:00
Dmitry Stogov 7686118212 Fix type recording and side exit information for FE_FETCH_* instructions 2020-07-21 15:39:13 +03:00
Nikita Popov c9881fde7a Run arginfo / zpp mismatch tests for methods as well
As a side-effect, this also catches issues where classes are not
prepared for use with newInstanceWithoutConstructor.
2020-07-21 14:17:29 +02:00
Nikita Popov 38fb1f8383 Check for missing arginfo arguments
Internal functions error when too many arguments are passed. Make
this part of the verification we do in debug builds. This will
help avoid cases where an argument is missing in the stubs,
as recently encountered in 6d96f0f.
2020-07-21 14:17:29 +02:00
Dmitry Stogov be0d912674 Avoid recording of uninitialized variable 2020-07-21 14:11:19 +03:00
Nikita Popov ae2b214be2 Check for redundant func info 2020-07-21 13:01:12 +02:00
Nikita Popov ac56ca0dcc Separate __call and __soapCall implementations
This is overly pedantic, but allows us to enable more arginfo
consistency checks.
2020-07-21 12:59:28 +02:00
Nikita Popov 4dd8fec073 Add stubs for PDO PGSql extension methods 2020-07-21 12:49:37 +02:00
Nikita Popov 1afcced1f0 Add stubs for PDO SQLite extension methods
Putting these under a dummy PDO_SQLite_Ext class.
2020-07-21 12:49:36 +02:00
Dmitry Stogov 047474c3b4 Disable JIT for PHPDBG 2020-07-21 13:26:32 +03:00
Nikita Popov 4ce9571978 Fix UConvert::getErrorMessage() leak on zpp failure 2020-07-21 12:05:44 +02:00
Nikita Popov ae81549048 Move SOAP_SERVER_BEGIN_CODE() after zpp
This is still very dubious, because there are lots of other "returns"
between the BEGIN and END -- won't that end up not restoring the
original state?
2020-07-21 12:05:42 +02:00
Nikita Popov b3ea6ce720 Make ReflectionGenerator final
This class is not safe against malicious extension / instantiation.
2020-07-21 11:53:00 +02:00
Nikita Popov 3a9036ac54 Stricter verification of func info against arg info
Make sure they're actually the same up to cases where func info
allows more accurate expressions. There are some awkward edge cases
around true/false/null limitations in union types.
2020-07-21 11:47:52 +02:00
Nikita Popov 6e09a3e203 Adjust Doctrine workaround in community job
[ci skip]
2020-07-21 11:28:41 +02:00
Dmitry Stogov 447a098ebb Switch to tracing JIT by default 2020-07-21 12:22:36 +03:00
Dmitry Stogov bb9e3dd6cc Use different temporary register 2020-07-21 12:21:47 +03:00
Gabriel Caruso d9227a1b44 Next is PHP 8.0.0beta1 2020-07-21 11:14:19 +02:00
Nikita Popov e4c1366b63 Remove some redundant func info
This is fully covered by arginfo.

The array_merge_recursive() RC information was also wrong,
it should be the same as array_merge().
2020-07-21 11:10:07 +02:00
Gabriel Caruso a1d88b193d Update NEWS for PHP 8.0.0alpha3 2020-07-21 11:06:59 +02:00
Dmitry Stogov e527478c3d Fixed support for 64-bit constants 2020-07-21 11:49:15 +03:00
Nikita Popov 33ddc3bb96 Fix mb_ereg_search* arg and func info 2020-07-21 10:40:08 +02:00
Nikita Popov da4262df6f Fix readline test after callback changes
This one requires libedit and was probably missed for that reason.
2020-07-21 10:40:08 +02:00
Nikita Popov be9c5daf28 Remove null from highlight_* return types
Also fix show_source() discrepancy in func_info.
2020-07-21 10:40:08 +02:00
Derick Rethans 69af5adc55 Merge branch 'PHP-7.4' 2020-07-21 09:24:27 +01:00
Derick Rethans 973be68c63 Prepare for 7.4.10 2020-07-21 09:23:51 +01:00
Nikita Popov 9d37a57411 Remove bool return type from assert_options
Not seeing any way this function can return bool.
2020-07-21 10:18:33 +02:00
Nikita Popov fda78e5965 Fix iptcembed func info
This function can return true with $spool >= 2.
2020-07-21 10:18:33 +02:00
Nikita Popov 2160f5ce59 Call zpp_none in PharFileInfo::__destruct()
Using __destruct() with internal classes is dubious, but not so
simple to avoid here because the code extends SPL classes.
2020-07-21 10:18:33 +02:00
Christoph M. Becker 50de334d26 Merge branch 'PHP-7.4'
* PHP-7.4:
  7.3 is now 7.3.22-dev
2020-07-21 09:53:39 +02:00
Christoph M. Becker d85b4281d0 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  7.3 is now 7.3.22-dev
2020-07-21 09:52:04 +02:00
Christoph M. Becker 2c0a6977dd 7.3 is now 7.3.22-dev 2020-07-21 09:18:07 +02:00
Dmitry Stogov 91d4d2443f Fixed pg_select() function info 2020-07-21 09:58:36 +03:00
George Peter Banyard d9330fc67e Use ZPP callable check in readline extension 2020-07-21 00:52:50 +01:00
George Peter Banyard a1097677a5 Use ZPP callable for PDO Sqlite 2020-07-21 00:20:02 +01:00
Dmitry Stogov 7cfb141f9d Fixed tracing JIT exception handling 2020-07-21 01:49:01 +03:00
Máté Kocsis 19bf66a9e4 Explode _php_image_output_ctx() into multiple functions
Closes GH-5844
2020-07-20 23:25:02 +02:00
Dmitry Stogov 774bc760af Fixed VM interrupt handling 2020-07-20 23:14:23 +03:00
Dmitry Stogov 4b13985f25 Keep CPU regesters used by deoptimizer 2020-07-20 21:04:14 +03:00
Dmitry Stogov 2b7035e824 Fixed tracing JIT for VM without global register variables 2020-07-20 20:59:31 +03:00
Nikita Popov 236ddc56a2 Preserve original ce_flags when registering class
Bug that regularly sneaks in: ZEND_ACC_FINAL is set before calling
zend_register_internal_class() and promptly gets ignored. Remove
this footgun by preserving flags from the original CE.
2020-07-20 17:00:04 +02:00
Nikita Popov 777aa9163d Fetch pdo stmt after zpp 2020-07-20 16:27:46 +02:00
Nikita Popov 9ee16a3c12 Update method signature in test 2020-07-20 16:16:37 +02:00
Nikita Popov 7d3e530f4e Use zpp for PDO fetch mode
Also changing the function signatures to accept variadic args
for the fetch params. If we're already breaking Doctrine anyway,
we may as well do it properly.
2020-07-20 16:05:33 +02:00
Nikita Popov e3827cea4e Fix bug #79857: Add upgrading note for exit dtor change
[ci skip]
2020-07-20 15:30:20 +02:00
Nikita Popov 6f8d0ba0dd Fix bug #79868
This simply restores the code from PHP 7.4 which I incorrectly
"simplified" in master.
2020-07-20 15:15:23 +02:00
Nikita Popov 7fd4212cc0 Add common code for magic method assignment
This was repeated three times.
2020-07-20 14:57:10 +02:00
Christoph M. Becker 05e9197c51 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix #63527: DCOM does not work with Username, Password parameter
2020-07-20 14:45:42 +02:00
Christoph M. Becker 4b96a75ffd Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix #63527: DCOM does not work with Username, Password parameter
2020-07-20 14:44:18 +02:00
Christoph M. Becker b2e3fd1e69 Fix #63527: DCOM does not work with Username, Password parameter
We must not mix multibyte and wide character strings in the
`COAUTHIDENTITY` structure.  Using wide character strings throughout
would have the advantage that the remote connection can be established
regardless of the code page of the server, but that would more likely
break BC, so we just drop the wide character string conversion of the
username.
2020-07-20 14:43:29 +02:00
Dmitry Stogov d67adc39a0 Fixed incorrect deoptimization info 2020-07-20 13:49:46 +03:00
Nikita Popov efce3694b7 Directly assign magic methods
Instead of going through intermediary variables.
2020-07-20 11:22:47 +02:00
Nikita Popov 91e5452b95 Remove unused lc_class_name variable
This is probably a leftover from "old style constructor" support.
2020-07-20 11:15:58 +02:00
Nikita Popov 19de727e04 Report magic method names as written
Report the name the way the user has written it, the same way we
always do.
2020-07-20 11:12:47 +02:00
Nikita Popov 149029b9d6 Unify magic method visibility check
This was missing entirely for the internal function case.
2020-07-20 11:12:47 +02:00
Dmitry Stogov 9f0213fff3 Remove old code (BP_VAR_RW warning) 2020-07-20 11:57:19 +03:00
Nikita Popov 015fc638fb Fix tests I missed before 2020-07-20 10:54:59 +02:00
Nikita Popov 312fe2bdce Unify magic method return type checks 2020-07-20 10:51:48 +02:00
Nikita Popov fbbcf82ab7 Unify static/non-static check for magic methods
And promote it to be fatal.
2020-07-20 10:39:43 +02:00
Nikita Popov b466e8b754 Add missing arg num check for __set_state 2020-07-20 10:20:29 +02:00
Nikita Popov dcaf62f3d3 Clean up zend_check_magic_method_implementation
Let everything go through a common function, which fixes some
consistency issues.
2020-07-20 10:17:40 +02:00
Christopher Jones 9dc08f7396 Merge branch 'oci8-3.0'
* oci8-3.0:
  Rename OCI8 classes to use standard names so arg stub parsing works
  Bump OCI8 version to 3.0 so a PHP 8 PECL release can be made
2020-07-20 18:09:09 +10:00
Christopher Jones 74ca2a39a7 Rename OCI8 classes to use standard names so arg stub parsing works 2020-07-20 18:06:20 +10:00
Christopher Jones 8058776295 Bump OCI8 version to 3.0 so a PHP 8 PECL release can be made 2020-07-20 18:06:19 +10:00
Nikita Popov 59536d5baa Revert "Switch to tracing JIT by default"
This reverts commit 10b09578a8.

This seems to cause many test failures:

Test === operator : different types [tests/lang/operators/operator_identical_basic.phpt]
Test <=> operator : different types [tests/lang/operators/operator_spaceship_basic.phpt]
comparing different variables for equality [Zend/tests/compare_001_64bit.phpt]
comparing different variables for identity [Zend/tests/compare_002_64bit.phpt]
Rebinding of ::getClosure()s [Zend/tests/closure_061.phpt]
comparing different variables (greater than) [Zend/tests/compare_003_64bit.phpt]
comparing different variables (less than) [Zend/tests/compare_004_64bit.phpt]
comparing different variables (greater or equal than) [Zend/tests/compare_005_64bit.phpt]
comparing different variables (smaller or equal than) [Zend/tests/compare_006_64bit.phpt]
Invalid numeric string E_WARNINGs and E_NOTICEs, combined assignment operations [Zend/tests/numeric_string_errors_assign.phpt]
Bug #51819 (Case discrepancy in timezone names cause Uncaught exception and fatal error) [ext/date/tests/bug51819.phpt]
Test all filters returned by filter_list() [ext/filter/tests/033.phpt]
filter_var() and FILTER_VALIDATE_MAC [ext/filter/tests/055.phpt]
Test strrpos() function : usage variations - unexpected inputs for 'needle' argument [ext/standard/tests/strings/strrpos_variation10.phpt]
Test strtr() function : usage variations - empty string & null for 'str' argument [ext/standard/tests/strings/strtr_variation4.phpt]
Test strtr() function : usage variations - unexpected inputs for 'from' argument [ext/standard/tests/strings/strtr_variation6.phpt]
Test strstr() function [ext/standard/tests/strings/strstr.phpt]
2020-07-20 09:45:09 +02:00
Dmitry Stogov 10b09578a8 Switch to tracing JIT by default 2020-07-20 09:17:04 +03:00
Tyson Andre 0d519fa493 Skip upload_2G.phpt if disk_free_space() <= 2GB
This test failed when the free disk space is close to 2.15GB.
I see the file size in the .out file as 0.
PHP has to save the full file contents to disk (the path is in `$_FILES`)

Related to GH-5283

Closes GH-5873
2020-07-19 09:21:53 -04:00
Nikita Popov 9002e95f7c Use proper methods for php_user_filter implementation
These are dummy methods, but should at least check zpp for
arginfo consistency.
2020-07-17 17:01:47 +02:00
Nikita Popov 952222d067 Move SessionHandler sanity checks after zpp 2020-07-17 16:56:50 +02:00
Nikita Popov 9d2af91033 Only set DIT type on successful initialization 2020-07-17 16:42:56 +02:00
Nikita Popov d625c29df7 Remove spurious return true from DOMXPath::registerPhpFunctions()
Only one of three identical cases returned true, and the function
is documented to return void. Remove the outlier.
2020-07-17 16:11:30 +02:00
Nikita Popov d449d1dbbf Use string|array type in DOMXPath::registerPhpFunctions() 2020-07-17 16:10:49 +02:00
Nikita Popov f9ced0d4f7 Add missing zpp_none call in Exception::__wakeup 2020-07-17 16:06:54 +02:00
Nikita Popov 954244b3cb Convert SPL fatal error to Error exception 2020-07-17 16:06:54 +02:00
George Peter Banyard a1fee87c9a Drop useless zend_accel_script_persistable() function 2020-07-17 17:00:42 +02:00
George Peter Banyard fa60f57be4 Drop unused param in zend_parse_arg_class_name_or_obj() 2020-07-17 17:00:27 +02:00
Benjamin Eberlei 4890bf19aa Add error notification callbacks to UPGRADING.INTERNALS 2020-07-17 15:51:15 +02:00
Nikita Popov 6744ead1c9 Parse parameters in zend_test_void_return() 2020-07-17 15:43:40 +02:00
Nikita Popov 6ff31eebb1 Fix some pgsql arginfos
And make sure too few/many arguments throws, to satisfy the
function signature.
2020-07-17 15:43:37 +02:00
Nikita Popov 658e861fbb Some zpp cleanup in pgsql 2020-07-17 15:31:22 +02:00
Nikita Popov a20f07ee59 Remove some zpp quiet uses in pgsql
These functions don't do anything special, just use normal zpp.
2020-07-17 15:24:46 +02:00
Nikita Popov 895a22c03c Add missing image_type_to_extension() argument 2020-07-17 15:24:41 +02:00
Nikita Popov 86a62eb1fc Fixed bug #79867
In line with usual rules, give untyped properties a null default
value. Otherwise constructor promotion would give you a property
declaration that cannot be achieved through any other means.
2020-07-17 15:10:45 +02:00
Benjamin Eberlei 6c8b94eb42 Introduce error notification callbacks that are run independant of zend_error_cb 2020-07-17 15:08:11 +02:00
Nikita Popov 857166c351 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fixed bug #79839
2020-07-17 14:51:16 +02:00
Nikita Popov 0c28b47154 Fixed bug #79839
Add reference type sources in array_walk.
2020-07-17 14:50:22 +02:00
Nikita Popov 4903f7c5fd Fix IntlGregorianCalendar constructor signature
Give these conversative UNKNOWN defaults and no types, as the
overload is something of a mess.
2020-07-17 12:47:25 +02:00
Dmitry Stogov 83478d4fe0 Side exit on overflow 2020-07-17 13:03:35 +03:00
Nikita Popov 1cba736470 Throw correct exception from ArrayObject sort methods
Let normal zpp throw ArgumentCountErrors.
2020-07-17 10:46:11 +02:00
Nikita Popov 81d8d60250 Add missing param to DatePeriod::__construct()
The signature is very overloaded, but takes at most four params,
not three.
2020-07-17 10:46:11 +02:00
Dmitry Stogov 6b2c4be48a JMP optimization 2020-07-17 11:07:22 +03:00
Dmitry Stogov e0af92c16e Eliminate useless exception checks 2020-07-17 10:13:23 +03:00
Dmitry Stogov a167e0426d Eliminate some reference-counting 2020-07-17 00:40:10 +03:00
Nikita Popov d097dfca72 Merge branch 'PHP-7.4'
* PHP-7.4:
  Revert "Drop freetype from i386"
2020-07-16 22:41:28 +02:00
Nikita Popov bc6979b79e Revert "Drop freetype from i386"
This reverts commit 8641d76f62.

This appears to work again now...
2020-07-16 22:41:11 +02:00
Nikita Popov a69d9f2039 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix azure i386 build
2020-07-16 21:16:30 +02:00
Nikita Popov 376968c7a7 Fix azure i386 build
Purge libsqlite3-0 to make sure we get the i386 library lateron.
2020-07-16 21:15:45 +02:00
Nikita Popov 6d96f0f9ce Fix WeakReference::create() stub 2020-07-16 20:46:45 +02:00
Dmitry Stogov 925909dc46 cleanup 2020-07-16 20:07:51 +03:00
Christoph M. Becker ae7554270f Fix #79805: sapi_windows_vt100_support throws TypeError
It does not make sense to throw a `TypeError` when the stream can't be
analyzed.  If `sapi_windows_vt100_support()` is used as getter, we just
return `false` in that case; if the function is used as setter, we
additionally trigger a warning.

We also fix the test cases for this function, which have been broken
before.  Note that these tests are still whitespace sensitive.
2020-07-16 18:36:02 +02:00
Christoph M. Becker 4659c12ae0 Fix #79846: 8c67c16699 broke simple regexp
We backport the respective upstream fix[1].

[1] <https://vcs.pcre.org/pcre2?view=revision&revision=1267>
2020-07-16 18:32:26 +02:00
Dmitry Stogov 03a98d9420 cleanup 2020-07-16 17:09:14 +03:00
Christoph M. Becker 7e357f470d Merge branch 'PHP-7.4'
* PHP-7.4:
  Enable further tests on Windows
2020-07-16 16:08:07 +02:00
Christoph M. Becker c1b5e7a9ab Enable further tests on Windows 2020-07-16 16:07:23 +02:00
Dmitry Stogov d50919a03b Check type guard on result of FETCH_OBJ_R/IS instructions 2020-07-16 15:14:11 +03:00
Remi Collet 50fb12c39b Merge branch 'PHP-7.4'
* PHP-7.4:
  #79657 was cherry-picked in 7.4.7
2020-07-16 12:05:58 +02:00
Remi Collet 6ffe08d131 #79657 was cherry-picked in 7.4.7 2020-07-16 12:05:45 +02:00
Christoph M. Becker b31c787401 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix readlink related memory leak
2020-07-16 09:18:45 +02:00
Christoph M. Becker 27bb0d9164 Fix readlink related memory leak 2020-07-16 09:16:48 +02:00
Dmitry Stogov ebb94af754 Fixed tracing JIT for ASSIGN to typed reference 2020-07-16 00:19:00 +03:00
Pedro Magalhães 272b887b7b Ignore inheritance rules on private methods
Closes GH-5401
2020-07-15 17:09:57 +01:00
Christoph M. Becker 371e29ef3a Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix tests regarding negative fileinode()
2020-07-15 16:39:54 +02:00
Christoph M. Becker dd1d1191e1 Fix tests regarding negative fileinode()
The results of `fileinode()` may be negative due to wrap-around
behavior (at least on Windows as of PHP 7.4.0).
2020-07-15 16:38:38 +02:00
Dmitry Stogov f74e9a4dd3 Check type guard on result of FETCH_DIM_R/IS instructions 2020-07-15 17:28:46 +03:00
Nikita Popov 1c0ee68b83 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix bug #78008: dns_check_record() always return true on Alpine
2020-07-15 15:10:50 +02:00
Nikita Popov 2053329b1a Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix bug #78008: dns_check_record() always return true on Alpine
2020-07-15 15:10:40 +02:00
Andy Postnikov 2c57378bd3 Fix bug #78008: dns_check_record() always return true on Alpine
- free handle before return result
- cleaned up remaining usage of MAXPACKET
- update dns_get_mx() to use the same approach

Closes GH-5854.
2020-07-15 15:10:19 +02:00
Nikita Popov 5785a15f4e Merge branch 'PHP-7.4'
* PHP-7.4:
  Fixed bug #79862
2020-07-15 15:00:45 +02:00
Nikita Popov e8430b592f Fixed bug #79862
While normally a private property in the active scope would take
priority, we should not use this if it has the wrong "staticness".
2020-07-15 14:59:55 +02:00
Nikita Popov 9a1a94e9b9 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fixed bug #79820
2020-07-15 10:59:32 +02:00
Christopher Broadbent ee7c7a8e26 Fixed bug #79820
Similar to what is done for ReflectionType itself, copy the
type name stored inside ReflectionProperty. Also make sure the
type field is always initialized for dynamic properties.

This is a non-issue in PHP 8, because we store a pointer to the
property_info there, rather than a copy.
2020-07-15 10:58:56 +02:00
Nikita Popov f60cf0cfe7 Remove type argument from zend_get_zval_ptr
As pointed out by Levi, this is unused, and we already changed
the signature of this function for PHP 8.
2020-07-15 09:51:51 +02:00
Christopher Jones 3804858c47 Retrofit description of recent PR changes 2020-07-15 13:44:32 +10:00
Nikita Popov 27800441b5 Reduce scope of preload compiler_options
Only set preloading compiler_options while executing the preload
file, not when performing linking afterwards. Otherwise options
like IGNORE_INTERNAL_CLASSES will hide classes from inheritance
verification.
2020-07-14 16:10:04 +02:00
Nikita Popov b702ad14c9 Fix preloading of union typed property inherited from internal class
Tricky edge case: We inherit a property from an internal class,
in which case no property duplication takes place. We should not
try to persist the property info in that case. This didn't really
matter previously, but now that the property has some non-interned
owned data (the type), we need to make sure we don't try to free
that.
2020-07-14 15:24:58 +02:00
Nikita Popov 7e6b2e2e23 Check for name vs ce in a few more places
The type lists may contain CEs, we should not assume they only
contain names.
2020-07-14 14:47:47 +02:00
Dmitry Stogov 7c16d11e3c Tracing JIT for SWITCH instructions 2020-07-14 15:15:08 +03:00
Dmitry Stogov ddba2a705e Better support for 64-bit .aword constants 2020-07-14 15:14:21 +03:00
Nikita Popov 06162194d6 Fix preloading property type resolution
This was causing many failures under --preload...
2020-07-14 12:59:04 +02:00
Nikita Popov e5cb53ec68 Merge branch 'PHP-7.4'
* PHP-7.4:
2020-07-14 12:44:06 +02:00
Nikita Popov f855b59994 Merge remote-tracking branch 'upstream/PHP-7.4' into PHP-7.4
* upstream/PHP-7.4:
  Fix test for x86 Windows
2020-07-14 12:43:58 +02:00
Nikita Popov 745bc4c2ea Merge branch 'PHP-7.4'
* PHP-7.4:
  Fixed bug #79849
2020-07-14 12:43:03 +02:00
Nikita Popov 162776a132 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fixed bug #79849
2020-07-14 12:42:46 +02:00
Evgeny Stepanischev ce149b0cb8 Fixed bug #79849
Closes GH-5853.
2020-07-14 12:41:43 +02:00
Nikita Popov 70501b81a7 Fixed bug #79852 2020-07-14 12:31:06 +02:00
Nikita Popov 8c89f23c45 Use different scratch register
r1 clashes with FCARG1a on Windows, so use a different scratch
register. FCARG2a should be free here. Hopefully fixes the
AppVeyor build.
2020-07-14 10:52:50 +02:00
Martin Schröder 547d98b81d Support socketpairs in proc_open()
Closes GH-5777.
2020-07-14 10:35:45 +02:00
Christoph M. Becker 1a00d015be Remove out-dated comment
ZTS support has been added around ~7.2.
2020-07-13 19:14:59 +02:00
Christoph M. Becker 11a628d96c Fix typos 2020-07-13 19:13:45 +02:00
Nikita Popov e59efb3740 Put debug function behind ifdef 2020-07-13 17:24:31 +02:00
Nikita Popov 2edc5e00ac Add user upgrading note for no_separation change
I added this to UPGRADING.INTERNALS, but it should also be
mentioned in UPGRADING, as it affects user-visible behavior.

[ci skip]
2020-07-13 14:50:25 +02:00
Nikita Popov 0cab3fa10e Add upgrading note for crypt change
[ci skip]
2020-07-13 14:44:17 +02:00
Nikita Popov 2d98f0cad2 Restore warning 2020-07-13 14:40:19 +02:00
George Peter Banyard 4f3eccfd4d Use consistent types
uint32_t type for argument count
size_t for length of char*
zend_bool for a zval bool arg

Closes GH-5845
2020-07-13 13:30:54 +02:00
Dmitry Stogov 48963378c1 Improved reference-counting inference 2020-07-13 13:08:32 +03:00
Nikita Popov 0280c64a2e Add upgrading note
[ci skip]
2020-07-13 11:47:25 +02:00
Remi Collet 4884f1be85 define COMPILER and ARCHITECTURE from environment 2020-07-13 11:14:02 +02:00
Rowan Tommins 55a15f32ce Improve output of tokens in Parse Errors
Currently, unexpected tokens in the parser are shown as the text
found, plus the internal token name, including the notorious
"unexpected '::' (T_PAAMAYIM_NEKUDOTAYIM)".

This commit replaces that with a more user-friendly format, with
two main types of token:

* Tokens which always represent the same text are shown like
  'unexpected token "::"' and 'expected "::"'
* Tokens which have variable text are given a user-friendly
  name, and show like 'unexpected identifier "foo"', and
  'expected identifer'.

A few tokens have special cases:

* unexpected token """ -> unexpected double-quote mark
* unexpected quoted string "'foo'" -> unexpected single-quoted
  string "foo"
* unexpected quoted string ""foo"" -> unexpected double-quoted
  string "foo"
* unexpected illegal character "_" -> unexpected character 0xNN
  (where _ is almost certainly a control character, and NN is the
   hexadecimal value of the byte)

The \ token has a special case in the implementation just to stop
bison making a mess of escaping it and it coming out as \\
2020-07-13 11:07:40 +02:00
Dmitry Stogov d4fdf79add JIT for array merging 2020-07-13 12:04:08 +03:00
Nat Wyatt 6f48ccf51c Fix compilation errors when EXIF_DEBUG is defined
Fix warnings and error when compiling with EXIF_DEBUG defined.

Closes GH-5838.
2020-07-13 11:00:02 +02:00
Christoph M. Becker 99c78963c8 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix test for x86 Windows
2020-07-13 10:53:55 +02:00
Christoph M. Becker e2c17cef4b Fix test for x86 Windows
`st_dev` deliberately overflows on such systems, cf.
<http://svn.php.net/viewvc?view=revision&revision=350100>.
2020-07-13 10:52:26 +02:00
Nikita Popov 000f609c26 Add another doctrine workaround
This has been fixed a few months ago, but apparently Doctrine
doesn't do releases.
2020-07-13 10:27:44 +02:00
Nikita Popov 1c5f0b8a16 Check for undef var in verify return jit 2020-07-13 10:05:39 +02:00
Nikita Popov 213852de78 Fixed bug #79828 2020-07-13 09:55:13 +02:00
Nikita Popov 86e2b7bb70 Fixed bug #79841 2020-07-13 09:41:05 +02:00
Christoph M. Becker c9639cffdb Fix PDO_Firebird numeric to string conversion on Windows
Commit aaa1f90[1] dropped support for the `snprinf()` `I` modifier, so
we use the standard `ll` modifier which is suitable for 32bit and 64bit
Windows.  We also replace the deprecated `I64` suffix[2] with the `LL`
suffix.

This fixes ext/pdo_firebird/tests/bug_64037.phpt.

[1] <http://git.php.net/?p=php-src.git;a=commit;h=aaa1f90e3f90c24098fa55a7b868fdca0b89ee25>
[2] <https://docs.microsoft.com/en-us/cpp/cpp/numeric-boolean-and-pointer-literals-cpp?view=vs-2019#integer-literals>
2020-07-12 23:52:22 +02:00
Christoph M. Becker b6e70e14bd Fix PDO_Firebird tests which assume ERRMODE_SILENT
These have apparently been missed when PR 5388[1] had been merged.

[1] <https://github.com/php/php-src/pull/5388>
2020-07-12 18:15:56 +02:00
Christoph M. Becker 6c7b5c0760 Unbork tests for PDO_Firebird
PDO_Firebird raises a warning regarding the unknown SQL syntax, which
we have to silence to avoid run-tests.php to mark the test as borked.
2020-07-12 17:51:29 +02:00
Ilija Tovilo 1c967df5a0 Fix free of uninitialized memory in MATCH_ERROR
As suggested by Tyson Andre:
https://github.com/php/php-src/pull/5371#issuecomment-657081464

Also fix line number of unhandled match error

Closes GH-5841.
2020-07-12 13:33:36 +02:00
twosee c0172aa2bd debug_zval_dump(): Don't skip recursion detection on first level
A complement to ae6f45ad45

Closes GH-5843.
2020-07-12 03:08:42 +08:00
Máté Kocsis 6cf22529b9 Addd upgrading notes about OCI8 2020-07-11 20:04:40 +02:00
Jens de Nies 11f4a5e563 Removed the "oci_internal_debug" function and its alias. Also deprecated the "ocifetchinto" function.
Closes GH-5810
2020-07-11 19:57:30 +02:00
Chuck Adams f06a6b4697 (ffi) fix ifdefs for non-windows systems without long double
Closes GH-5840
2020-07-11 19:50:15 +02:00
Christoph M. Becker 340e2ead77 Export php_gd_libgdimageptr_from_zval_p()
Some extension may need to retrieve the `gdImagePtr` from an `GdImage`
object; thus, we export the respective function.  To not being forced
to include gd.h in php_gd.h, we use the opaque `struct gdImageStruct *`
as return type.

We also rename php_gd2.dll to php_gd.dll, since there's not really much
point in giving the DLL a version number, since there is no php_gd.dll
for years (if there ever has been).  Renaming, on the other hand,
matches the name on other systems (gd.so), and allows to actually use
`ADD_EXTENSION_DEP()`.
2020-07-11 19:33:20 +02:00
Ilija Tovilo d5a0370828 [skip ci] Consistent match test closing tags 2020-07-11 16:50:51 +02:00
twosee 614b2191bd Merge branch 'PHP-7.4'
* PHP-7.4:
  Fixed BC break of php_debug_zval_dump
2020-07-11 18:32:18 +08:00
twosee 7a39e174aa Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fixed BC break of php_debug_zval_dump
2020-07-11 18:31:30 +08:00
twosee f0b2c2cb98 Fixed BC break of php_debug_zval_dump
It introduced by fixing bug #79830
2020-07-11 18:30:28 +08:00
twosee 40efb7ad61 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fixed bug #79830 introduced by fixing bug #79821

# Conflicts:
#	ext/standard/var.c
2020-07-11 14:40:17 +08:00
twosee 6ef08b1903 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fixed bug #79830 introduced by fixing bug #79821
2020-07-11 14:38:27 +08:00
twosee 56dec3cc73 Fixed bug #79830 introduced by fixing bug #79821
This also fixes memory error in debug_zval_dump and var_export.
2020-07-11 14:37:25 +08:00
twosee 342fe094b5 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fixed bug #79821
2020-07-11 06:19:41 +08:00
twosee 8db2ae8ffb Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fixed bug #79821
2020-07-11 06:15:28 +08:00
twosee 150504e6b1 Fixed bug #79821
HashTable was reallocated (zend_hash_packed_grow) during php_var_dump, so we should call GC_ADDREF to make SEPARATE_ARRAY work.

Closes GH-5837.
2020-07-11 06:14:22 +08:00
codinghuang 7817ff8ce1 Don't generate JSON scanner and parser during configure 2020-07-10 23:32:01 +02:00
Máté Kocsis 95cff3ebf2 Retain the original formatting character in test 2020-07-10 23:15:08 +02:00
Máté Kocsis d30cd7d7e7 Review the usage of apostrophes in error messages
Closes GH-5590
2020-07-10 21:05:28 +02:00
Christoph M. Becker 2ad75ba784 Fix test cases
These tests are not supposed to check the result of `fclose(false)`.
2020-07-10 18:27:18 +02:00
George Peter Banyard 2297a6d364 Use dedicated function for illegal offset type error 2020-07-10 16:49:52 +02:00
Nikita Popov 5fc70243d7 Add missing addref for MATCH_ERROR operand 2020-07-10 15:58:42 +02:00
George Peter Banyard 3f286fa89a Promote Notice to Warning in libmagic
The current behaviour makes little to no sense, having a notice which starts with 'Warning:' should just be a warning

Closes GH-5824
2020-07-10 14:43:43 +02:00
Nikita Popov 6556846754 Fixed bug #79818
Only destroy the variable directly before reassigning it. The
value could be read in the meantime.
2020-07-10 14:36:50 +02:00
Máté Kocsis f328594072 Add stubs for SAPIs
Closes GH-5295.
2020-07-10 14:20:18 +02:00
Nikita Popov db43a93fc2 Fix warning in embed sapi 2020-07-10 14:10:02 +02:00
Nikita Popov 12214e1d46 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fixed bug #79817
2020-07-10 14:07:59 +02:00
Nikita Popov 3f8d71d37f Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fixed bug #79817
2020-07-10 14:07:17 +02:00
Nikita Popov a72c53a070 Fixed bug #79817
Use *_IND macros in a few places in string.c.
2020-07-10 14:06:41 +02:00
Christoph M. Becker 9a5695bfc3 Merge branch 'PHP-7.4'
* PHP-7.4:
  Enable further ext/standard/tests/file tests on Windows
2020-07-10 13:42:13 +02:00
Christoph M. Becker 99aa5484e2 Enable further ext/standard/tests/file tests on Windows 2020-07-10 13:36:41 +02:00
Dmitry Stogov b7dd8679df Fixed tracing JIT miss-compilation 2020-07-10 14:13:53 +03:00
Dmitry Stogov 8d15a2bc8e Restore registers 2020-07-10 12:51:19 +03:00
Christoph M. Becker ef1de5e973 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix skip reasons
2020-07-10 11:28:28 +02:00
Christoph M. Becker 7edc5e5e39 Fix skip reasons
These tests fail on Windows for different reasons, but not because
symlinks, links, or lstat() would not be supported on Windows
generally.
2020-07-10 11:26:48 +02:00
Nikita Popov c1e792e1aa Drop dead prototype 2020-07-10 10:23:19 +02:00
twosee b284ba3943 Add zend_wrong_parameter_error to reduce the size of ZPP macro
Closes GH-5831.
2020-07-10 10:12:23 +02:00
Christoph M. Becker bdcda50304 Merge branch 'PHP-7.4'
* PHP-7.4:
  Enable symlink_link_linkinfo_is_link_* tests on Windows
2020-07-10 10:10:30 +02:00
Christoph M. Becker 68293b19d4 Enable symlink_link_linkinfo_is_link_* tests on Windows
We mark symlink_link_linkinfo_is_link_error2.phpt as XFAIL on Windows
ZTS.  Several Windows API file system functions ignore trailing spaces
in absolute filenames after the final directory separator, which causes
`link(' ', $link)` to actually call `CreateHardLink()` which then
fails, because linking folders is not supported.  However, with NTS
builds (as well as on other systems), the $target is found to not
exist, so the function fails without actually attempting to create the
link.  This needs further investigation.
2020-07-10 10:08:12 +02:00
Nikita Popov bc68f10b76 Merge branch 'PHP-7.4'
* PHP-7.4:
  enable ext/ldap/tests on azure
  fix some ext/ldap/tests
2020-07-10 09:57:13 +02:00
Paweł Tomulik b291c92693 enable ext/ldap/tests on azure 2020-07-10 09:56:02 +02:00
Paweł Tomulik c6ab3084df fix some ext/ldap/tests 2020-07-10 09:56:02 +02:00
Nikita Popov bee2cf0899 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix some memory bugs in ldap.c
2020-07-10 09:50:12 +02:00
Nikita Popov 22352868ec Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix some memory bugs in ldap.c
2020-07-10 09:49:50 +02:00
Christoph M. Becker d59709d1ad Mark test as XFAIL for Windows/JIT/Release builds 2020-07-10 09:32:28 +02:00
Ilija Tovilo 9fa1d13301 Implement match expression
RFC: https://wiki.php.net/rfc/match_expression_v2

Closes GH-5371.
2020-07-09 23:52:17 +02:00
Dmitry Stogov c60d0dc2f4 Make tracing JIT to support operator overloading independently from opcache.optimization_level ini directive. 2020-07-09 19:39:12 +03:00
Paweł Tomulik 23ef0a1285 Fix some memory bugs in ldap.c 2020-07-09 18:35:00 +02:00
Dmitry Stogov 31258e4550 Fixed register allocation for tests/lang/operators/preinc_basiclong_64bit.phpt 2020-07-09 18:54:36 +03:00
Dmitry Stogov 9d14bdb377 Bad function detection 2020-07-09 17:24:35 +03:00
Dmitry Stogov 0d9bebac00 Fixed mysqli_fetch_row() function info 2020-07-09 17:24:06 +03:00
Dmitry Stogov 5fec1558b5 Prevent trace recorder reenterancing 2020-07-09 16:33:11 +03:00
Dmitry Stogov b4ae5a20b6 Move assert() to right place 2020-07-09 15:56:24 +03:00
Dmitry Stogov 6d8d08f13b Fixed tracing JIT support for extract() 2020-07-09 15:36:25 +03:00
George Peter Banyard af1de14802 Use ZPP string|array union check in PCRE extension 2020-07-09 14:17:19 +02:00
George Peter Banyard 9839752a9c Voidify some ZEND_API functions
Closes GH-5805
2020-07-09 14:15:57 +02:00
Dmitry Stogov 92448d9db2 Merge branch 'jit-jumptable-x64'
* jit-jumptable-x64:
  Use RIP-relative addressing
  Align jumptables
  Fix jumtable index calculation
  Support JIT jumptables on x64
2020-07-09 13:40:19 +03:00
Christoph M. Becker e33dd6ab1f Merge branch 'PHP-7.4'
* PHP-7.4:
  Prevent parallel test conflicts
2020-07-09 12:36:57 +02:00
Christoph M. Becker db484b612d Prevent parallel test conflicts
Both tests used the same folder, which could clash in case the tests
are run simultaneously.
2020-07-09 12:35:31 +02:00
Nikita Popov 613a56d1cb Remove FREE_UNFETCHED concept
In master normal FREE_OPs work like FREE_UNFETCHED_OP used to, so
there is no point in keeping this distinction anymore, it's just
confusing.
2020-07-09 11:58:33 +02:00
Nikita Popov c05bfa362b Merge branch 'PHP-7.4'
* PHP-7.4:
  Switch back to FREE_UNFETCHED_OP_DATA
2020-07-09 11:54:44 +02:00
Nikita Popov 8318379dd3 Switch back to FREE_UNFETCHED_OP_DATA
Some of the code paths leading to this do not fetch op data.
Hopefully this fixes the release build failure.
2020-07-09 11:54:08 +02:00
Dmitry Stogov 5872bfc481 Use RIP-relative addressing 2020-07-09 12:40:56 +03:00
Nikita Popov 04b17217b4 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix bug #79599 in a different way
  Revert "Fixed bug #97599 (coredump in set_error_handler)"
2020-07-09 11:18:03 +02:00
Nikita Popov 5795dfda93 Fix bug #79599 in a different way
Move the emission of the undefined variable notice before the
array separation.
2020-07-09 11:12:44 +02:00
Nikita Popov a3cb612243 Revert "Fixed bug #97599 (coredump in set_error_handler)"
This reverts commit ccd41e0833.

This causes a large performance regression when notices are thrown
and large arrays are in scope, see bug #79794.
2020-07-09 11:12:44 +02:00
Derick Rethans fc7650944a Merge branch 'PHP-7.4' 2020-07-09 09:51:15 +01:00
Derick Rethans 972383fda4 Revert "Partial fixed bug #79649 (Altering disable_functions from module init corrupts memory)"
This reverts commit a297c09da5.
2020-07-09 09:50:25 +01:00
Dmitry Stogov 67828abca7 Align jumptables 2020-07-09 11:31:53 +03:00
Dmitry Stogov 15c6b673a2 Fix jumtable index calculation 2020-07-09 11:28:48 +03:00
Nikita Popov ad6605317c Support JIT jumptables on x64 2020-07-09 11:22:53 +03:00
George Peter Banyard 7ac9e9bf64 Use ZPP callable check in zend built in functions 2020-07-08 19:38:46 +02:00
George Peter Banyard 51917241e4 [skip ci] Add info on how to check for PHP NULL when using the ZPP callable check 2020-07-08 19:38:35 +02:00
Ondřej Mirtes b4dc8901c7 UPGRADING - note about ReflectionType::isBuiltin()
Closes GH-5822.
2020-07-08 17:15:29 +02:00
Dmitry Stogov a75cf0c7e1 JIT support for opcache restart 2020-07-08 18:14:11 +03:00
George Peter Banyard 06da048622 Use HashTable directly instead of zval 2020-07-08 16:25:49 +02:00
Dmitry Stogov 69b1f3d53d Use small counter values for testing 2020-07-08 16:49:51 +03:00
Dmitry Stogov ad52e4cad9 Fixed tracing JIT support for $http_response_header 2020-07-08 16:33:46 +03:00
Dmitry Stogov 9e8a8e6ab9 Use information about recorded classes for speculative FETCH_OBJ optimization 2020-07-08 14:09:28 +03:00
Nikita Popov 0e71446e7a Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix bug #79787
2020-07-08 11:22:47 +02:00
Nikita Popov 77a8a709da Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix bug #79787
2020-07-08 11:22:18 +02:00
XXiang 3d5de7d746 Fix bug #79787
Closes GH-5807.
2020-07-08 11:20:58 +02:00
Dmitry Stogov fa5355ba08 Change zend_get_known_property_offset() into zend_get_known_property_info() and cleanup 2020-07-08 12:02:37 +03:00
Christoph M. Becker 0e5d19bc96 [ci skip] Merge branch 'PHP-7.4'
* PHP-7.4:
  Report len as -1 instead of INT_MAX
2020-07-08 10:43:21 +02:00
Nikita Popov 22be60bb25 Add declared properties to LibXMLError
Partially addresses bug #79804.
2020-07-08 10:41:46 +02:00
Christoph M. Becker 776e872ab8 [ci skip] Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Report len as -1 instead of INT_MAX
2020-07-08 10:40:13 +02:00
Nikita Popov e6160e99d8 Report len as -1 instead of INT_MAX
Per docs it should be -1. And would be on 32-bit systems, but
not on 64-bit systems.

(cherry picked from commit 39111585a2)
2020-07-08 10:38:11 +02:00
Nikita Popov 2af1d36bc5 Skip special function optimization for redeclared disabled functions
As pointed out on GH-5817.
2020-07-08 10:11:00 +02:00
Sara Golemon f1a343439d Merge branch 'PHP-7.4'
* PHP-7.4:
  Prep for 7.2.33
  Prep NEWS for 7.2.32 release
2020-07-07 19:35:17 +00:00
Sara Golemon fef26361d0 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Prep for 7.2.33
  Prep NEWS for 7.2.32 release
2020-07-07 19:34:08 +00:00
Sara Golemon e54f18ae0f Merge branch 'PHP-7.2' into PHP-7.3
* PHP-7.2:
  Prep for 7.2.33
  Prep NEWS for 7.2.32 release
2020-07-07 19:33:48 +00:00
Sara Golemon c68d48de9e Prep for 7.2.33 2020-07-07 19:32:15 +00:00
Sara Golemon 9588c8474e Prep NEWS for 7.2.32 release 2020-07-07 19:31:05 +00:00
Dmitry Stogov ab5f8f4baf More accurate reference-counter inference (with support for ext/intl/tests/bug72241.phpt) 2020-07-07 19:11:27 +03:00
Nikita Popov 15c265b789 Revert "More accurate reference-counter inference"
This reverts commit b35255ad21.

Temporarily revert this, because it causes a memory leak on the
ext/intl/tests/bug72241.phpt test case, because temporary arrays
are not handled correctly.
2020-07-07 16:53:00 +02:00
Nikita Popov e45f7053cf Merge branch 'PHP-7.4'
* PHP-7.4:
  Fixed bug #79793
2020-07-07 16:33:06 +02:00
Nikita Popov 77acc8a069 Fixed bug #79793
Make sure the string key is not released while throwing the
undefined index warning.
2020-07-07 16:29:48 +02:00
Nikita Popov beb002a867 Fixed bug #79791
First throw the undefined variable warning, and then set the
variable to null. Otherwise we're not guaranteed that it's
actually null afterwards.
2020-07-07 16:00:50 +02:00
Nikita Popov 6259eff352 Handle dim_w undefined variable notice in JIT as well 2020-07-07 15:30:43 +02:00
Nikita Popov 0e6ec974fb Check for undef variable exception in SEND_VAR JIT
Add a return value to zend_jit_undefined_op_helper(), so we can
check for exception based on the return value, instead of fetching
EG(exception).
2020-07-07 15:22:46 +02:00
Nikita Popov cdc4ea2a5c JIT support for undefined index/offset handling 2020-07-07 15:13:03 +02:00
Nikita Popov f497b69944 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fixed bug #79784
2020-07-07 14:24:39 +02:00
Nikita Popov 62bec0e083 Fixed bug #79784
The fix here is essentially the same as for bug #78598, just for
the undefined variable notice, rather than the undefined index one.
2020-07-07 14:22:58 +02:00
Christoph M. Becker 3595ebcd26 [ci skip] Merge branch 'PHP-7.4'
* PHP-7.4:
  Don't use deprecated curly brace offset syntax
2020-07-07 13:57:58 +02:00
Christoph M. Becker b0014adb02 [ci skip] Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Don't use deprecated curly brace offset syntax
2020-07-07 13:56:47 +02:00
Christoph M. Becker f23bd48892 Don't use deprecated curly brace offset syntax
(cherry picked from commit 7ec3aa1871)

Better safe than sorry in case someone ever builds PHP 7.3 with a
future version of PHP SDK with bundled PHP 8.
2020-07-07 13:55:08 +02:00
Christoph M. Becker af32f96c23 Merge branch 'PHP-7.4'
* PHP-7.4:
  Don't use deprecated curly brace offset syntax
2020-07-07 13:26:42 +02:00
Christoph M. Becker 7ec3aa1871 Don't use deprecated curly brace offset syntax 2020-07-07 13:24:41 +02:00
5649 changed files with 296247 additions and 192859 deletions

No files matched your search

+3 -4
View File
@@ -11,9 +11,7 @@ end
define ____executor_globals
if basic_functions_module.zts
if !$tsrm_ls
set $tsrm_ls = ts_resource_ex(0, 0)
end
set $tsrm_ls = _tsrm_ls_cache
set $eg = ((zend_executor_globals*) (*((void ***) $tsrm_ls))[executor_globals_id-1])
set $cg = ((zend_compiler_globals*) (*((void ***) $tsrm_ls))[compiler_globals_id-1])
set $eg_ptr = $eg
@@ -340,7 +338,8 @@ define ____print_ht
end
printf "[%d] ", $i
if $p->key
printf "%s => ", $p->key->val
____print_str $p->key->val $p->key->len
printf " => "
else
printf "%d => ", $p->h
end
-10
View File
@@ -89,16 +89,6 @@ build/PHP-Parser-*
config.h
config.h.in
/ext/date/lib/timelib_config.h
/ext/iconv/php_have_bsd_iconv.h
/ext/iconv/php_have_glibc_iconv.h
/ext/iconv/php_have_ibm_iconv.h
/ext/iconv/php_have_iconv.h
/ext/iconv/php_have_libiconv.h
/ext/iconv/php_iconv_aliased_libiconv.h
/ext/iconv/php_iconv_broken_ignore.h
/ext/iconv/php_iconv_supports_errno.h
/ext/iconv/php_php_iconv_h_path.h
/ext/iconv/php_php_iconv_impl.h
/main/build-defs.h
/main/php_config.h.in
/main/php_config.h
+3 -5
View File
@@ -1,7 +1,7 @@
git:
quiet: true
dist: xenial
dist: bionic
language: c
os: linux
addons:
@@ -68,14 +68,12 @@ env:
jobs:
include:
- env: ENABLE_ZTS=0 ENABLE_DEBUG=0
arch: amd64
- env: ENABLE_ZTS=1 ENABLE_DEBUG=1
arch: amd64
- env: ENABLE_ZTS=1 ENABLE_DEBUG=1 SKIP_IO_CAPTURE_TESTS=1 ARM64=1
arch: arm64
if: type = cron
- env: ENABLE_ZTS=1 ENABLE_DEBUG=1 SKIP_IO_CAPTURE_TESTS=1 S390X=1
arch: s390x
if: type = cron
before_script:
- ccache --version
+1 -1
View File
@@ -293,7 +293,7 @@ SINCE: 7.4.0
-------------------------------------------------------------------------------
EXTENSION: fileinfo
PRIMARY MAINTAINER: Derick Rethans <derick@php.net> (2004 - 2008)
Anatol Belski <ab@php.net> (2012 - 2019)
Anatol Belski <ab@php.net> (2012 - 2020)
MAINTENANCE: Maintained
STATUS: Working
SINCE: 5.3
+1 -1
View File
@@ -1,6 +1,6 @@
--------------------------------------------------------------------
The PHP License, version 3.01
Copyright (c) 1999 - 2019 The PHP Group. All rights reserved.
Copyright (c) 1999 - 2021 The PHP Group. All rights reserved.
--------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
+630 -102
View File
@@ -1,87 +1,560 @@
PHP NEWS
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
09 Jul 2020, PHP 8.0.0alpha2
20 May 2021, PHP 8.0.7RC1
- Core:
. Fixed bug #79790 ("Illegal offset type" exception during AST evaluation
not handled properly). (Nikita)
. Fixed bug #80960 (opendir() warning wrong info when failed on Windows).
(cmb)
. Fixed bug #67792 (HTTP Authorization schemes are treated as case-sensitive).
(cmb)
. Fixed bug #80972 (Memory exhaustion on invalid string offset). (girgias)
09 Jul 2020, PHP 8.0.0alpha2
- FPM:
. Fixed bug #65800 (Events port mechanism). (psumbera)
- FTP:
. Fixed bug #80901 (Info leak in ftp extension). (cmb)
. Fixed bug #79100 (Wrong FTP error messages). (cmb)
- GD:
. Fixed bug #81032 (GD install is affected by external libgd installation).
(Flavio Heleno, cmb)
- Intl:
. Fixed bug #81019 (Unable to clone NumberFormatter after failed parse()).
(Nikita)
- MBString:
. Fixed bug #81011 (mb_convert_encoding removes references from arrays). (cmb)
- ODBC:
. Fixed bug #80460 (ODBC doesn't account for SQL_NO_TOTAL indicator). (cmb)
- Opcache:
. Fixed bug #81007 (JIT "not supported" on 32-bit x86 -- build problem?).
(Nikita)
. Fixed bug #81015 (Opcache optimization assumes wrong part of ternary
operator in if-condition). (Nikita)
. Fixed bug #81046 (Literal compaction merges non-equal related literals).
(Nikita)
- PDO_MySQL:
. Fixed bug #81037 (PDO discards error message text from prepared
statement). (Kamil Tekiela)
- PDO_ODBC:
. Fixed bug #44643 (bound parameters ignore explicit type definitions). (cmb)
- pgsql:
. Fixed php_pgsql_fd_cast() wrt. php_stream_can_cast(). (cmb)
- SPL:
. Fixed bug #80933 (SplFileObject::DROP_NEW_LINE is broken for NUL and CR).
(cmb, Nikita)
- XMLReader:
. Fixed bug #73246 (XMLReader: encoding length not checked). (cmb)
- Zip:
. Fixed bug #80863 (ZipArchive::extractTo() ignores references). (cmb)
06 May 2021, PHP 8.0.6
- PDO_pgsql:
. Revert "Fixed bug #80892 (PDO::PARAM_INT is treated the same as PDO::PARAM_STR)"
from PHP 8.0.5.
29 Apr 2021, PHP 8.0.5
- Core:
. Changed PowerPC CPU registers used by Zend VM to work around GCC bug.
Old registers (r28/r29) might be clobbered by _restgpr routine used for
return from C function compiled with -Os. (Dmitry)
- DOM:
. Fixed bug #66783 (UAF when appending DOMDocument to element). (cmb)
- FFI:
. Fixed bug #79749 (Converting FFI instances to bool fails). (cmb)
. Fixed bug #80847 (CData structs with fields of type struct can't be passed
as C function argument). (Nickolas Daniel da Silva, Dmitry)
- JIT:
. Fixed bug #79743 (Fatal error when assigning to array property
with JIT enabled). (Laruence)
- FPM:
. Fixed bug #80024 (Duplication of info about inherited socket after pool
removing). (Jakub Zelenka)
- PCRE:
. Updated to PCRE2 10.35. (cmb)
- FTP:
. Fixed bug #80880 (SSL_read on shutdown, ftp/proc_open). (cmb, Jakub
Zelenka)
25 Jun 2020, PHP 8.0.0alpha1
- Imap:
. Fixed bug #80710 (imap_mail_compose() header injection). (cmb, Stas)
- LibXML:
. Fixed bug #73533 (Invalid memory access in php_libxml_xmlCheckUTF8). (cmb)
- Opcache:
. Fixed bug #80839 (PHP problem with JIT). (Dmitry)
. Fixed bug #80861 (erronous array key overflow in 2D array with JIT).
(Dmitry)
- Pcntl:
. Fixed bug #79812 (Potential integer overflow in pcntl_exec()). (cmb)
- PDO_ODBC:
. Fixed bug #80783 (PDO ODBC truncates BLOB records at every 256th byte).
(cmb)
- PDO_pgsql:
. Fixed bug #80892 (PDO::PARAM_INT is treated the same as PDO::PARAM_STR).
(Matteo)
- Session:
. Fixed bug #80889 (Cannot set save handler when save_handler is invalid).
(cmb)
- SOAP:
. Fixed bug #69668 (SOAP special XML characters in namespace URIs not
encoded). (cmb)
- Standard:
. Fixed bug #80915 (Taking a reference to $_SERVER hides its values from
phpinfo()). (Rowan Tommins)
. Fixed bug #80914 ('getdir' accidentally defined as an alias of 'dir').
(Rowan Tommins)
01 Apr 2021, PHP 8.0.4
- Core:
. Removed the pdo_odbc.db2_instance_name php.ini directive. (Kalle)
. Fixed bug #77619 (Wrong reflection on MultipleIterator::__construct).
(Fabien Villepinte)
. Fixed bug #65274 (Enhance undefined class constant error with class name).
(Nikita)
. Fixed bug #49555 (Fatal error "Function must be a string" message should be
renamed). (Nikita)
. Fixed bug #70839 (Converting optional argument to variadic forbidden by LSP
checks). (Nikita)
. Fixed bug #69084 (Unclear error message when not implementing a renamed
abstract trait function). (Nikita)
. Fixed bug #62609 (Allow implementing Traversable on abstract classes).
(Nikita)
. Fixed bug #79462 (method_exists and property_exists incoherent behavior).
. Fixed bug #75776 (Flushing streams with compression filter is broken). (cmb)
. Fixed bug #80811 (Function exec without $output but with $restult_code
parameter crashes). (Nikita)
. Fixed bug #80814 (threaded mod_php won't load on FreeBSD: No space
available for static Thread Local Storage). (Dmitry)
- Dba:
. Fixed bug #80817 (dba_popen() may cause segfault during RSHUTDOWN). (cmb)
- IMAP:
. Fixed bug #80800 (imap_open() fails when the flags parameter includes
CL_EXPUNGE). (girgias)
- Intl:
. Fixed bug #80763 (msgfmt_format() does not accept DateTime references).
(cmb)
. Fixed bug #79368 ("Unexpected end of file" is not an acceptable error
message). (Alex Dowad)
. Fixed bug #36365 (scandir duplicates file name at every 65535th file).
- Libxml:
. Fixed bug #51903 (simplexml_load_file() doesn't use HTTP headers). (cmb)
- MySQLnd:
. Fixed bug #80837 (Calling stmt_store_result after fetch doesn't throw an
error). (Kamil Tekiela)
- Opcache:
. Fixed bug #80786 (PHP crash using JIT). (Nikita)
. Fixed bug #80782 (DASM_S_RANGE_VREG on PHP_INT_MIN-1). (Dmitry)
- PCRE:
. Fixed bug #80866 (preg_split ignores limit flag when pattern with \K has
0-width fullstring match). (Kamil Tekiela)
- Session:
. Fixed bug #80774 (session_name() problem with backslash). (cmb)
- Standard:
. Fixed bug #80771 (phpinfo(INFO_CREDITS) displays nothing in CLI). (cmb)
. Fixed bug #78719 (http wrapper silently ignores long Location headers).
(cmb)
. Use SSE2 instructions do locale independent strtolower. (Laruence)
. Fixed bug #79521 (Check __set_state structure). (carusogabriel)
. Fixed bug #79467 (data:// wrappers are writable). (cmb)
. Implemented FR #47074 (phpinfo() reports "On" as 1 for the some
extensions). (cmb)
. Implemented FR #72089 (require() throws fatal error instead of exception).
. Fixed bug #80838 (HTTP wrapper waits for HTTP 1 response after HTTP 101).
(manuelm)
- Zip:
. Fixed bug #80825 (ZipArchive::isCompressionMethodSupported does not exist).
(cmb)
18 Feb 2021, PHP 8.0.3
- Core:
. Fixed #80706 (mail(): Headers after Bcc headers may be ignored). (cmb)
- DOM:
. Fixed bug #80600 (DOMChildNode::remove() doesn't work on CharacterData
nodes). (beberlei)
- Gettext:
. Fixed bug #53251 (bindtextdomain with null dir doesn't return old value).
(cmb)
- MySQLnd:
. Fixed bug #78680 (mysqlnd's mysql_clear_password does not transmit
null-terminated password). (Daniel Black)
. Fixed bug #80713 (SegFault when disabling ATTR_EMULATE_PREPARES and
MySQL 8.0). (Nikita)
- MySQLi:
. Fixed bug #74779 (x() and y() truncating floats to integers). (cmb)
- Opcache:
. Fixed bug #80634 (write_property handler of internal classes is skipped on
preloaded JITted code). (Dmitry)
. Fixed bug #80682 (opcache doesn't honour pcre.jit option). (Remi)
. Fixed bug #80742 (Opcache JIT makes some boolean logic unexpectedly be
true). (Dmitry)
. Fixed bug #80745 (JIT produces Assert failure and UNKNOWN:0 var_dumps in
code involving bitshifts). (Dmitry)
- OpenSSL:
. Fixed bug #80747 (Providing RSA key size < 512 generates key that crash
PHP). (Nikita)
- Phar:
. Fixed bug #75850 (Unclear error message wrt. __halt_compiler() w/o
semicolon) (cmb)
. Fixed bug #70091 (Phar does not mark UTF-8 filenames in ZIP archives). (cmb)
. Fixed bug #53467 (Phar cannot compress large archives). (cmb, lserni)
- Socket:
. Fixed bug #80723 (Different sockets compare as equal (regression in 8.0)).
(Nikita)
. Fixed bug #77966 (Cannot alias a method named "namespace"). (Nikita)
- SPL:
. Fixed bug#80719 (Iterating after failed ArrayObject::setIteratorClass()
causes Segmentation fault). (Nikita)
- Standard:
. Fixed bug #80654 (file_get_contents() maxlen fails above (2**31)-1 bytes).
(cmb)
. Fixed bug #80718 (ext/standard/dl.c fallback code path with syntax error).
(Nikita)
21 Jan 2021, PHP 8.0.2
- Core:
. Fixed bug #80523 (bogus parse error on >4GB source code). (Nikita)
. Fixed bug #80384 (filter buffers entire read until file closed). (Adam
Seitz, cmb)
. Fixed bug #80596 (Invalid union type TypeError in anonymous classes).
(Daniil Gentili)
. Fixed bug #80617 (GCC throws warning about type narrowing in
ZEND_TYPE_INIT_CODE). (Nikita)
- BCMath:
. Fixed bug #80545 (bcadd('a', 'a') doesn't throw an exception).
(Jens de Nies)
- Curl:
. Fixed bug #80595 (Resetting POSTFIELDS to empty array breaks request). (cmb)
- Date:
. Fixed bug #80376 (last day of the month causes runway cpu usage). (Derick)
- DOM:
. Fixed bug #80537 (Wrong parameter type in DOMElement::removeAttributeNode
stub). (Nikita)
- Filter:
. Fixed bug #80584 (0x and 0X are considered valid hex numbers by
filter_var()). (girgias)
- GMP:
. Fixed bug #80560 (Strings containing only a base prefix return 0 object).
(girgias)
- Intl:
. Fixed bug #80644 (Missing resource causes subsequent get() calls to fail).
(Nikita)
- MySQLi:
. Fixed bug #67983 (mysqlnd with MYSQLI_OPT_INT_AND_FLOAT_NATIVE fails to
interpret bit columns). (Nikita)
. Fixed bug #64638 (Fetching resultsets from stored procedure with cursor
fails). (Nikita)
. Fixed bug #72862 (segfault using prepared statements on stored procedures
that use a cursor). (Nikita)
. Fixed bug #77935 (Crash in mysqlnd_fetch_stmt_row_cursor when calling an SP
with a cursor). (Nikita)
- ODBC:
. Fixed bug #80592 (all floats are the same in ODBC parameters). (cmb)
- Opcache:
. Fixed bug #80422 (php_opcache.dll crashes when using Apache 2.4 with JIT).
(Dmitry)
- PDO_Firebird:
. Fixed bug #80521 (Parameters with underscores no longer recognized). (cmb,
Simonov Denis)
- Phar:
. Fixed bug #76929 (zip-based phar does not respect phar.require_hash).
(david at bamsoftware, cmb)
. Fixed bug #77565 (Incorrect locator detection in ZIP-based phars). (cmb)
. Fixed bug #69279 (Compressed ZIP Phar extractTo() creates garbage files).
(cmb)
- Phpdbg:
. Reverted fix for bug #76813 (Access violation near NULL on source operand).
(cmb)
07 Jan 2021, PHP 8.0.1
- Core:
. Fixed bug #80345 (PHPIZE configuration has outdated PHP_RELEASE_VERSION).
(cmb)
. Fixed bug #72964 (White space not unfolded for CC/Bcc headers). (cmb)
. Fixed bug #80391 (Iterable not covariant to mixed). (Nikita)
. Fixed bug #80393 (Build of PHP extension fails due to configuration gap
with libtool). (kir dot morozov at gmail dot com)
. Fixed bug #77069 (stream filter loses final block of data). (cmb)
- Fileinfo:
. Fixed bug #77961 (finfo_open crafted magic parsing SIGABRT). (cmb)
- FPM:
. Fixed bug #69625 (FPM returns 200 status on request without
SCRIPT_FILENAME env). (Jakub Zelenka)
- IMAP
. Fixed bug #80438 (imap_msgno() incorrectly warns and return false on valid UIDs in PHP 8.0.0). (girgias)
. Fix a regression with valid UIDs in imap_savebody() (girgias)
. Make warnings for invalid message numbers/UIDs between functions consistent (girgias)
- Intl:
. Fixed bug #80425 (MessageFormatAdapter::getArgTypeList redefined). (Nikita)
- OCI8
. Create Windows DLLs for Oracle Client 19c. (cmb)
- Opcache:
. Fixed bug #80404 (Incorrect range inference result when division results
in float). (Nikita)
. Fixed bug #80377 (Opcache misses executor_globals). (Nikita)
. Fixed bug #80433 (Unable to disable the use of the AVX command when using
JIT). (Nikita)
. Fixed bug #80447 (Strange out of memory error when running with JIT).
(Dmitry)
. Fixed bug #80480 (Segmentation fault with JIT enabled). (Dmitry)
. Fixed bug #80506 (Immediate SIGSEGV upon ini_set("opcache.jit_debug", 1)).
(Dmitry)
- OpenSSL:
. Fixed bug #80368 (OpenSSL extension fails to build against LibreSSL due to
lack of OCB support). (Nikita)
- PDO MySQL:
. Fixed bug #80458 (PDOStatement::fetchAll() throws for upsert queries).
(Kamil Tekiela)
. Fixed bug #63185 (nextRowset() ignores MySQL errors with native prepared
statements). (Nikita)
. Fixed bug #78152 (PDO::exec() - Bad error handling with multiple commands).
(Nikita)
. Fixed bug #66878 (Multiple rowsets not returned unless PDO statement object
is unset()). (Nikita)
. Fixed bug #70066 (Unexpected "Cannot execute queries while other unbuffered
queries"). (Nikita)
. Fixed bug #71145 (Multiple statements in init command triggers unbuffered
query error). (Nikita)
. Fixed bug #76815 (PDOStatement cannot be GCed/closeCursor-ed when a
PROCEDURE resultset SIGNAL). (Nikita)
. Fixed bug #79872 (Can't execute query with pending result sets). (Nikita)
. Fixed bug #79131 (PDO does not throw an exception when parameter values are
missing). (Nikita)
. Fixed bug #72368 (PdoStatement->execute() fails but does not throw an
exception). (Nikita)
. Fixed bug #62889 (LOAD DATA INFILE broken). (Nikita)
. Fixed bug #67004 (Executing PDOStatement::fetch() more than once prevents
releasing resultset). (Nikita)
. Fixed bug #79132 (PDO re-uses parameter values from earlier calls to
execute()). (Nikita)
- Phar:
. Fixed bug #73809 (Phar Zip parse crash - mmap fail). (cmb)
. Fixed bug #75102 (`PharData` says invalid checksum for valid tar). (cmb)
. Fixed bug #77322 (PharData::addEmptyDir('/') Possible integer overflow).
(cmb)
- Phpdbg:
. Fixed bug #76813 (Access violation near NULL on source operand). (cmb)
- SPL:
. Fixed #62004 (SplFileObject: fgets after seek returns wrong line). (cmb)
- Standard:
. Fixed bug #77423 (FILTER_VALIDATE_URL accepts URLs with invalid userinfo).
(CVE-2020-7071) (cmb)
. Fixed bug #80366 (Return Value of zend_fstat() not Checked). (sagpant, cmb)
- Tidy:
. Fixed bug #77594 (ob_tidyhandler is never reset). (cmb)
- Tokenizer:
. Fixed bug #80462 (Nullsafe operator tokenize with TOKEN_PARSE flag fails).
(Nikita)
- XML:
. XmlParser opaque object renamed to XMLParser for consistency with other XML objects. (girgias)
- Zlib:
. Fixed #48725 (Support for flushing in zlib stream). (cmb)
26 Nov 2020, PHP 8.0.0
- BZ2:
. Fixed bug #71263 (fread() does not report bzip2.decompress errors). (cmb)
- CURL:
. Bumped required libcurl version to 7.29.0. (cmb)
- CLI:
. Allow debug server binding to an ephemeral port via `-S localhost:0`. (Sara)
- Date:
. Fixed bug #65547 (Default value for sunrise/sunset zenith still wrong).
- COM:
. Fixed bug #55847 (DOTNET .NET 4.0 GAC new location). (cmb)
. Fixed bug #62474 (com_event_sink crashes on certain arguments). (cmb)
- Calendar:
. Fixed bug #80007 (Potential type confusion in unixtojd() parameter parsing).
(Andy Postnikov)
- Core:
. Fixed bug #36365 (scandir duplicates file name at every 65535th file).
(cmb)
. Fixed bug #69044 (discrepancy between time and microtime). (krakjoe)
. Fixed bug #49555 (Fatal error "Function must be a string" message should be
renamed). (Nikita)
. Fixed bug #62294 (register_shutdown_function() does not correctly handle
exit code). (Nikita)
. Fixed bug #62609 (Allow implementing Traversable on abstract classes).
(Nikita)
. Fixed bug #65274 (Enhance undefined class constant error with class name).
(Nikita)
. Fixed bug #65275 (Calling exit() in a shutdown function does not change the
exit value in CLI). (Nikita)
. Fixed bug #69084 (Unclear error message when not implementing a renamed
abstract trait function). (Nikita)
. Fixed bug #70839 (Converting optional argument to variadic forbidden by LSP
checks). (Nikita)
. Fixed bug #74558 (Can't rebind closure returned by Closure::fromCallable()).
(cmb)
. Fixed bug #77561 (Shebang line not stripped for non-primary script).
(Nikita)
. Fixed bug #77619 (Wrong reflection on MultipleIterator::__construct).
(Fabien Villepinte)
. Fixed bug #77966 (Cannot alias a method named "namespace"). (Nikita)
. Fixed bug #78236 (convert error on receiving variables when duplicate [).
(cmb)
. Fixed bug #78770 (Incorrect callability check inside internal methods).
(Nikita)
. Fixed bug #79108 (Referencing argument in a function makes it a reference
in the stack trace). (Nikita)
. Fixed bug #79368 ("Unexpected end of file" is not an acceptable error
message). (Alex Dowad)
. Fixed bug #79462 (method_exists and property_exists incoherent behavior).
(cmb)
. Fixed bug #79467 (data:// wrappers are writable). (cmb)
. Fixed bug #79521 (Check __set_state structure). (carusogabriel)
. Fixed bug #79790 ("Illegal offset type" exception during AST evaluation
not handled properly). (Nikita)
. Fixed bug #79791 (Assertion failure when unsetting variable during binary
op). (Nikita)
. Fixed bug #79828 (Segfault when trying to access non-existing variable).
(Nikita)
. Fixed bug #79841 (Syntax error in configure / unescaped "[]" in php.m4).
(Nikita)
. Fixed bug #79852 (count(DOMNodeList) doesn't match
count(IteratorIterator(DOMNodeList))). (Nikita)
. Fixed bug #79867 (Promoted untyped properties should get null default
value). (Nikita)
. Fixed bug #79897 (Promoted constructor params with attribs cause crash).
(Deus Kane)
. Fixed bug #79927 (Generator doesn't throw exception after multiple yield
from iterable). (Nikita)
. Fixed bug #79946 (Build fails due to undeclared UINT32_C). (Nikita)
. Fixed bug #79948 (Exit in auto-prepended file does not abort PHP execution).
(Nikita)
. Fixed bug #80045 (memleak after two set_exception_handler calls with
__call). (Nikita)
. Fixed bug #80096 (Segmentation fault with named arguments in nested call).
(Nikita)
. Fixed bug #80109 (Cannot skip arguments when extended debug is enabled).
(Nikita)
. Fixed bug #80225 (broken namespace usage in eval code). (Nikita)
. Fixed bug #80258 (Windows Deduplication Enabled, randon permission errors).
(cmb)
. Fixed bug #80280 (ADD_EXTENSION_DEP() fails for ext/standard and ext/date).
(cmb)
. Fixed bug #80334 (assert() vs named parameters - confusing error). (Nikita)
. Fixed bug #80055 (Abstract trait methods returning "self" cannot be
fulfilled by traits). (Nikita)
. Fixed faulty generator cleanup with yield from. (Bob)
. Implement #[Attr] Attribute syntax as per final vote in RFC
https://wiki.php.net/rfc/shorter_attribute_syntax_change
. Implemented FR #47074 (phpinfo() reports "On" as 1 for the some
extensions). (cmb)
. Implemented FR #72089 (require() throws fatal error instead of exception).
(Nikita)
. Removed the pdo_odbc.db2_instance_name php.ini directive. (Kalle)
. Use SSE2 instructions do locale independent strtolower. (Laruence)
- Curl:
. Bumped required libcurl version to 7.29.0. (cmb)
. Fixed bug #80121 (Null pointer deref if CurlHandle directly instantiated).
(Nikita)
- DOM:
. Add property DOMXPath::$registerNodeNamespaces and constructor argument
that allow global flag to configure query() or evaluate() calls.
. Fixed bug #79968 (DOMChildNode API crash on unattached nodes). (Benjamin)
. Fixed bug #80268 (loadHTML() truncates at NUL bytes). (cmb)
- Date:
. Fixed bug #60302 (DateTime::createFromFormat should new static(), not new
self()). (Derick)
. Fixed bug #65547 (Default value for sunrise/sunset zenith still wrong).
(cmb)
. Fixed bug #69044 (discrepancy between time and microtime). (krakjoe)
. Fixed bug #80057 (DateTimeImmutable::createFromFormat() does not populate
time). (Derick)
. Implemented FR #79903 (datetime: new format "p", same as "P" but returning
"Z" for UTC). (gharlan)
- Enchant:
. Add LIBENCHANT_VERSION macro
. Deprecate enchant_broker_set_dict_path, enchant_broker_get_dict_path
enchant_dict_add_to_personal and enchant_dict_is_in_session
. Add enchant_dict_add and enchant_dict_is_added functions
. Use libenchant-2 when available
. Add LIBENCHANT_VERSION macro.
. Add enchant_dict_add and enchant_dict_is_added functions.
. Deprecate enchant_broker_set_dict_path, enchant_broker_get_dict_path,
enchant_dict_add_to_personal and enchant_dict_is_in_session.
. Use libenchant-2 when available.
- FFI:
. Added FFI\CType::getName() method. (chopins)
. Fixed bug #79177 (FFI doesn't handle well PHP exceptions within callback).
(cmb, Dmitry, Nikita)
. Fixed bug #79749 (Converting FFI instances to bool fails). (cmb)
- FPM:
. Fixed bug #64865 (Search for .user.ini files from script dir up to
CONTEXT_DOCUMENT_ROOT). (Will Bender)
. Add pm.status_listen option. (Jakub Zelenka)
- Fileinfo:
. Upgrade to libmagic 5.39. (Anatol)
- GD:
. Added imagegetinterpolation(). (cmb)
. Fixed bug #55005 (imagepolygon num_points requirement). (cmb)
. Replaced gd resources with objects. (Mark Randall)
. Made the $num_points parameter of php_imagepolygon optional. (cmb)
. Removed deprecated image2wbmp(). (cmb)
. Removed deprecated png2wbmp() and jpeg2wbmp(). (cmb)
. Added imagegetinterpolation(). (cmb)
. Replaced gd resources with objects. (Mark Randall)
- IMAP:
. Fixed bug #64076 (imap_sort() does not return FALSE on failure). (cmb)
. Fixed bug #76618 (segfault on imap_reopen). (girgias)
. Fixed bug #80213 (imap_mail_compose() segfaults on certain $bodies). (cmb)
. Fixed bug #80215 (imap_mail_compose() may modify by-val parameters). (cmb)
. Fixed bug #80216 (imap_mail_compose() does not validate types/encodings).
(cmb)
. Fixed bug #80220 (imap_mail_compose() may leak memory). (cmb)
. Fixed bug #80223 (imap_mail_compose() leaks envelope on malformed bodies).
(cmb)
. Fixed bug #80226 (imap_sort() leaks sortpgm memory). (cmb)
. Fixed bug #80239 (imap_rfc822_write_address() leaks memory). (cmb)
. Fixed bug #80242 (imap_mail_compose() segfaults for multipart with rfc822).
(cmb)
. Fixed minor regression caused by fixing bug #80220. (cmb)
- Iconv:
. Dropped support for iconv without proper errno setting. (cmb)
@@ -90,17 +563,22 @@ PHP NEWS
. Removed deprecated INTL_IDNA_VARIANT_2003. (cmb)
- JIT:
. Fixed bug #79582 (Crash seen when opcache.jit=1235 and
opcache.jit_debug=2). (Laruence)
. Fixed bug #77857 (Wrong result if executed with JIT). (Laruence)
. Fixed bug #79255 (PHP cannot be compiled with enable JIT).
(Laruence, Dmitry)
. Fixed bug #79582 (Crash seen when opcache.jit=1235 and
opcache.jit_debug=2). (Laruence)
. Fixed bug #79743 (Fatal error when assigning to array property
with JIT enabled). (Laruence)
. Fixed bug #79864 (JIT segfault in Symfony OptionsResolver). (Dmitry)
. Fixed bug #79888 (Incorrect execution with JIT enabled). (Dmitry)
- JSON:
. The JSON extension is now an integral part of PHP and cannot be disabled
as per RFC: https://wiki.php.net/rfc/always_enable_json (tandre)
- LDAP:
. Fixed memory leaks. (ptomulik)
. Removed deprecated ldap_sort. (mcmic)
- MBString:
@@ -111,30 +589,48 @@ PHP NEWS
. Fixed bug #76809 (SSL settings aren't respected when persistent connections
are used). (fabiomsouto)
- mysqlnd:
- Mysqlnd:
. Fixed #60594 (mysqlnd exposes 160 lines of stats in phpinfo). (PeeHaa)
- OpCache:
- OCI8:
. Deprecated old OCI8 function aliases. (Jens de Nies)
. Modernized oci_register_taf_callback() callable argument parsing
implementation. (girgias)
. Removed obsolete no-op function oci_internal_debug(). (Jens de Nies)
- ODBC:
. Fixed bug #22986 (odbc_connect() may reuse persistent connection). (cmb)
. Fixed bug #44618 (Fetching may rely on uninitialized data). (cmb)
- Opcache:
. Fixed bug #76535 (Opcache does not replay compile-time warnings). (Nikita)
. Fixed bug #78654 (Incorrectly computed opcache checksum on files with
non-ascii characters). (mhagstrand)
. Fixed bug #76535 (Opcache does not replay compile-time warnings). (Nikita)
. Fixed bug #79665 (ini_get() and opcache_get_configuration() inconsistency).
(cmb)
. Fixed bug #80030 (Optimizer segfault with isset on static property with
undef dynamic class name). (Nikita)
. Fixed bug #80175 (PHP8 RC1 - JIT Buffer not working). (cmb)
. Fixed bug #80184 (Complex expression in while / if statements resolves to
false incorrectly). (Nikita)
. Fixed bug #80255 (Opcache bug (bad condition result) in 8.0.0rc1). (Nikita)
. Fixed run-time binding of preloaded dynamically declared function. (Dmitry)
- OpenSSL:
. Added Cryptographic Message Syntax (CMS) support. (Eliot Lear)
- PCRE:
. Don't ignore invalid escape sequences. (sjon)
- PGSQL:
. Bumped required libpq version to 9.1. (cmb)
. Updated to PCRE2 10.35. (cmb)
- PDO:
. Changed default PDO error mode to exceptions. (AllenJB)
. Fixed bug #77849 (Disable cloning of PDO handle/connection objects).
(camporter)
- PDO_Firebird:
. Fixed bug #64937 (Firebird PDO preprocessing sql). (Simonov Denis)
- PDO_OCI:
. Added support for setting and getting the oracle OCI 18c call timeout.
(camporter)
@@ -142,7 +638,10 @@ PHP NEWS
- PDO_PGSQL:
. Bumped required libpq version to 9.1. (cmb)
- phpdbg:
- PGSQL:
. Bumped required libpq version to 9.1. (cmb)
- Phpdbg:
. Fixed bug #76596 (phpdbg support for display_errors=stderr). (kabel)
. Fixed bug #76801 (too many open files). (alekitto)
. Fixed bug #77800 (phpdbg segfaults on listing some conditional breakpoints).
@@ -150,62 +649,90 @@ PHP NEWS
. Fixed bug #77805 (phpdbg build fails when readline is shared). (krakjoe)
- Reflection:
. Fixed bug #78697 (ReflectionClass::implementsInterface - inaccurate error
message with traits). (villfa)
. Implement ReflectionProperty::hasDefaultValue and
Reflection::getDefaultValue (beberlei)
. Fixed bug #64592 (ReflectionClass::getMethods() returns methods out of
scope). (Nikita)
. Fixed bug #77325 (ReflectionClassConstant::$class returns wrong class when
extending). (Nikita)
. Fixed bug #69180 (Reflection does not honor trait conflict resolution /
method aliasing). (Nikita)
. Fixed bug #74939 (Nested traits' aliased methods are lowercased). (Nikita)
. Fixed bug #77325 (ReflectionClassConstant::$class returns wrong class when
extending). (Nikita)
. Fixed bug #78697 (ReflectionClass::implementsInterface - inaccurate error
message with traits). (villfa)
. Fixed bug #80190 (ReflectionMethod::getReturnType() does not handle static
as part of union type). (Nikita)
. Fixed bug #80299 (ReflectionFunction->invokeArgs confused in arguments).
(Nikita)
. Fixed bug #80370 (getAttributes segfault on dynamic properties). (Benjamin
Eberlei)
. Implement #79628 (Add $filter parameter for ReflectionClass::getConstants
and ReflectionClass::getReflectionConstants) (carusogabriel)
. Implement ReflectionProperty::hasDefaultValue and
Reflection::getDefaultValue (beberlei)
- SNMP:
. Fixed bug #70461 (disable md5 code when it is not supported in net-snmp).
(Alexander Bergmann, cmb)
- SPL:
. Fixed bug #65006 (spl_autoload_register fails with multiple callables using
self, same method). (Nikita)
. Fixed bug #65387 (Circular references in SPL iterators are not garbage
collected). (Nikita)
. Fixed bug #71236 (Second call of spl_autoload_register() does nothing if it
has no arguments). (Nikita)
. Fixed bug #79987 (Memory leak in SplFileInfo because of missing
zend_restore_error_handling()). (Dmitry)
. SplFixedArray is now IteratorAggregate rather than Iterator. (alexdowad)
- SQLite3:
. Added SQLite3::setAuthorizer() and respective class constants. (bohwaz)
- Session:
. Fixed bug #73529 (session_decode() silently fails on wrong input). (cmb)
. Fixed bug #78624 (session_gc return value for user defined session
handlers). (bshaffer)
. Fixed bug #73529 (session_decode() silently fails on wrong input). (cmb)
- Shmop:
. Converted shmop resources to objects. (cmb)
- SimpleXML:
. Fixed bug #63575 (Root elements are not properly cloned). (cmb)
. Fixed bug #75245 (Don't set content of elements with only whitespaces).
(eriklundin)
. Fixed bug #63575 (Root elements are not properly cloned). (cmb)
- sodium:
- Sodium:
. Fixed bug #77646 (sign_detached() strings not terminated). (Frank)
- SQLite3:
. Added SQLite3::setAuthorizer() and respective class constants. (bohwaz)
- SPL:
. Fixed bug #71236 (Second call of spl_autoload_register() does nothing if it
has no arguments). (Nikita)
. Fixed bug #65006 (spl_autoload_register fails with multiple callables using
self, same method). (Nikita)
- Standard:
. Implemented FR #78638 (__PHP_Incomplete_Class should be final). (Laruence)
. Fixed bug #77204 (getimagesize(): Read error! should mention file path).
(peter279k)
. Fixed bug #76859 (stream_get_line skips data if used with data-generating
filter). (kkopachev)
. Fixed bug #78385 (parse_url() does not include 'query' when question mark
is the last char). (Islam Israfilov)
. Don't force rebuild of symbol table, when populating $http_response_header
variable by the HTTP stream wrapper. (Dmitry)
. Fixed bug #47983 (mixed LF and CRLF line endings in mail()). (cmb)
. Fixed bug #64060 (lstat_stat_variation7.phpt fails on certain file systems).
(M. Voelker, cmb)
. Fixed bug #75902 (str_replace should warn when misused with nested arrays).
(Nikita)
. Fixed bug #47983 (mixed LF and CRLF line endings in mail()). (cmb)
. Fixed bug #76859 (stream_get_line skips data if used with data-generating
filter). (kkopachev)
. Fixed bug #77204 (getimagesize(): Read error! should mention file path).
(peter279k)
. Fixed bug #78385 (parse_url() does not include 'query' when question mark
is the last char). (Islam Israfilov)
. Fixed bug #79868 (Sorting with array_unique gives unwanted result). (Nikita)
. Fixed bug #80256 (file_get_contents strip first line with chunked encoding
redirect). (Nikita)
. Fixed bug #80266 (parse_url silently drops port number 0). (cmb, Nikita)
. Fixed bug #80290 (Double free when ASSERT_CALLBACK is used with a dynamic
message). (Nikita)
. Implemented FR #78638 (__PHP_Incomplete_Class should be final). (Laruence)
. Made quoting of cmd execution functions consistent. (cmb)
- tidy:
- Tidy:
. Removed the unused $use_include_path parameter from tidy_repair_string().
(cmb)
- Tokenizer:
. Fixed bug #80328 (PhpToken::getAll() confusing name). (Nikita)
- XML:
. Fixed bug #76874 (xml_parser_free() should never leak memory). (Nikita)
@@ -214,30 +741,31 @@ PHP NEWS
(cmb)
. Implemented FR #79344 (xmlwriter_write_attribute_ns: $prefix should be
nullable). (cmb)
. Removed return types from XMLWriter stubs. (cmb)
- Zip:
. Fixed bug #72374 (remove_path strips first char of filename). (tyage, Remi)
. Add ZipArchive::setMtimeName and ZipArchive::setMtimeIndex methods. (Remi)
. Add ZipArchive::setProgressCallback method (since libzip 1.3.0). (Remi)
. Add ZipArchive::setCancelCallback method (since libzip 1.6.0). (Remi)
. Add optional "flags" parameter to ZipArchive::addEmptyDir, addFile and
addFromString methods. (Remi)
. Add "flags" options to ZipArchive::addGlob and addPattern methods
keeping previous behavior having FL_OVERWRITE by default. (Remi)
. Add ZipArchive::replaceFile() method. (Remi)
. Add lastId property to ZipArchive. (Remi)
. ZipArchive::status and ZipArchive::statusSys properties and
ZipArchive::getStatusString() method stay valid after the archive
is closed. (Remi)
. Fixed bug #50678 (files extracted by ZipArchive class lost their
original modified time). (Remi)
. Implemented FR #77960 (add compression / encryption options for
ZipArchive::addGlob and ZipArchive::addPattern). (Remi)
. Add ZipArchive::EM_UNKNOWN and ZipArchive::EM_TRAD_PKWARE constants. (Remi)
. Add ZipArchive::isCompressionMethodSupported() and
ZipArchive::isEncryptionMethodSupported() method (libzip 1.7.0). (Remi)
. Add ZipArchive::replaceFile() method. (Remi)
. Add ZipArchive::setCancelCallback method (since libzip 1.6.0). (Remi)
. Add ZipArchive::setMtimeName and ZipArchive::setMtimeIndex methods. (Remi)
. Add ZipArchive::setProgressCallback method (since libzip 1.3.0). (Remi)
. Add lastId property to ZipArchive. (Remi)
. Add optional "flags" parameter to ZipArchive::addEmptyDir, addFile and
addFromString methods. (Remi)
. Fixed bug #50678 (files extracted by ZipArchive class lost their
original modified time). (Remi)
. Fixed bug #72374 (remove_path strips first char of filename). (tyage, Remi)
. Implemented FR #77960 (add compression / encryption options for
ZipArchive::addGlob and ZipArchive::addPattern). (Remi)
. ZipArchive::status and ZipArchive::statusSys properties and
ZipArchive::getStatusString() method stay valid after the archive
is closed. (Remi)
- Zlib:
. Fixed bug #71417 (fread() does not report zlib.inflate errors). (cmb)
<<< NOTE: Insert NEWS from last stable release here prior to actual release! >>>
. Fixed bug #78792 (zlib.output_compression disabled by Content-Type: image/).
(cmb)
+2 -2
View File
@@ -729,13 +729,13 @@ TSRM_API size_t tsrm_get_ls_cache_tcb_offset(void)
#if defined(__APPLE__) && defined(__x86_64__)
// TODO: Implement support for fast JIT ZTS code ???
return 0;
#elif defined(__x86_64__) && defined(__GNUC__)
#elif defined(__x86_64__) && defined(__GNUC__) && !defined(__FreeBSD__)
size_t ret;
asm ("movq _tsrm_ls_cache@gottpoff(%%rip),%0"
: "=r" (ret));
return ret;
#elif defined(__i386__) && defined(__GNUC__)
#elif defined(__i386__) && defined(__GNUC__) && !defined(__FreeBSD__)
size_t ret;
asm ("leal _tsrm_ls_cache@ntpoff,%0"
+1 -1
View File
@@ -147,7 +147,7 @@ TSRM_API const char *tsrm_api_name(void);
# define __has_attribute(x) 0
#endif
#if !__has_attribute(tls_model)
#if !__has_attribute(tls_model) || defined(__FreeBSD__)
# define TSRM_TLS_MODEL_ATTR
#elif __PIC__
# define TSRM_TLS_MODEL_ATTR __attribute__((tls_model("initial-exec")))
+296 -44
View File
@@ -21,9 +21,15 @@ PHP 8.0 UPGRADE NOTES
========================================
- Core:
. `match` is now a reserved keyword.
. Assertion failures now throw by default. If the old behavior is desired,
then set `assert.exception=0` in INI settings.
. Methods with the same name as the class are no longer interpreted as
constructors. The __construct() method should be used instead.
. Removed ability to call non-static methods statically.
Thus `is_callable` will fail when checking for a non-static method with a
classname (must check with an object instance).
. Removed (real) cast.
. Removed (unset) cast.
. Removed track_errors ini directive. This means that $php_errormsg is no
longer available. The error_get_last() function may be used instead.
@@ -47,7 +53,7 @@ PHP 8.0 UPGRADE NOTES
parameter consistent with isset() and normal array access. All key types now
use the usual coercions and array/object keys throw a TypeError.
. Any array that has a number n as its first numeric key will use n+1 for
its next implicit key. Even if n is negative.
its next implicit key, even if n is negative.
RFC: https://wiki.php.net/rfc/negative_array_index
. The default error_reporting level is now E_ALL. Previously it excluded
E_NOTICE and E_DEPRECATED.
@@ -78,6 +84,10 @@ PHP 8.0 UPGRADE NOTES
Additionally, care should be taken that error messages are not displayed in
production environments, which can result in information leaks. Please
ensure that display_errors=Off is used in conjunction with error logging.
. Following the hash comment operator # immediately with an opening bracket
is not supported as a comment anymore since this syntax is now used for
attributes.
RFC: https://wiki.php.net/rfc/shorter_attribute_syntax_change
. Inheritance errors due to incompatible method signatures (LSP violations)
will now always generate a fatal error. Previously a warning was generated
in some cases.
@@ -85,7 +95,7 @@ PHP 8.0 UPGRADE NOTES
. The precedence of the concatenation operator has changed relative to
bitshifts and addition as well as subtraction.
RFC: https://wiki.php.net/rfc/concatenation_precedence
. Arguments with a default-value that resolves to null at run-time will no
. Arguments with a default value that resolves to null at runtime will no
longer implicitly mark the argument type as nullable. Either use an explicit
nullable type, or an explicit null default value instead.
@@ -110,11 +120,12 @@ PHP 8.0 UPGRADE NOTES
* Attempting to read an undefined variable.
* Attempting to read an undefined property.
* Attempting to read an undefined array key.
* Attempting to read a property of a non-object.
* Attempting to access an array index of a non-array.
* Attempting to convert an array to string.
* Attempting to use a resource as an array key.
* Attempting to use null, a boolean or a float as a string offset.
* Attempting to use null, a boolean, or a float as a string offset.
* Attempting to read an out-of-bounds string offset.
* Attempting to assign an empty string to a string offset.
@@ -127,10 +138,10 @@ PHP 8.0 UPGRADE NOTES
. Uncaught exceptions now go through "clean shutdown", which means that
destructors will be called after an uncaught exception.
. Compile time fatal error "Only variables can be passed by reference" has
been delayed until run-time and converted to "Cannot pass parameter by
been delayed until runtime and converted to "Argument cannot be passed by
reference" exception.
. Some "Only variables should be passed by reference" notices have been
converted to "Cannot pass parameter by reference" exception.
converted to "Argument cannot be passed by reference" exception.
. The generated name for anonymous classes has changed. It will now include
the name of the first parent or interface:
@@ -141,15 +152,8 @@ PHP 8.0 UPGRADE NOTES
new class {};
// -> class@anonymous
The name shown above is still followed by a null byte and and a unique
The name shown above is still followed by a null byte and a unique
suffix.
. Declaring a required parameter after an optional one is deprecated. As an
exception, declaring a parameter of the form "Type $param = null" before
a required one continues to be allowed, because this pattern was sometimes
used to achieve nullable types in older PHP versions.
function test($a = [], $b) {} // Deprecated
function test(Foo $a = null, $b) {} // Allowed
. Non-absolute trait method references in trait alias adaptations are now
required to be unambiguous:
@@ -161,7 +165,7 @@ PHP 8.0 UPGRADE NOTES
}
If both T1::func() and T2::func() exist, this code was previously silently
accepted, and func as assumed to refer to T1::func. Now it will generate a
accepted, and func was assumed to refer to T1::func. Now it will generate a
fatal error instead, and either T1::func or T2::func needs to be written
explicitly.
. The signature of abstract methods defined in traits is now checked against
@@ -194,6 +198,67 @@ PHP 8.0 UPGRADE NOTES
RFC: https://wiki.php.net/rfc/locale_independent_float_to_string
. Removed support for deprecated curly braces for offset access
RFC: https://wiki.php.net/rfc/deprecate_curly_braces_array_access
. Applying the final modifier on a private method will now produce a warning
unless that method is the constructor.
RFC: https://wiki.php.net/rfc/inheritance_private_methods
. If an object constructor exit()s, the object destructor will no longer be
called. This matches the behavior when the constructor throws.
. Non-strict comparisons between numbers and non-numeric strings now work by
casting the number to string and comparing the strings. Comparisons between
numbers and numeric strings continue to work as before. Notably, this means
that `0 == "not-a-number"` is considered false now.
RFC: https://wiki.php.net/rfc/string_to_number_comparison
. Namespaced names can no longer contain whitespace: While `Foo\Bar` will be
recognized as a namespaced name, `Foo \ Bar` will not. Conversely, reserved
keywords are now permitted as namespace segments, which may also change the
interpretation of code: `new\x` is now the same as `constant('new\x')`, not
`new \x()`.
RFC: https://wiki.php.net/rfc/namespaced_names_as_token
. Nested ternaries now require explicit parentheses.
RFC: https://wiki.php.net/rfc/ternary_associativity
. debug_backtrace() and Exception::getTrace() will no longer provide
references to arguments. It will not be possible to change function
arguments through the backtrace.
. Numeric string handling has been altered to be more intuitive and less
error-prone. Trailing whitespace is now allowed in numeric strings for
consistency with how leading whitespace is treated. This mostly affects:
- The is_numeric() function
- String-to-string comparisons
- Type declarations
- Increment and decrement operations
The concept of a "leading-numeric string" has been mostly dropped; the
cases where this remains exist in order to ease migration. Strings which
emitted an E_NOTICE "A non well-formed numeric value encountered" will now
emit an E_WARNING "A non-numeric value encountered" and all strings which
emitted an E_WARNING "A non-numeric value encountered" will now throw a
TypeError. This mostly affects:
- Arithmetic operations
- Bitwise operations
This E_WARNING to TypeError change also affects the E_WARNING
"Illegal string offset 'string'" for illegal string offsets. The behavior
of explicit casts to int/float from strings has not been changed.
RFC: https://wiki.php.net/rfc/saner-numeric-strings
. Magic Methods will now have their arguments and return types checked if
they have them declared. The signatures should match the following list:
__call(string $name, array $arguments): mixed
__callStatic(string $name, array $arguments): mixed
__clone(): void
__debugInfo(): ?array
__get(string $name): mixed
__invoke(mixed $arguments): mixed
__isset(string $name): bool
__serialize(): array
__set(string $name, mixed $value): void
__set_state(array $properties): object
__sleep(): array
__unserialize(array $data): void
__unset(string $name): void
__wakeup(): void
RFC: https://wiki.php.net/rfc/magic-methods-signature
. call_user_func_array() array keys will now be interpreted as parameter names,
instead of being silently ignored.
- COM:
. Removed the ability to import case-insensitive constants from type
@@ -247,9 +312,12 @@ PHP 8.0 UPGRADE NOTES
warning.
- GD:
. The GD extension now uses objects as the underlying data structure for
images, rather than resources. These objects are completely opaque, i.e.
they don't have any methods.
. The GD extension now uses a GdImage objects as the underlying data structure
for images, rather than resources. These objects are completely opaque, i.e.
they don't have any methods. Return value checks using is_resource() should
be replaced with checks for `false`. The imagedestroy() function no longer
has an effect, instead the GdImage instance is automatically destroyed if
it is no longer referenced.
. The deprecated function image2wbmp() has been removed.
RFC: https://wiki.php.net/rfc/image2wbmp
. The deprecated functions png2wbmp() and jpeg2wbmp() have been removed.
@@ -262,9 +330,13 @@ PHP 8.0 UPGRADE NOTES
gmp_random_bits() should be used instead.
- Iconv:
. iconv() implementations which do not properly set errno in case of errors,
. iconv() implementations which do not properly set errno in case of errors
are no longer supported.
- IMAP:
. The unused default_host argument of imap_headerinfo() has been removed.
. The imap_header() function which is an alias of imap_headerinfo() has been removed.
- Intl:
. The deprecated constant INTL_IDNA_VARIANT_2003 has been removed.
RFC: https://wiki.php.net/rfc/deprecate-and-remove-intl_idna_variant_2003
@@ -275,6 +347,8 @@ PHP 8.0 UPGRADE NOTES
- LDAP:
. The deprecated function ldap_sort has been removed.
. The deprecated function ldap_control_paged_result has been removed.
. The deprecated function ldap_control_paged_result_response has been removed.
. The interface of ldap_set_rebind_proc has changed; the $callback parameter
does not accept empty string anymore; null value shall be used instead.
@@ -312,17 +386,50 @@ PHP 8.0 UPGRADE NOTES
now be empty.
. The $is_hex parameter, which was not used internally, has been removed from
mb_decode_numericentity().
. The legacy behaviour of passing the encoding as the third argument instead
of an offset for the mb_strrpos() function has been removed, provide an
. The legacy behavior of passing the encoding as the third argument instead
of an offset for the mb_strrpos() function has been removed; provide an
explicit 0 offset with the encoding as the fourth argument instead.
. The ISO_8859-* character encoding aliases have been replaced by ISO8859-*
aliases for better interoperability with the iconv extension. The mbregex
ISO 8859 aliases with underscores (ISO_8859_* and ISO8859_*) have also been
removed.
. mb_ereg() and mb_eregi() will now return boolean true on a successful
match. Previously they returned integer 1 if $matches was not passed, or
max(1, strlen($reg[0])) is $matches was passed.
- OCI8:
. The OCI-Lob class is now called OCILob, and the OCI-Collection class is now
called OCICollection for name compliance enforced by PHP 8 arginfo
type annotation tooling.
. Several alias functions have been marked as deprecated.
. oci_internal_debug() and its alias ociinternaldebug() have been removed.
- ODBC:
. odbc_connect() no longer reuses persistent connections.
. The unused flags parameter of odbc_exec() has been removed.
- OpenSSL:
. openssl_x509_read() and openssl_csr_sign() will now return an
OpenSSLCertificate object rather than a resource. Return value checks using
is_resource() should be replaced with checks for `false`.
. The openssl_x509_free() function is deprecated and no longer has an effect,
instead the OpenSSLCertificate instance is automatically destroyed if it is no
longer referenced.
. openssl_csr_new() will now return an OpenSSLCertificateSigningRequest object
rather than a resource. Return value checks using is_resource() should be
replaced with checks for `false`.
. openssl_pkey_new() will now return an OpenSSLAsymmetricKey object rather than a
resource. Return value checks using is_resource() should be replaced with
checks for `false`.
. The openssl_pkey_free() function is deprecated and no longer has an effect,
instead the OpenSSLAsymmetricKey instance is automatically destroyed if it is no
longer referenced.
. openssl_seal() and openssl_open() now require $method to be passed, as the
previous default of "RC4" is considered insecure.
- PCRE:
. When passing invalid escape sequences they are no longer interpreted as
literals. This behaviour previously required the X modifier - which is
literals. This behavior previously required the X modifier - which is
now ignored.
- PDO:
@@ -330,13 +437,35 @@ PHP 8.0 UPGRADE NOTES
"exceptions". See https://www.php.net/manual/en/pdo.error-handling.php
for details of behavior changes and how to explicitly set this attribute.
RFC: https://wiki.php.net/rfc/pdo_default_errmode
. The method PDOStatement::setFetchMode() now accepts the following signature:
. The signatures of some PDO methods have changed:
PDOStatement::setFetchMode($mode, $classname, $params)
PDO::query(
string $statement, ?int $fetch_mode = null, ...$fetch_mode_args)
PDOStatement::setFetchMode(int $mode, ...$params)
- PDO MySQL:
. PDO::inTransaction() now reports the actual transaction state of the
connection, rather than an approximation maintained by PDO. If a query that
is subject to "implicit commit" is executed, PDO::inTransaction() will
subsequently return false, as a transaction is no longer active.
- PDO_ODBC:
. The php.ini directive pdo_odbc.db2_instance_name has been removed
- pgsql:
. The deprecated pg_connect() syntax using multiple parameters instead of a
connection string is no longer supported.
. The deprecated pg_lo_import() and pg_lo_export() signature that passes the
connection as the last argument is no longer supported. The connection
should be passed as first argument instead.
. pg_fetch_all() will now return an empty array instead of false for result
sets with zero rows.
- Phar:
. Metadata associated with a phar will no longer be automatically unserialized,
to fix potential security vulnerabilities due to object instantiation, autoloading, etc.
RFC: https://wiki.php.net/rfc/phar_stop_autoloading_metadata
- Reflection:
. The method signatures
@@ -371,13 +500,24 @@ PHP 8.0 UPGRADE NOTES
. ReflectionMethod::isConstructor() and ReflectionMethod::isDestructor() now
also return true for `__construct` and `__destruct` methods of interfaces.
Previously, this would only be true for methods of classes and traits.
. ReflectionType::isBuiltin() method has been moved to ReflectionNamedType.
ReflectionUnionType does not have it.
- Socket:
- Sockets:
. The deprecated AI_IDN_ALLOW_UNASSIGNED and AI_IDN_USE_STD3_ASCII_RULES
flags for socket_addrinfo_lookup() have been removed.
. socket_create(), socket_create_listen(), socket_accept(),
socket_import_stream(), socket_addrinfo_connect(), socket_addrinfo_bind(),
and socket_wsaprotocol_info_import() will now return a Socket object rather
than a resource. Return value checks using is_resource() should be replaced
with checks for `false`.
. socket_addrinfo_lookup() will now return an array of AddressInfo objects
rather than resources.
- SPL:
. SplFileObject::fgetss() has been removed.
. SplFileObject::seek() now always seeks to the beginning of the line.
Previously, positions >=1 sought to the beginning of the next line.
. SplHeap::compare($a, $b) now specifies a method signature. Inheriting
classes implementing this method will now have to use a compatible
method signature.
@@ -387,6 +527,12 @@ PHP 8.0 UPGRADE NOTES
. spl_autoload_register() will now always throw a TypeError on invalid
arguments, therefore the second argument $do_throw is ignored and a
notice will be emitted if it is set to false.
. SplFixedArray is now an IteratorAggregate and not an Iterator.
SplFixedArray::rewind(), ::current(), ::key(), ::next(), and ::valid()
have been removed. In their place, SplFixedArray::getIterator() has been
added. Any code which uses explicit iteration over SplFixedArray must now
obtain an Iterator through SplFixedArray::getIterator(). This means that
SplFixedArray is now safe to use in nested loops.
- Standard:
. assert() will no longer evaluate string arguments, instead they will be
@@ -423,7 +569,7 @@ PHP 8.0 UPGRADE NOTES
. money_format() has been removed.
. ezmlm_hash() has been removed.
. restore_include_path() has been removed.
. get_magic_quotes_gpc() and get_magic_quotes_gpc_runtime() has been removed.
. get_magic_quotes_gpc() and get_magic_quotes_runtime() has been removed.
. FILTER_SANITIZE_MAGIC_QUOTES has been removed.
. Calling implode() with parameters in a reverse order ($pieces, $glue) is no
longer supported.
@@ -451,17 +597,40 @@ PHP 8.0 UPGRADE NOTES
. Removed deprecated DES fallback in crypt(). If an unknown salt format is
passed to crypt(), the function will fail with *0 instead of falling back
to a weak DES hash now.
. Specifying out of range rounds for sha256/sha512 crypt() will now fail with
*0 instead of clamping to the closest limit. This matches glibc behavior.
. The result of sorting functions may have changed, if the array contains
equal-comparing elements.
. Sort comparison functions return true/false will now throw a deprecation
warning and should be replaced with an implementation return an integer
smaller than, equal to, or greater than zero.
elements that compare as equal.
. Sort comparison functions that return true or false will now throw a
deprecation warning, and should be replaced with an implementation
that returns an integer less than, equal to, or greater than zero.
// Replace
usort($array, fn($a, $b) => $a > $b);
// With
usort($array, fn($a, $b) => $a <=> $b);
. Any functions accepting callbacks that are not explicitly specified to
accept parameters by reference will now warn if a callback with reference
parameters is used. Examples include array_filter() and array_reduce().
This was already the case for most, but not all, functions previously.
. The HTTP stream wrapper as used by functions like file_get_contents()
now advertises HTTP/1.1 rather than HTTP/1.0 by default. This does not
change the behavior of the client, but may cause servers to respond
differently. To retain the old behavior, set the 'protocol_version'
stream context option, e.g.
$ctx = stream_context_create(['http' => ['protocol_version' => '1.0']]);
echo file_get_contents('http://example.org', false, $ctx);
. Calling crypt() without an explicit salt is no longer supported. If you
would like to produce a strong hash with an auto-generated salt, use
password_hash() instead.
. substr(), mb_substr(), iconv_substr() and grapheme_substr() now consistently
clamp out-of-bounds offsets to the string boundary. Previously, false was
returned instead of the empty string in some cases.
. Populating $http_response_header variable by the HTTP stream wrapper
doesn't force rebuilding of symbol table anymore.
- Sysvmsg:
. msg_get_queue() will now return an SysvMessageQueue object rather than a
resource. Return value checks using is_resource() should be replaced with
@@ -471,6 +640,8 @@ PHP 8.0 UPGRADE NOTES
. sem_get() will now return an SysvSemaphore object rather than a resource.
Return value checks using is_resource() should be replaced with checks
for `false`.
. The $auto_release parameter of sem_get() was changed to accept bool values
rather than int.
- Sysvshm:
. shm_attach() will now return an SysvSharedMemory object rather than a resource.
@@ -480,27 +651,38 @@ PHP 8.0 UPGRADE NOTES
- tidy:
. The $use_include_path parameter, which was not used internally, has been
removed from tidy_repair_string().
. tidy::repairString() and tidy::repairFile() became static methods
- Tokenizer:
. T_COMMENT tokens will no longer include a trailing newline. The newline will
instead be part of a following T_WHITESPACE token. It should be noted that
T_COMMENT is not always followed by whitespace, it may also be followed by
T_CLOSE_TAG or end-of-file.
. Namespaced names are now represented using the T_NAME_QUALIFIED (Foo\Bar),
T_NAME_FULLY_QUALIFIED (\Foo\Bar) and T_NAME_RELATIVE (namespace\Foo\Bar)
tokens. T_NS_SEPARATOR is only used for standalone namespace separators,
and only syntactially valid in conjunction with group use declarations.
RFC: https://wiki.php.net/rfc/namespaced_names_as_token
- XML:
. xml_parser_create(_ns) will now return an XmlParser object rather than a
. xml_parser_create(_ns) will now return an XMLParser object rather than a
resource. Return value checks using is_resource() should be replaced with
checks for `false`. The xml_parser_free() function no longer has an effect,
instead the XmlParser instance is automatically destroyed if it is no longer
instead the XMLParser instance is automatically destroyed if it is no longer
referenced.
- XMLReader:
. XMLReader::open() and XMLReader::xml() are now static methods. They still
can be called dynamically, though, but inheriting classes need to declare
them as static if they override these methods.
- XMLWriter:
. The XMLWriter functions now accept and return, respectively, XMLWriter
objects instead of resources.
- Zip:
. ZipArchive::OPSYS_Z_CPM have been removed, should use ZipArchive::OPSYS_CPM
(this name was a typo).
. ZipArchive::OPSYS_Z_CPM has been removed (this name was a typo). Use
ZipArchive::OPSYS_CPM instead.
- Zlib:
. gzgetss() has been removed.
@@ -510,6 +692,8 @@ PHP 8.0 UPGRADE NOTES
. deflate_init() will now return a DeflateContext object rather than a
resource. Return value checks using is_resource() should be replaced with
checks for `false`.
. zlib.output_compression is no longer automatically disabled for
Content-Type: image/*.
========================================
2. New Features
@@ -566,13 +750,27 @@ PHP 8.0 UPGRADE NOTES
. Added support for Attributes
RFC: https://wiki.php.net/rfc/attributes_v2
RFC: https://wiki.php.net/rfc/attribute_amendments
RFC: https://wiki.php.net/rfc/shorter_attribute_syntax
RFC: https://wiki.php.net/rfc/shorter_attribute_syntax_change
. Added support for constructor property promotion (declaring properties in
the constructor signature).
RFC: https://wiki.php.net/rfc/constructor_promotion
. Added support for `match` expression.
RFC: https://wiki.php.net/rfc/match_expression_v2
. Private methods declared on a parent class no longer enforce any
inheritance rules on the methods of a child class. (with the exception of
final private constructors)
RFC: https://wiki.php.net/rfc/inheritance_private_methods
. Added support for nullsafe operator (`?->`).
RFC: https://wiki.php.net/rfc/nullsafe_operator
. Added support for named arguments.
RFC: https://wiki.php.net/rfc/named_params
- Date:
. Added DateTime::createFromInterface() and
DateTimeImmutable::createFromInterface().
. Added the DateTime format specifier "p" which is the same as "P" but
returning "Z" for UTC.
- Dom:
. Introduce DOMParentNode and DOMChildNode with new traversal and
@@ -584,6 +782,11 @@ PHP 8.0 UPGRADE NOTES
. enchant_dict_is_added()
. LIBENCHANT_VERSION macro
- FPM:
. Added a new option pm.status_listen that allows getting status from
different endpoint (e.g. port or UDS file) which is useful for getting
status when all children are busy with serving long running requests.
- Hash:
. HashContext objects can now be serialized.
@@ -616,12 +819,30 @@ PHP 8.0 UPGRADE NOTES
$proc = proc_open($command, [['pty'], ['pty'], ['pty']], $pipes);
. proc_open() now supports socket pair descriptors. The following attaches
a distinct socket pair to stdin, stdout and stderr:
$proc = proc_open(
$command, [['socket'], ['socket'], ['socket']], $pipes);
Unlike pipes, sockets do not suffer from blocking I/O issues on Windows.
However, not all programs may work correctly with stdio sockets.
. Sorting functions are now stable, which means that equal-comparing elements
will retain their original order.
RFC: https://wiki.php.net/rfc/stable_sorting
. array_diff(), array_intersect() and their variations can now be used with
a single array as argument. This means that usages like the following are
now possible:
// OK even if $excludes is empty.
array_diff($array, ...$excludes);
// OK even if $arrays only contains a single array.
array_intersect(...$arrays);
. The $flag parameter of ob_implicit_flush() was changed to accept bool
values rather than int.
- Zip:
. Extension updated to version 1.19.0
. Extension updated to version 1.19.1
. New ZipArchive::lastId property to get index value of last added entry.
. Error can be checked after an archive is closed using ZipArchive::status,
ZipArchive::statusSys properties or ZipArchive::getStatusString() method.
@@ -637,15 +858,18 @@ PHP 8.0 UPGRADE NOTES
- Apache:
. The PHP module has been renamed from php7_module to php_module.
- CGI and FPM will now use CONTEXT_DOCUMENT_ROOT to scan for .user.ini files,
if it is defined. Otherwise, DOCUMENT_ROOT will be used as before. This
improves support for Apache mod_userdir and mod_alias.
========================================
4. Deprecated Functionality
========================================
- Core:
. Declaring a required parameter after an optional one is deprecated. As an
exception, declaring a parameter of the form "Type $param = null" before
a required one continues to be allowed, because this pattern was sometimes
used to achieve nullable types in older PHP versions.
function test($a = [], $b) {} // Deprecated
function test(Foo $a = null, $b) {} // Allowed
. Calling get_defined_functions() with $exclude_disabled explicitly set to
false is deprecated. get_defined_functions() will never include disabled
functions.
@@ -658,9 +882,15 @@ PHP 8.0 UPGRADE NOTES
. enchant_broker_free and enchant_broker_free_dict, unset the object instead
. ENCHANT_MYSPELL and ENCHANT_ISPELL constants
- LibXML:
. libxml_disable_entity_loader() has been deprecated. As libxml 2.9.0 is now
required, external entity loading is guaranteed to be disabled by default,
and this function is no longer needed to protect against XXE attacks.
- PGSQL / PDO PGSQL:
. The constant PG_VERSION_STR has now the same value as PG_VERSION, and thus
is deprecated.
. The constant PGSQL_LIBPQ_VERSION_STR has now the same value as
PGSQL_LIBPQ_VERSION, and thus is deprecated.
. Function aliases in the pgsql extension have been deprecated.
- Zip:
. Using empty file as ZipArchive is deprecated. Libzip 1.6.0
@@ -699,7 +929,7 @@ PHP 8.0 UPGRADE NOTES
. env_method
. enc_password
. ZipArchive::addEmptyDir, ZipArchive::addFile and aZipArchive::addFromString
methods have a new "flags" argument. This allow to manage name encoding
methods have a new "flags" argument. This allows managing name encoding
(ZipArchive::FL_ENC_*) and entry replacement (ZipArchive::FL_OVERWRITE)
. ZipArchive::extractTo now restore file modification time.
@@ -760,8 +990,8 @@ PHP 8.0 UPGRADE NOTES
- Zip:
. ZipArchive::setMtimeName and ZipArchive::setMtimeIndex to set the
modification time of an entry.
. ZipArchive::setProgressCallback to provide updates during archive close.
. ZipArchive::setCancelCallback to allow cancellation during archive close.
. ZipArchive::registerProgressCallback to provide updates during archive close.
. ZipArchive::registerCancelCallback to allow cancellation during archive close.
. ZipArchive::replaceFile to replace an entry content.
. ZipArchive::isCompressionMethodSupported to check optional compression
features.
@@ -843,14 +1073,25 @@ PHP 8.0 UPGRADE NOTES
- PDO:
. PDOStatement now implements IteratorAggregate (instead of Traversable).
- LibXML:
. The minimum required libxml version is now 2.9.0. This means that external
entity loading is now guaranteed to be disabled by default, and no extra
steps need to be taken to protect against XXE attacks.
- MySQLi / PDO MySQL:
. When mysqlnd is not used (which is the default and recommended option),
the minimum supported libmysqlclient version is now 5.1.
the minimum supported libmysqlclient version is now 5.5.
. mysqli_result now implements IteratorAggregate (instead of Traversable).
- PGSQL / PDO PGSQL:
. The PGSQL and PDO PGSQL extensions now require at least libpq 9.1.
- Readline:
. Calling readline_completion_function() before the interactive prompt starts
(e.g. in auto_prepend_file) will now override the default interactive prompt
completion function. Previously, readline_completion_function() only worked
when called after starting the interactive prompt.
- SimpleXML:
. SimpleXMLElement now implements RecursiveIterator and absorbed the
functionality of SimpleXMLIterator. SimpleXMLIterator is an empty extension
@@ -875,6 +1116,14 @@ PHP 8.0 UPGRADE NOTES
11. Changes to INI File Handling
========================================
- zend.exception_string_param_max_len
. New INI directive to set the maximum string length in an argument of a
stringified stack strace.
- com.dotnet_version
. New INI directive to choose the version of the .NET framework to use for
dotnet objects.
========================================
12. Windows Support
========================================
@@ -884,6 +1133,9 @@ PHP 8.0 UPGRADE NOTES
shell now consistently execute `%comspec% /s /c "$commandline"`, which has
the same effect as executing `$commandline` (without additional quotes).
- GD:
. php_gd2.dll has been renamed to php_gd.dll.
- php-test-pack:
. The test runner has been renamed from run-test.php to run-tests.php, to
match its name in php-src.
+294 -14
View File
@@ -20,6 +20,11 @@ PHP 8.0 INTERNALS UPGRADE NOTES
q. GC_COLLECTABLE flag
r. Cannot implement Traversable only
s. zend_fcall_info no_separation flag removed
t. Signature changes
u. Error Notification callbacks to replace zend_error_cb overwrite use-cases
v. Removed Zend APIs
w. Renamed Zend APIs
x. ZEND_EXT_NOP no longer emitted
2. Build system changes
a. Abstract
@@ -32,9 +37,9 @@ PHP 8.0 INTERNALS UPGRADE NOTES
1. Internal API changes
========================
a. Object Handlers API and some related functions, e.g. zend_call_method() and
zend_objects_clone_obj() were changed to receive zend_object* instead of
zval* and zend_string* instead of zval* for property names.
a. The Object Handlers API was changed to receive zend_object* instead of
zval* and zend_string* instead of zval* for property names. See also
section t for other similar changes.
b. ZEND_OVERLOADED_FUNCTION and corresponding call_method() object handler
were removed. ZEND_INTERNAL_FUNCTION with ZEND_ACC_CALL_VIA_HANDLER and
@@ -70,13 +75,13 @@ PHP 8.0 INTERNALS UPGRADE NOTES
Instead type checks should be performed using the zend_parse_parameters()
or ZEND_PARSE_PARAMETERS_*() APIs.
g. zend_free_op type and "should_free" argument of zend_get_zval_ptr() were
removed. It's possible to get the old "should_free" value using the
following code.
g. The zend_free_op type and the "should_free" and "type" arguments of
zend_get_zval_ptr() were removed. It's possible to get the old
"should_free" value using the following code:
zval *ret = zend_get_zval_ptr(opline, opline->op1_type, &opline->op1,
execute_data, BP_VAR_R);
zval *should_free = (op_type & (IS_TMP_VAR|IS_VAR)) ? ret : NULL;
zval *ret = zend_get_zval_ptr(
opline, opline->op1_type, &opline->op1, execute_data);
zval *should_free = (op_type & (IS_TMP_VAR|IS_VAR)) ? ret : NULL;
h. Added the zend_value_error() function, which is intended to be used
to raise ValueError when inappropriate argument values are passed
@@ -89,7 +94,7 @@ PHP 8.0 INTERNALS UPGRADE NOTES
j. compare_objects() handler was removed. Extensions should use compare() object
handler instead and check if both arguments are objects and have the same
compare handler, using ZEND_COMPARE_OBJECTS_FALLBACK() macro.
k. The 'I' length modifier, used to denote 32 and 64bit integer from the custom
snprintf and spprintf implementations has been removed.
Use the ZEND_LONG_FMT, ZEND_ULONG_FMT and ZEND_XLONG_FMT macros defined in
@@ -136,10 +141,273 @@ PHP 8.0 INTERNALS UPGRADE NOTES
zend_create_internal_iterator_zval(return_value, ZEND_THIS);
}
s. The zend_fcall_info no_separation flag has been removed, and separation is
s. The zend_fcall_info no_separation flag has been removed, and separation is
never allowed. If you wish to pass (or allow passing) arguments by
reference, explicitly create those arguments as references using
ZEND_MAKE_REF.
ZEND_MAKE_REF. This removal also affects call_user_function_ex(), which
should be replaced by call_user_function().
t. The following ZEND_API function have changed signature:
1. Void in Zend Engine 4.0:
- add_assoc_*()
- add_index_*()
- add_property_*()
- object_init()
- zend_declare_class_constant*()
- zend_declare_property*()
- zend_startup_modules()
- zend_wrong_parameters_none_error()
- zend_fcall_info_argp()
- zend_fcall_info_argv()
- zend_fcall_info_argn()
- zend_startup()
- zend_set_memory_limit()
- pass_two()
- zend_startup_constants()
- zend_shutdown_constants()
- zend_startup_extensions_mechanism()
- zend_startup_extensions()
- zend_register_extension()
- highlight_string()
- zend_ini_startup()
- zend_ini_shutdown()
- zend_ini_global_shutdown()
- zend_ini_deactivate()
- zend_copy_ini_directives()
- zend_prepare_string_for_scanning()
- zend_init_rsrc_list()
- zend_list_close()
- zend_signal()
- zend_sigaction()
- zend_stack_init()
- zend_stack_del_top()
- zend_stack_destroy()
2. Argument int to uint32_t in Zend Engine 4.0:
- _zend_get_parameters_array_ex()
- zend_copy_parameters_array()
- zend_fcall_info_args_save()
- zend_fcall_info_args_restore()
- zend_fcall_info_argp()
- zend_fcall_info_argv()
- zend_fcall_info_argn()
- zend_wrong_parameter*()
- zend_wrong_callback_error()
- zend_parse_arg_class()
3. Argument int to bool in Zend Engine 4.0:
- add_next_index_bool()
- zend_register_class_alias_ex()
- add_assoc_bool_ex()
- add_index_bool()
- zend_fcall_info_args_clear()
- zend_set_local_var()
- zend_set_local_var_str()
- zend_parse_arg_*()
- shutdown_memory_manager()
- zend_memory_usage()
- zend_memory_peak_usage()
- zend_mm_shutdown()
- zend_eval_string*()
- zend_set_timeout()
- _zend_hash_append_ex()
- _zend_hash_append_ptr_ex()
- zend_alter_ini_entry_ex()
- (*zend_encoding_list_parser) typedef
- zend_multibyte_parse_encoding_list()
- zend_safe_address()
- zend_string_tolower_ex()
- zend_string_alloc()
- zend_string_safe_alloc()
- zend_string_init()
- zend_string_dup()
- zend_string_realloc()
- zend_string_extend()
- zend_string_truncate()
- zend_string_safe_realloc()
- zend_string_release_ex()
- zend_ts_hash_merge()
- zend_ts_hash_sort()
4. Argument int to size_t in Zend Engine 4.0:
- zend_set_hash_symbol()
5. Argument zval* to zend_object* in Zend Engine 4.0:
- zend_read_property()
- zend_update_property()
- zend_unset_property()
- zend_call_method()
- zend_objects_clone_obj()
- zend_get_closure_method_def()
- zend_throw_exception_hook()
- zend_throw_exception_internal()
- zend_get_exception_base()
6. Argument zval* to zend_long in Zend Engine 4.0:
- _php_math_longtobase()
7. Return type from int to zend_result in Zend Engine 4.0:
- (*stream_open_function) in _zend_utility_functions
- (*zend_post_startup_cb)
- (*zend_preload_autoload)
- zend_execute_scripts()
- zend_post_startup()
- _zend_get_parameters_array_ex()
- zend_copy_parameters_array()
- zend_parse_parameters()
- zend_parse_parameters_ex()
- zend_parse_method_parameters()
- zend_parse_method_parameters_ex()
- zend_parse_method_parameters()
- zend_register_functions()
- zend_startup_module()
- zend_startup_module_ex()
- zend_register_class_alias_ex()
- zend_disable_function()
- zend_disable_class()
- zend_update_class_constants()
- zend_update_static_property*()
- object_init_ex()
- object_and_properties_init()
- add_index_zval()
- add_next_index_long_*()
- array_set_zval_key()
- _call_user_function_impl()
- zend_fcall_info_*()
- zend_call_function()
- zend_set_hash_symbol()
- zend_delete_global_variable()
- zend_set_local_var()
- zend_set_local_var_str()
- zend_forbid_dynamic_call()
- zend_get_default_from_internal_arg_info()
- zend_try_assign_typed_ref*()
- zend_ast_evaluate()
- zend_startup_builtin_functions()
- do_bind_function()
- do_bind_class()
- zend_unmangle_property_name_ex()
- zend_register_auto_global()
- zend_register_constant()
- zend_exception_error()
- zend_eval_string*()
- zend_undefined_offset_write()
- zend_undefined_index_write()
- zval_update_constant(_ex)()
- zend_load_extension()
- zend_load_extension_handle()
- zend_hash_del(_ind)()
- zend_hash_str_del(_ind)()
- zend_hash_index_del()
- zend_hash_move_forward_ex()
- zend_hash_move_backward_ex()
- zend_hash_get_current_key_ex()
- zend_hash_get_current_key_type_ex()
- zend_symtable_del(_ind)()
- zend_symtable_str_del(_ind)()
- highlight_file()
- zend_do_link_class()
- zend_alter_ini_entry*()
- zend_restore_ini_entry()
- zend_ini_register_displayer()
- zend_ini_open_file_for_scanning()
- zend_ini_prepare_string_for_scanning()
- zend_user_it_valid()
- zend_create_internal_iterator_zval()
- zend_multibyte_set_filter()
- zend_lex_tstring()
- _zend_module_entry module_startup_func, module_shutdown_func,
request_startup_func, request_shutdown_func, and post_deactivate_func function pointers
- (*zend_encoding_list_parser) typedef
- (*zend_encoding_internal_encoding_setter) typedef
- zend_multibyte_set_functions()
- zend_multibyte_set_script_encoding_by_string()
- add_function()
- sub_function()
- mul_function()
- pow_function()
- div_function()
- mod_function()
- boolean_xor_function()
- boolean_not_function()
- bitwise_not_function()
- bitwise_or_function()
- bitwise_and_function()
- bitwise_xor_function()
- shift_left_function()
- shift_right_function()
- concat_function()
- is_equal_function(
- is_identical_function()
- is_not_identical_function()
- is_not_equal_function()
- is_smaller_function()
- is_smaller_or_equal_function(zv
- increment_function()
- decrement_function()
- zend_stream_open()
- zend_stream_fixup()
- zend_ts_hash_del()
- zend_ts_hash_index_del()
8. Return type from int to bool in Zend Engine 4.0:
- zend_make_printable_zval()
- zend_parse_arg_*()
- is_zend_mm()
- is_zend_ptr()
- zend_mm_is_custom_heap()
- (*zend_mm_chunk_truncate_t)
- (*zend_mm_chunk_extend_t)
- zend_bitset_empty()
- zend_is_smart_branch()
- zend_check_arg_send_type()
- zend_verify_const_access()
- zend_gdb_register_code()
- zend_gdb_present()
- _zend_handle_numeric_str(_ex)()
- zend_hash_exists_ind()
- zend_hash_str_exists_ind()
- zend_symtable_exists(_ind)()
- zend_symtable_str_exists()
- (*zend_encoding_lexer_compatibility_checker)
- zend_object_is_true()
- i_zend_is_true()
- zendi_smart_streq()
- zend_stack_is_empty()
- zend_ts_hash_exists()
- zend_ts_hash_index_exists()
9. Argument void to const char* in Zend Engine 4.0:
- zend_get_op_array_extension_handle()
10. Argument zend_extension to const char* in Zend Engine 4.0:
- zend_get_resource_handle()
11. Argument const char * to HMODULE in Zend Engine 4.0:
- php_win32_image_compatible()
12. const char * argument dropped in Zend Engine 4.0:
- php_win32_crt_compatible()
u. Instead of overwriting zend_error_cb extensions with debugging, monitoring
use-cases catching Errors/Exceptions are strongly encouraged to use
the new error observer API instead.
Error observering callbacks are guaranteed to be called regardless of
the users error_reporting setting or userland error handler return values.
Register observer callbacks during MINIT of an extension:
void my_error_observer_cb(int type,
const char *error_filename,
uint32_t error_lineno,
zend_string *message) {
}
zend_observer_error_register(my_error_observer_cb);
v. The following APIs have been removed from the Zend Engine:
- zend_ts_hash_init_ex(), drop the last argument and use zend_ts_hash_init() instead
- zend_hash_init_ex(), drop the last argument and use zend_hash_init() instead
- zval_internal_dtor(), use zval_internal_ptr_dtor() instead
- zval_dtor_func(), use rc_dtor_func() instead
- zval_ptr_dtor_wrapper(), use zval_ptr_dtor() instead
- zval_internal_ptr_dtor_wrapper(), use zval_internal_ptr_dtor() instead
w. The following APIs have been renamed:
- _zend_ts_hash_init() to zend_ts_hash_init()
x. In COMPILE_EXTENDED_STMT mode, a ZEND_EXT_NOP opcode will no longer be
generated at the start of a function. Use the new observer APIs or hook
into zend_execute_ex instead.
========================
2. Build system changes
@@ -159,14 +427,26 @@ PHP 8.0 INTERNALS UPGRADE NOTES
with extremely constrained memory, and compilation fails with an "out
of memory" message, add "-O0" to CFLAGS.
5. build system and provider are displayed in phpinfo from enviroment:
5. build system and provider are displayed in phpinfo from environment:
- PHP_BUILD_SYSTEM (default is same as PHP_UNAME)
- PHP_BUILD_PROVIDER (no default)
b. Unix build system changes
1. --enable-maintainer-zts is renamed --enable-zts for parity with Windows
and as recognition that ZTS is not a "maintainer" or experimental feature.
and as recognition that ZTS is not a "maintainer" or experimental
feature.
2. The PHP_CHECK_GCC_ARG() m4 macro has been removed in favor of
AX_CHECK_COMPILE_FLAG().
3. The 6th argument of PHP_ADD_SOURCES_X has been removed.
4. The 'special-flags' (3rd) argument of PHP_ADD_SOURCES_X are
now appended instead of prepended to previous compiler flags.
This means compiler flags passed to PHP_NEW_EXTENSION and PHP_ADD_SOURCES
are now appended, this allows to disable compiler flags set by Zend/Zend.m4
(e.g. disable certain compiler flags enabled by -Wextra)
c. Windows build system changes
+6 -12
View File
@@ -163,16 +163,16 @@ int main()
double d = (double) LONG_MIN * LONG_MIN + 2e9;
if ((long) d == 2e9 && (long) -d == -2e9) {
exit(0);
return 0;
}
} else if (sizeof(long) == 8) {
double correct = 18e18 - ((double) LONG_MIN * -2); /* Subtract ULONG_MAX + 1 */
if ((long) 18e18 == correct) { /* On 64-bit, only check between LONG_MAX and ULONG_MAX */
exit(0);
return 0;
}
}
exit(1);
return 1;
}
]])], [
AC_DEFINE([ZEND_DVAL_TO_LVAL_CAST_OK], 1, [Define if double cast to long preserves least significant bits])
@@ -190,12 +190,6 @@ dnl LIBZEND_OTHER_CHECKS
dnl
AC_DEFUN([LIBZEND_OTHER_CHECKS],[
AC_ARG_ENABLE([zts],
[AS_HELP_STRING([--enable-zts],
[Enable thread safety])],
[ZEND_ZTS=$enableval],
[ZEND_ZTS=no])
AC_MSG_CHECKING(whether to enable thread-safety)
AC_MSG_RESULT($ZEND_ZTS)
@@ -212,9 +206,9 @@ else
AC_DEFINE(ZEND_DEBUG,0,[ ])
fi
test -n "$GCC" && CFLAGS="$CFLAGS -Wall -Wextra -Wno-strict-aliasing -Wno-implicit-fallthrough -Wno-unused-parameter -Wno-sign-compare"
test -n "$GCC" && CFLAGS="-Wall -Wextra -Wno-strict-aliasing -Wno-implicit-fallthrough -Wno-unused-parameter -Wno-sign-compare $CFLAGS"
dnl Check if compiler supports -Wno-clobbered (only GCC)
AX_CHECK_COMPILE_FLAG([-Wno-clobbered], CFLAGS="$CFLAGS -Wno-clobbered", , [-Werror])
AX_CHECK_COMPILE_FLAG([-Wno-clobbered], CFLAGS="-Wno-clobbered $CFLAGS", , [-Werror])
test -n "$DEBUG_CFLAGS" && CFLAGS="$CFLAGS $DEBUG_CFLAGS"
@@ -268,7 +262,7 @@ int main()
fprintf(fp, "%d %d\n", ZEND_MM_ALIGNMENT, zeros);
fclose(fp);
exit(0);
return 0;
}
]])], [
LIBZEND_MM_ALIGN=`cat conftest.zend | cut -d ' ' -f 1`
+9 -6
View File
@@ -40,20 +40,23 @@ class test {
}
test::test1(1);
var_dump(func_num_args());
try {
func_num_args();
} catch (Error $exception) {
echo $exception->getMessage() . "\n";
}
echo "Done\n";
?>
--EXPECTF--
int(0)
int(1)
Exception: Too few arguments to function test2(), 0 passed in %s001.php on line 18 and exactly 1 expected
Exception: Too few arguments to function test2(), 0 passed in %s on line %d and exactly 1 expected
int(2)
int(0)
Exception: Too few arguments to function test3(), 1 passed in %s001.php on line 27 and exactly 2 expected
Exception: Too few arguments to function test3(), 1 passed in %s on line %d and exactly 2 expected
int(2)
int(1)
Warning: func_num_args(): Called from the global scope - no function context in %s on line %d
int(-1)
func_num_args() must be called from a function context
Done
+12 -12
View File
@@ -96,26 +96,26 @@ try {
echo "Done\n";
?>
--EXPECTF--
func_get_arg(): Argument #1 ($arg_num) must be greater than or equal to 0
func_get_arg(): Argument 0 not passed to function
func_get_arg(): Argument 1 not passed to function
func_get_arg(): Argument #1 ($arg_num) must be greater than or equal to 0
func_get_arg(): Argument #1 ($position) must be greater than or equal to 0
func_get_arg(): Argument #1 ($position) must be less than the number of the arguments passed to the currently executed function
func_get_arg(): Argument #1 ($position) must be less than the number of the arguments passed to the currently executed function
func_get_arg(): Argument #1 ($position) must be greater than or equal to 0
int(10)
func_get_arg(): Argument 1 not passed to function
func_get_arg(): Argument #1 ($position) must be less than the number of the arguments passed to the currently executed function
int(1)
func_get_arg(): Argument 1 not passed to function
func_get_arg(): Argument #1 ($position) must be less than the number of the arguments passed to the currently executed function
Exception: Too few arguments to function test2(), 0 passed in %s002.php on line %d and exactly 1 expected
int(1)
int(2)
func_get_arg(): Argument 2 not passed to function
func_get_arg(): Argument #1 ($arg_num) must be greater than or equal to 0
func_get_arg(): Argument 0 not passed to function
func_get_arg(): Argument 1 not passed to function
func_get_arg(): Argument #1 ($position) must be less than the number of the arguments passed to the currently executed function
func_get_arg(): Argument #1 ($position) must be greater than or equal to 0
func_get_arg(): Argument #1 ($position) must be less than the number of the arguments passed to the currently executed function
func_get_arg(): Argument #1 ($position) must be less than the number of the arguments passed to the currently executed function
Exception: Too few arguments to function test3(), 1 passed in %s on line %d and exactly 2 expected
int(1)
int(2)
func_get_arg(): Argument 2 not passed to function
func_get_arg(): Argument #1 ($position) must be less than the number of the arguments passed to the currently executed function
int(1)
func_get_arg(): Argument 1 not passed to function
func_get_arg(): Argument #1 ($position) must be less than the number of the arguments passed to the currently executed function
func_get_arg() cannot be called from the global scope
Done
+1 -1
View File
@@ -16,7 +16,7 @@ var_dump(strncmp("qwerty", "qwerty123", 7));
?>
--EXPECT--
int(0)
strncmp(): Argument #3 ($len) must be greater than or equal to 0
strncmp(): Argument #3 ($length) must be greater than or equal to 0
int(0)
int(0)
int(-1)
+1 -1
View File
@@ -19,7 +19,7 @@ var_dump(strncasecmp("01", "01", 1000));
?>
--EXPECT--
strncasecmp(): Argument #3 ($len) must be greater than or equal to 0
strncasecmp(): Argument #3 ($length) must be greater than or equal to 0
int(0)
int(-3)
int(0)
+8 -5
View File
@@ -16,7 +16,12 @@ var_dump(define("test const", 3));
var_dump(define("test const", 3));
var_dump(define("test", array(1)));
var_dump(define("test1", fopen(__FILE__, 'r')));
try {
var_dump(define("test2", new stdclass));
} catch (TypeError $exception) {
echo $exception->getMessage() . "\n";
}
var_dump(constant(" "));
var_dump(constant("[[["));
@@ -27,19 +32,17 @@ echo "Done\n";
--EXPECTF--
TypeError: define(): Argument #1 ($constant_name) must be of type string, array given
Notice: Constant TRUE already defined in %s on line %d
Warning: Constant TRUE already defined in %s on line %d
bool(false)
bool(true)
bool(true)
bool(true)
Notice: Constant test const already defined in %s on line %d
Warning: Constant test const already defined in %s on line %d
bool(false)
bool(true)
bool(true)
Warning: Constants may only evaluate to scalar values, arrays or resources in %s on line %d
bool(false)
define(): Argument #2 ($value) cannot be an object, stdClass given
int(1)
int(2)
int(3)
+7 -5
View File
@@ -26,7 +26,11 @@ $f2 = new foo2;
$f1->bar();
$f2->bar();
var_dump(get_class());
try {
var_dump(get_class());
} catch (Error $e) {
echo $e->getMessage(), "\n";
}
try {
var_dump(get_class("qwerty"));
} catch (TypeError $e) {
@@ -40,12 +44,10 @@ $f1->testNull();
echo "Done\n";
?>
--EXPECTF--
--EXPECT--
string(3) "foo"
string(3) "foo"
Warning: get_class() called without object from outside a class in %s on line %d
bool(false)
get_class() without arguments must be called from within a class
get_class(): Argument #1 ($object) must be of type object, string given
string(3) "foo"
string(4) "foo2"
+5 -5
View File
@@ -75,10 +75,10 @@ bool(false)
string(3) "foo"
bool(false)
bool(false)
get_parent_class(): Argument #1 ($object) must be a valid class name or object, string given
get_parent_class(): Argument #1 ($object) must be a valid class name or object, string given
get_parent_class(): Argument #1 ($object) must be a valid class name or object, string given
get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, string given
get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, string given
get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, string given
bool(false)
get_parent_class(): Argument #1 ($object) must be a valid class name or object, array given
get_parent_class(): Argument #1 ($object) must be a valid class name or object, int given
get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, array given
get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, int given
Done
+2 -2
View File
@@ -23,8 +23,8 @@ var_dump(trigger_error("error", E_USER_DEPRECATED));
--EXPECTF--
Notice: error in %s on line %d
bool(true)
trigger_error(): Argument #2 ($error_type) must be one of E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE, or E_USER_DEPRECATED
trigger_error(): Argument #2 ($error_type) must be one of E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE, or E_USER_DEPRECATED
trigger_error(): Argument #2 ($error_level) must be one of E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE, or E_USER_DEPRECATED
trigger_error(): Argument #2 ($error_level) must be one of E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE, or E_USER_DEPRECATED
Warning: error in %s on line %d
bool(true)
+1 -1
View File
@@ -18,7 +18,7 @@ var_dump(constant("TEST_CONST2"));
echo "Done\n";
?>
--EXPECT--
Undefined constant ''
Undefined constant ""
int(1)
string(4) "test"
Done
+1 -1
View File
@@ -26,4 +26,4 @@ try {
?>
--EXPECT--
func_get_arg() cannot be called from the global scope
func_get_arg(): Argument 1 not passed to function
func_get_arg(): Argument #1 ($position) must be less than the number of the arguments passed to the currently executed function
+1
View File
@@ -19,6 +19,7 @@ class Ext extends Base
$a = new Ext();
$a->someMethod("foo");
$a->someMethod();
?>
--EXPECT--
foo
default
+4 -4
View File
@@ -41,17 +41,17 @@ NULL
Warning: Undefined variable $b in %s on line %d
int(1)
Warning: Attempt to read property '1' on int in %s on line %d
Warning: Attempt to read property "1" on int in %s on line %d
NULL
Warning: Attempt to read property '1' on int in %s on line %d
Warning: Attempt to read property "1" on int in %s on line %d
NULL
Warning: Undefined variable $c in %s on line %d
Warning: Trying to access array offset on value of type null in %s on line %d
Warning: Attempt to read property '1' on int in %s on line %d
Warning: Attempt to read property "1" on int in %s on line %d
Warning: Attempt to read property '' on null in %s on line %d
Warning: Attempt to read property "" on null in %s on line %d
NULL
+2 -2
View File
@@ -22,7 +22,7 @@ print "ok\n";
?>
--EXPECTF--
Warning: Attempt to read property 'a' on null in %s on line %d
Warning: Attempt to read property "a" on null in %s on line %d
ok
Attempt to assign property 'a' on null
Attempt to assign property "a" on null
ok
+1 -1
View File
@@ -18,7 +18,7 @@ bool(true)
bool(true)
bool(true)
Notice: Undefined offset: 2 in %s on line %d
Warning: Undefined array key 2 in %s on line %d
Fatal error: Uncaught Error: Value of type null is not callable in %s:%d
Stack trace:
+3 -3
View File
@@ -61,6 +61,6 @@ Warning: Trying to access array offset on value of type null in %s on line %d
Warning: Trying to access array offset on value of type null in %s on line %d
Warning: Attempt to read property 'foo' on null in %s on line %d
Attempt to assign property 'foo' on null
Attempt to assign property 'bar' on null
Warning: Attempt to read property "foo" on null in %s on line %d
Attempt to assign property "foo" on null
Attempt to assign property "bar" on null
+1 -1
View File
@@ -16,7 +16,7 @@ var_dump($x::$x);
--EXPECTF--
int(1)
Fatal error: Uncaught Error: Access to undeclared static property: Closure::$x in %s:%d
Fatal error: Uncaught Error: Access to undeclared static property Closure::$x in %s:%d
Stack trace:
#0 {main}
thrown in %s on line %d
+63
View File
@@ -0,0 +1,63 @@
--TEST--
Test default value handling of ErrorException::__construct()
--FILE--
<?php
$e = new ErrorException();
var_dump($e->getMessage());
var_dump($e->getFile());
var_dump($e->getLine());
$e = new ErrorException("Second", 0, E_ERROR, null);
var_dump($e->getMessage());
var_dump($e->getFile());
var_dump($e->getLine());
$e = new ErrorException("Third", 0, E_ERROR, null, null);
var_dump($e->getMessage());
var_dump($e->getFile());
var_dump($e->getLine());
$e = new ErrorException("Forth", 0, E_ERROR, null, 123);
var_dump($e->getMessage());
var_dump($e->getFile());
var_dump($e->getLine());
$e = new ErrorException("Fifth", 0, E_ERROR, "abc.php");
var_dump($e->getMessage());
var_dump($e->getFile());
var_dump($e->getLine());
$e = new ErrorException("Sixth", 0, E_ERROR, "abc.php", null);
var_dump($e->getMessage());
var_dump($e->getFile());
var_dump($e->getLine());
$e = new ErrorException("Seventh", 0, E_ERROR, "abc.php", 123);
var_dump($e->getMessage());
var_dump($e->getFile());
var_dump($e->getLine());
?>
--EXPECTF--
string(0) ""
string(%d) "%sErrorException_construct.php"
int(3)
string(6) "Second"
string(%d) "%sErrorException_construct.php"
int(8)
string(5) "Third"
string(%d) "%sErrorException_construct.php"
int(13)
string(5) "Forth"
string(%d) "%sErrorException_construct.php"
int(123)
string(5) "Fifth"
string(7) "abc.php"
int(0)
string(5) "Sixth"
string(7) "abc.php"
int(0)
string(7) "Seventh"
string(7) "abc.php"
int(123)
+1 -1
View File
@@ -18,4 +18,4 @@ B2::test();
?>
--EXPECTF--
Fatal error: Call to protected method B1::f() from context 'B2' in %s on line %d
Fatal error: Call to protected method B1::f() from scope B2 in %s on line %d
+1 -1
View File
@@ -23,4 +23,4 @@ B2::test();
--EXPECTF--
bool(false)
Fatal error: Call to protected method B1::f() from context 'B2' in %s on line %d
Fatal error: Call to protected method B1::f() from scope B2 in %s on line %d
+1 -1
View File
@@ -28,7 +28,7 @@ new c;
?>
--EXPECTF--
Fatal error: Uncaught Error: Call to private method d::test2() from context 'a' in %s:%d
Fatal error: Uncaught Error: Call to private method d::test2() from scope a in %s:%d
Stack trace:
#0 %s(%d): a->test()
#1 %s(%d): c->__construct()
+15 -11
View File
@@ -11,9 +11,12 @@ $s2 = "876222numeric";
$s3 = "48474874";
$s4 = "25.68";
$c = $i + $s1;
var_dump($c);
try {
$c = $i + $s1;
var_dump($c);
} catch (\TypeError $e) {
echo $e->getMessage() . \PHP_EOL;
}
$c = $i + $s2;
var_dump($c);
@@ -23,8 +26,12 @@ var_dump($c);
$c = $i + $s4;
var_dump($c);
$c = $s1 + $i;
var_dump($c);
try {
$c = $s1 + $i;
var_dump($c);
} catch (\TypeError $e) {
echo $e->getMessage() . \PHP_EOL;
}
$c = $s2 + $i;
var_dump($c);
@@ -38,18 +45,15 @@ var_dump($c);
echo "Done\n";
?>
--EXPECTF--
Warning: A non-numeric value encountered in %s on line %d
int(75636)
Unsupported operand types: int + string
Notice: A non well formed numeric value encountered in %s on line %d
Warning: A non-numeric value encountered in %s on line %d
int(951858)
int(48550510)
float(75661.68)
Unsupported operand types: string + int
Warning: A non-numeric value encountered in %s on line %d
int(75636)
Notice: A non well formed numeric value encountered in %s on line %d
int(951858)
int(48550510)
float(75661.68)
+1
View File
@@ -3,6 +3,7 @@ declare bare anonymous class
--FILE--
<?php
var_dump(new class{});
?>
--EXPECTF--
object(class@%s)#%d (0) {
}
+1
View File
@@ -15,6 +15,7 @@ $a = new class extends A implements B {
};
var_dump($a instanceof A, $a instanceof B);
?>
--EXPECT--
bool(true)
bool(true)
+1
View File
@@ -10,6 +10,7 @@ while (@$i++<10) {
}
});
}
?>
--EXPECTF--
object(class@%s)#1 (1) {
["i"]=>
+1
View File
@@ -26,5 +26,6 @@ $outer = new Outer(array(
/* not null because inheritance */
var_dump($outer->getArrayAccess()[0]);
?>
--EXPECTF--
int(%d)
+1
View File
@@ -32,5 +32,6 @@ $proxy = $outer->getArrayAccess();
/* null because no inheritance, so no access to protected member */
var_dump(@$outer->getArrayAccess()[0]);
?>
--EXPECT--
NULL
+1
View File
@@ -9,6 +9,7 @@ namespace lone {
namespace {
var_dump ($hello);
}
?>
--EXPECTF--
object(class@%s)#1 (0) {
}
+1
View File
@@ -17,6 +17,7 @@ namespace lone {
new Outer();
}
?>
--EXPECTF--
object(class@%s)#2 (0) {
}
+1
View File
@@ -18,6 +18,7 @@ $anonClass = new class("cats", "dogs") {
var_dump($anonClass::$foo);
var_dump($anonClass::getBar());
?>
--EXPECT--
string(4) "cats"
string(4) "dogs"
+1
View File
@@ -14,5 +14,6 @@ $anonClass = new class {
};
var_dump($anonClass->someMethod());
?>
--EXPECT--
string(3) "bar"
+1 -1
View File
@@ -18,4 +18,4 @@ try {
?>
--EXPECT--
Exception: Cannot unpack Traversable with non-integer keys
Exception: Keys must be of type int|string during argument unpacking
+1 -7
View File
@@ -7,11 +7,6 @@ set_error_handler(function($errno, $errstr) {
var_dump($errstr);
});
try {
var_dump(...[1, 2, "foo" => 3, 4]);
} catch (Error $ex) {
var_dump($ex->getMessage());
}
try {
var_dump(...new ArrayIterator([1, 2, "foo" => 3, 4]));
} catch (Error $ex) {
@@ -20,5 +15,4 @@ try {
?>
--EXPECT--
string(36) "Cannot unpack array with string keys"
string(42) "Cannot unpack Traversable with string keys"
string(68) "Cannot use positional argument after named argument during unpacking"
+39
View File
@@ -0,0 +1,39 @@
<?php
function skipFunction($function): bool {
if (false
/* expect input / hang */
|| $function === 'readline'
|| $function === 'readline_read_history'
|| $function === 'readline_write_history'
/* intentionally violate invariants */
|| $function === 'zend_create_unterminated_string'
|| $function === 'zend_test_array_return'
|| $function === 'zend_leak_bytes'
/* mess with output */
|| (is_string($function) && str_starts_with($function, 'ob_'))
|| $function === 'output_add_rewrite_var'
|| $function === 'error_log'
/* may spend a lot of time waiting for connection timeouts */
|| (is_string($function) && str_contains($function, 'connect'))
|| (is_string($function) && str_starts_with($function, 'snmp'))
|| (is_array($function) && get_class($function[0]) === mysqli::class
&& in_array($function[1], ['__construct', 'connect', 'real_connect']))
/* misc */
|| $function === 'mail'
|| $function === 'mb_send_mail'
|| $function === 'pcntl_fork'
|| $function === 'posix_kill'
|| $function === 'posix_setrlimit'
|| $function === 'sapi_windows_generate_ctrl_event'
|| $function === 'imagegrabscreen'
) {
return true;
}
if ($function[0] instanceof SoapServer) {
/* TODO: Uses fatal errors */
return true;
}
return false;
}
+70 -18
View File
@@ -1,31 +1,83 @@
--TEST--
Test that there is no arginfo/zpp mismatch
--SKIPIF--
<?php
if (getenv('SKIP_MSAN')) die("skip msan misses interceptors for some functions");
?>
--FILE--
<?php
foreach (get_defined_functions()["internal"] as $function) {
require __DIR__ . "/arginfo_zpp_mismatch.inc";
function test($function) {
if (skipFunction($function)) {
return;
}
ob_start();
if (is_string($function)) {
echo "Testing $function\n";
} else {
echo "Testing " . get_class($function[0]) . "::$function[1]\n";
}
try {
@$function();
} catch (Throwable) {
}
try {
@$function(null);
} catch (Throwable) {
}
try {
@$function(null, null);
} catch (Throwable) {
}
try {
@$function(null, null, null);
} catch (Throwable) {
}
try {
@$function(null, null, null, null);
} catch (Throwable) {
}
try {
@$function(null, null, null, null, null);
} catch (Throwable) {
}
try {
@$function(null, null, null, null, null, null);
} catch (Throwable) {
}
try {
@$function(null, null, null, null, null, null, null);
} catch (Throwable) {
}
try {
@$function(null, null, null, null, null, null, null, null);
} catch (ArgumentCountError|Error) {
} catch (Throwable) {
}
ob_end_clean();
}
foreach (get_defined_functions()["internal"] as $function) {
test($function);
}
foreach (get_declared_classes() as $class) {
try {
$rc = new ReflectionClass($class);
$obj = $rc->newInstanceWithoutConstructor();
} catch (Throwable) {
continue;
}
foreach (get_class_methods($class) as $method) {
test([$obj, $method]);
}
}
// var_dump() and debug_zval_dump() print all arguments
?>
===DONE===
--EXPECT--
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
===DONE===
@@ -0,0 +1,85 @@
--TEST--
Test that there is no arginfo/zpp mismatch in strict mode
--SKIPIF--
<?php
if (getenv('SKIP_MSAN')) die("skip msan misses interceptors for some functions");
?>
--FILE--
<?php
declare(strict_types=1);
require __DIR__ . "/arginfo_zpp_mismatch.inc";
function test($function) {
if (skipFunction($function)) {
return;
}
ob_start();
if (is_string($function)) {
echo "Testing $function\n";
} else {
echo "Testing " . get_class($function[0]) . "::$function[1]\n";
}
try {
@$function();
} catch (Throwable) {
}
try {
@$function(null);
} catch (Throwable) {
}
try {
@$function(null, null);
} catch (Throwable) {
}
try {
@$function(null, null, null);
} catch (Throwable) {
}
try {
@$function(null, null, null, null);
} catch (Throwable) {
}
try {
@$function(null, null, null, null, null);
} catch (Throwable) {
}
try {
@$function(null, null, null, null, null, null);
} catch (Throwable) {
}
try {
@$function(null, null, null, null, null, null, null);
} catch (Throwable) {
}
try {
@$function(null, null, null, null, null, null, null, null);
} catch (Throwable) {
}
ob_end_clean();
}
foreach (get_defined_functions()["internal"] as $function) {
test($function);
}
foreach (get_declared_classes() as $class) {
try {
$rc = new ReflectionClass($class);
$obj = $rc->newInstanceWithoutConstructor();
} catch (Throwable) {
continue;
}
foreach (get_class_methods($class) as $method) {
test([$obj, $method]);
}
}
// var_dump() and debug_zval_dump() print all arguments
?>
===DONE===
--EXPECT--
===DONE===
+1 -1
View File
@@ -8,4 +8,4 @@ class Sub implements ArrayAccess {
}
?>
--EXPECTF--
Fatal error: Declaration of Sub::offsetSet() must be compatible with ArrayAccess::offsetSet($offset, $value) in %sargument_restriction_005.php on line %d
Fatal error: Declaration of Sub::offsetSet() must be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value) in %sargument_restriction_005.php on line %d
+16
View File
@@ -0,0 +1,16 @@
--TEST--
Array addition should not add INDIRECT elements
--FILE--
<?php
$x = 1;
$ary = ['y' => 1];
$ary += $GLOBALS;
var_dump($ary['x']);
$x = 2;
var_dump($ary['x']);
?>
--EXPECT--
int(1)
int(1)
+4 -4
View File
@@ -11,11 +11,11 @@ Ensure "undefined offset" notice formats message correctly when undefined key is
echo "Done\n";
?>
--EXPECTF--
Notice: Undefined offset: -1 in %s on line 3
Warning: Undefined array key -1 in %s on line %d
Notice: Undefined offset: -1 in %s on line 4
Warning: Undefined array key -1 in %s on line %d
Notice: Undefined offset: -1 in %s on line 5
Warning: Undefined array key -1 in %s on line %d
Notice: Undefined offset: -1 in %s on line 6
Warning: Undefined array key -1 in %s on line %d
Done
+10
View File
@@ -0,0 +1,10 @@
--TEST--
Add $GLOBALS to itself
--FILE--
<?php
$GLOBALS += $GLOBALS;
$x = $GLOBALS + $GLOBALS;
?>
===DONE===
--EXPECT--
===DONE===
@@ -0,0 +1,15 @@
--TEST--
HT iterator should be destroyed if array becomes empty during array_splice
--FILE--
<?php
$a=[4];
$i = 0;
foreach ($a as &$r) {
var_dump($r);
$a = array_splice($a, 0);
if (++$i == 2) break;
}
?>
--EXPECT--
int(4)
int(4)
+1
View File
@@ -24,6 +24,7 @@ var_dump([...new ArrayIterator(['a', 'b', 'c'])]);
var_dump([0, ...$array, ...getArr(), 6, 7, 8, 9, 10, ...arrGen()]);
var_dump([0, ...$array, ...$array, 'end']);
?>
--EXPECT--
array(0) {
}
+2 -1
View File
@@ -22,6 +22,7 @@ try {
} catch (Error $ex) {
echo "Exception: " . $ex->getMessage() . "\n";
}
?>
--EXPECT--
array(5) {
[0]=>
@@ -43,4 +44,4 @@ array(3) {
[2]=>
int(3)
}
Exception: Cannot declare self-referencing constant 'self::B'
Exception: Cannot declare self-referencing constant self::B
@@ -13,5 +13,6 @@ try {
echo "Exception: " . $ex->getMessage() . "\n";
}
?>
--EXPECT--
Exception: Cannot unpack Traversable with non-integer keys
+1
View File
@@ -10,6 +10,7 @@ unset($a); //array (0 => (refcount=1, is_ref=1)=1)
var_dump([...$b]); //array (0 => (refcount=0, is_ref=0)=1)
?>
--EXPECT--
array(1) {
[0]=>
+1
View File
@@ -16,6 +16,7 @@ try {
var_dump($ex->getMessage());
}
?>
--EXPECT--
string(36) "Cannot unpack array with string keys"
string(42) "Cannot unpack Traversable with string keys"
+1
View File
@@ -5,6 +5,7 @@ array unpacking with undefinded variable
var_dump([...$arr]);
?>
--EXPECTF--
Warning: Undefined variable $arr in %s on line %d
+1 -1
View File
@@ -41,4 +41,4 @@ array(3) {
[2]=>
int(30)
}
{closure}(): Argument #2 ($args) must be of type ?int, string given, called in %s on line %d
{closure}(): Argument #2 must be of type ?int, string given, called in %s on line %d
+3
View File
@@ -1,5 +1,8 @@
--TEST--
Pretty printing for arrow functions
--INI--
zend.assertions=1
assert.exception=0
--FILE--
<?php
+6
View File
@@ -58,6 +58,9 @@ assert(0 && ($a = function &(array &$a, ?X $b = null) use ($c,&$d) : ?X {
$x = C::$z;
$x = ${$a . "_1"}::$z;
$x = C::${$z . "_1"};
$x?->y;
$x?->y();
foo(bar: $x);
}
}
}));
@@ -198,6 +201,9 @@ Warning: assert(): assert(0 && ($a = function &(array &$a, ?X $b = null) use($c,
$x = C::$z;
$x = ${$a . '_1'}::$z;
$x = C::${$z . '_1'};
$x?->y;
$x?->y();
foo(bar: $x);
}
}
@@ -0,0 +1,13 @@
--TEST--
Assign concat of array and empty string
--FILE--
<?php
$a = [0];
$a .= '';
var_dump($a);
?>
--EXPECTF--
Warning: Array to string conversion in %s on line %d
string(5) "Array"
+2 -2
View File
@@ -79,5 +79,5 @@ Cannot add element to the array as the next element is already occupied
Illegal offset type
Illegal offset type
Cannot use a scalar value as an array
Attempt to assign property 'foo' on bool
Attempt to assign property 'foo' on bool
Attempt to assign property "foo" on bool
Attempt to assign property "foo" on bool
+2
View File
@@ -2,10 +2,12 @@
ZEND_POW_ASSIGN
--INI--
zend.assertions=1
assert.exception=0
--FILE--
<?php
assert_options(ASSERT_WARNING);
assert(false && ($a **= 2));
?>
--EXPECTF--
Warning: assert(): assert(false && ($a **= 2)) failed in %s%ezend-pow-assign.php on line %d
@@ -2,10 +2,12 @@
Serialization of backtick literal is incorrect
--INI--
zend.assertions=1
assert.exception=0
--FILE--
<?php
assert_options(ASSERT_WARNING);
assert(false && `echo -n ""`);
?>
--EXPECTF--
Warning: assert(): assert(false && `echo -n ""`) failed in %s%east_serialize_backtick_literal.php on line %d
+15 -15
View File
@@ -3,27 +3,27 @@ Attributes can be placed on all supported elements.
--FILE--
<?php
<<A1(1)>>
#[A1(1)]
class Foo
{
<<A1(2)>>
#[A1(2)]
public const FOO = 'foo';
<<A1(3)>>
#[A1(3)]
public $x;
<<A1(4)>>
public function foo(<<A1(5)>> $a, <<A1(6)>> $b) { }
#[A1(4)]
public function foo(#[A1(5)] $a, #[A1(6)] $b) { }
}
$object = new <<A1(7)>> class () { };
$object = new #[A1(7)] class () { };
<<A1(8)>>
#[A1(8)]
function f1() { }
$f2 = <<A1(9)>> function () { };
$f2 = #[A1(9)] function () { };
$f3 = <<A1(10)>> fn () => 1;
$f3 = #[A1(10)] fn () => 1;
$ref = new \ReflectionClass(Foo::class);
@@ -41,13 +41,13 @@ $sources = [
];
foreach ($sources as $r) {
$attr = $r->getAttributes();
var_dump(get_class($r), count($attr));
$attr = $r->getAttributes();
var_dump(get_class($r), count($attr));
foreach ($attr as $a) {
var_dump($a->getName(), $a->getArguments());
}
echo "\n";
}
+2 -2
View File
@@ -6,7 +6,7 @@ Attributes: Example from Attributes RFC
namespace My\Attributes {
use Attribute;
<<Attribute>>
#[Attribute]
class SingleArgument {
public $argumentValue;
@@ -19,7 +19,7 @@ namespace My\Attributes {
namespace {
use My\Attributes\SingleArgument;
<<SingleArgument("Hello World")>>
#[SingleArgument("Hello World")]
class Foo {
}
+15 -16
View File
@@ -5,10 +5,10 @@ Attributes can deal with AST nodes.
define('V1', strtoupper(php_sapi_name()));
<<A1([V1 => V1])>>
#[A1([V1 => V1])]
class C1
{
public const BAR = 'bar';
public const BAR = 'bar';
}
$ref = new \ReflectionClass(C1::class);
@@ -20,7 +20,7 @@ var_dump(count($args), $args[0][V1] === V1);
echo "\n";
<<A1(V1, 1 + 2, C1::class)>>
#[A1(V1, 1 + 2, C1::class)]
class C2 { }
$ref = new \ReflectionClass(C2::class);
@@ -35,10 +35,10 @@ var_dump($args[2] === C1::class);
echo "\n";
<<A1(self::FOO, C1::BAR)>>
#[A1(self::FOO, C1::BAR)]
class C3
{
private const FOO = 'foo';
private const FOO = 'foo';
}
$ref = new \ReflectionClass(C3::class);
@@ -52,33 +52,33 @@ var_dump($args[1] === C1::BAR);
echo "\n";
<<ExampleWithShift(4 >> 1)>>
#[ExampleWithShift(4 >> 1)]
class C4 {}
$ref = new \ReflectionClass(C4::class);
var_dump($ref->getAttributes()[0]->getArguments());
echo "\n";
<<Attribute>>
#[Attribute]
class C5
{
public function __construct() { }
public function __construct() { }
}
$ref = new \ReflectionFunction(<<C5(MissingClass::SOME_CONST)>> function () { });
$ref = new \ReflectionFunction(#[C5(MissingClass::SOME_CONST)] function () { });
$attr = $ref->getAttributes();
var_dump(count($attr));
try {
$attr[0]->getArguments();
$attr[0]->getArguments();
} catch (\Error $e) {
var_dump($e->getMessage());
var_dump($e->getMessage());
}
try {
$attr[0]->newInstance();
$attr[0]->newInstance();
} catch (\Error $e) {
var_dump($e->getMessage());
var_dump($e->getMessage());
}
?>
@@ -104,6 +104,5 @@ array(1) {
}
int(1)
string(30) "Class 'MissingClass' not found"
string(30) "Class 'MissingClass' not found"
string(30) "Class "MissingClass" not found"
string(30) "Class "MissingClass" not found"
+13 -10
View File
@@ -2,12 +2,15 @@
Resolve attribute names
--FILE--
<?php
function dump_attributes($attributes) {
$arr = [];
foreach ($attributes as $attribute) {
$arr[] = ['name' => $attribute->getName(), 'args' => $attribute->getArguments()];
namespace {
function dump_attributes($attributes) {
$arr = [];
foreach ($attributes as $attribute) {
$arr[] = ['name' => $attribute->getName(), 'args' => $attribute->getArguments()];
}
var_dump($arr);
}
var_dump($arr);
}
namespace Doctrine\ORM\Mapping {
@@ -25,11 +28,11 @@ namespace Foo {
use Doctrine\ORM\Mapping as ORM;
use Doctrine\ORM\Attributes;
<<Entity("imported class")>>
<<ORM\Entity("imported namespace")>>
<<\Doctrine\ORM\Mapping\Entity("absolute from namespace")>>
<<\Entity("import absolute from global")>>
<<Attributes\Table()>>
#[Entity("imported class")]
#[ORM\Entity("imported namespace")]
#[\Doctrine\ORM\Mapping\Entity("absolute from namespace")]
#[\Entity("import absolute from global")]
#[Attributes\Table()]
function foo() {
}
}
+39 -39
View File
@@ -3,118 +3,118 @@ Attributes can be converted into objects.
--FILE--
<?php
<<Attribute(Attribute::TARGET_FUNCTION)>>
#[Attribute(Attribute::TARGET_FUNCTION)]
class A1
{
public string $name;
public int $ttl;
public string $name;
public int $ttl;
public function __construct(string $name, int $ttl = 50)
{
$this->name = $name;
$this->ttl = $ttl;
}
public function __construct(string $name, int $ttl = 50)
{
$this->name = $name;
$this->ttl = $ttl;
}
}
$ref = new \ReflectionFunction(<<A1('test')>> function () { });
$ref = new \ReflectionFunction(#[A1('test')] function () { });
foreach ($ref->getAttributes() as $attr) {
$obj = $attr->newInstance();
$obj = $attr->newInstance();
var_dump(get_class($obj), $obj->name, $obj->ttl);
var_dump(get_class($obj), $obj->name, $obj->ttl);
}
echo "\n";
$ref = new \ReflectionFunction(<<A1>> function () { });
$ref = new \ReflectionFunction(#[A1] function () { });
try {
$ref->getAttributes()[0]->newInstance();
$ref->getAttributes()[0]->newInstance();
} catch (\ArgumentCountError $e) {
var_dump('ERROR 1', $e->getMessage());
var_dump('ERROR 1', $e->getMessage());
}
echo "\n";
$ref = new \ReflectionFunction(<<A1([])>> function () { });
$ref = new \ReflectionFunction(#[A1([])] function () { });
try {
$ref->getAttributes()[0]->newInstance();
$ref->getAttributes()[0]->newInstance();
} catch (\TypeError $e) {
var_dump('ERROR 2', $e->getMessage());
var_dump('ERROR 2', $e->getMessage());
}
echo "\n";
$ref = new \ReflectionFunction(<<A2>> function () { });
$ref = new \ReflectionFunction(#[A2] function () { });
try {
$ref->getAttributes()[0]->newInstance();
$ref->getAttributes()[0]->newInstance();
} catch (\Error $e) {
var_dump('ERROR 3', $e->getMessage());
var_dump('ERROR 3', $e->getMessage());
}
echo "\n";
<<Attribute>>
#[Attribute]
class A3
{
private function __construct() { }
private function __construct() { }
}
$ref = new \ReflectionFunction(<<A3>> function () { });
$ref = new \ReflectionFunction(#[A3] function () { });
try {
$ref->getAttributes()[0]->newInstance();
$ref->getAttributes()[0]->newInstance();
} catch (\Error $e) {
var_dump('ERROR 4', $e->getMessage());
var_dump('ERROR 4', $e->getMessage());
}
echo "\n";
<<Attribute>>
#[Attribute]
class A4 { }
$ref = new \ReflectionFunction(<<A4(1)>> function () { });
$ref = new \ReflectionFunction(#[A4(1)] function () { });
try {
$ref->getAttributes()[0]->newInstance();
$ref->getAttributes()[0]->newInstance();
} catch (\Error $e) {
var_dump('ERROR 5', $e->getMessage());
var_dump('ERROR 5', $e->getMessage());
}
echo "\n";
class A5 { }
$ref = new \ReflectionFunction(<<A5>> function () { });
$ref = new \ReflectionFunction(#[A5] function () { });
try {
$ref->getAttributes()[0]->newInstance();
$ref->getAttributes()[0]->newInstance();
} catch (\Error $e) {
var_dump('ERROR 6', $e->getMessage());
var_dump('ERROR 6', $e->getMessage());
}
?>
--EXPECT--
--EXPECTF--
string(2) "A1"
string(4) "test"
int(50)
string(7) "ERROR 1"
string(81) "Too few arguments to function A1::__construct(), 0 passed and at least 1 expected"
string(%d) "Too few arguments to function A1::__construct(), 0 passed in %s005_objects.php on line 26 and at least 1 expected"
string(7) "ERROR 2"
string(74) "A1::__construct(): Argument #1 ($name) must be of type string, array given"
string(%d) "A1::__construct(): Argument #1 ($name) must be of type string, array given, called in %s005_objects.php on line 36"
string(7) "ERROR 3"
string(30) "Attribute class 'A2' not found"
string(30) "Attribute class "A2" not found"
string(7) "ERROR 4"
string(50) "Attribute constructor of class 'A3' must be public"
string(48) "Attribute constructor of class A3 must be public"
string(7) "ERROR 5"
string(71) "Attribute class 'A4' does not have a constructor, cannot pass arguments"
string(69) "Attribute class A4 does not have a constructor, cannot pass arguments"
string(7) "ERROR 6"
string(55) "Attempting to use non-attribute class 'A5' as attribute"
string(55) "Attempting to use non-attribute class "A5" as attribute"
+13 -13
View File
@@ -3,17 +3,17 @@ Attributes can be filtered by name and base type.
--FILE--
<?php
$ref = new \ReflectionFunction(<<A1>> <<A2>> function () { });
$ref = new \ReflectionFunction(#[A1] #[A2] function () { });
$attr = $ref->getAttributes(A3::class);
var_dump(count($attr));
$ref = new \ReflectionFunction(<<A1>> <<A2>> function () { });
$ref = new \ReflectionFunction(#[A1] #[A2] function () { });
$attr = $ref->getAttributes(A2::class);
var_dump(count($attr), $attr[0]->getName());
$ref = new \ReflectionFunction(<<A1>> <<A2>> <<A2>> function () { });
$ref = new \ReflectionFunction(#[A1] #[A2] #[A2] function () { });
$attr = $ref->getAttributes(A2::class);
var_dump(count($attr), $attr[0]->getName(), $attr[1]->getName());
@@ -25,27 +25,27 @@ class A1 implements Base { }
class A2 implements Base { }
class A3 extends A2 { }
$ref = new \ReflectionFunction(<<A1>> <<A2>> <<A5>> function () { });
$ref = new \ReflectionFunction(#[A1] #[A2] #[A5] function () { });
$attr = $ref->getAttributes(\stdClass::class, \ReflectionAttribute::IS_INSTANCEOF);
var_dump(count($attr));
print_r(array_map(fn ($a) => $a->getName(), $attr));
$ref = new \ReflectionFunction(<<A1>> <<A2>> function () { });
$ref = new \ReflectionFunction(#[A1] #[A2] function () { });
$attr = $ref->getAttributes(A1::class, \ReflectionAttribute::IS_INSTANCEOF);
var_dump(count($attr));
print_r(array_map(fn ($a) => $a->getName(), $attr));
$ref = new \ReflectionFunction(<<A1>> <<A2>> function () { });
$ref = new \ReflectionFunction(#[A1] #[A2] function () { });
$attr = $ref->getAttributes(Base::class, \ReflectionAttribute::IS_INSTANCEOF);
var_dump(count($attr));
print_r(array_map(fn ($a) => $a->getName(), $attr));
$ref = new \ReflectionFunction(<<A1>> <<A2>> <<A3>> function () { });
$ref = new \ReflectionFunction(#[A1] #[A2] #[A3] function () { });
$attr = $ref->getAttributes(A2::class, \ReflectionAttribute::IS_INSTANCEOF);
var_dump(count($attr));
print_r(array_map(fn ($a) => $a->getName(), $attr));
$ref = new \ReflectionFunction(<<A1>> <<A2>> <<A3>> function () { });
$ref = new \ReflectionFunction(#[A1] #[A2] #[A3] function () { });
$attr = $ref->getAttributes(Base::class, \ReflectionAttribute::IS_INSTANCEOF);
var_dump(count($attr));
print_r(array_map(fn ($a) => $a->getName(), $attr));
@@ -55,17 +55,17 @@ echo "\n";
$ref = new \ReflectionFunction(function () { });
try {
$ref->getAttributes(A1::class, 3);
$ref->getAttributes(A1::class, 3);
} catch (\Error $e) {
var_dump('ERROR 1', $e->getMessage());
var_dump('ERROR 1', $e->getMessage());
}
$ref = new \ReflectionFunction(function () { });
try {
$ref->getAttributes(SomeMissingClass::class, \ReflectionAttribute::IS_INSTANCEOF);
$ref->getAttributes(SomeMissingClass::class, \ReflectionAttribute::IS_INSTANCEOF);
} catch (\Error $e) {
var_dump('ERROR 2', $e->getMessage());
var_dump('ERROR 2', $e->getMessage());
}
?>
@@ -109,4 +109,4 @@ Array
string(7) "ERROR 1"
string(103) "ReflectionFunctionAbstract::getAttributes(): Argument #2 ($flags) must be a valid attribute filter flag"
string(7) "ERROR 2"
string(34) "Class 'SomeMissingClass' not found"
string(34) "Class "SomeMissingClass" not found"
@@ -14,6 +14,7 @@ foreach ($attributes as $attribute) {
var_dump(get_class($a));
var_dump($a->flags == Attribute::TARGET_ALL);
}
?>
--EXPECT--
string(9) "Attribute"
array(0) {
@@ -3,7 +3,8 @@ Attributes: Prevent Attribute on non classes
--FILE--
<?php
<<Attribute>>
#[Attribute]
function foo() {}
?>
--EXPECTF--
Fatal error: Attribute "Attribute" cannot target function (allowed targets: class) in %s
@@ -25,20 +25,22 @@ namespace {
use Doctrine\ORM\Attributes as ORM;
use Symfony\Component\Validator\Constraints as Assert;
<<ORM\Entity>>
#[ORM\Entity]
/** @ORM\Entity */
class User
{
/** @ORM\Id @ORM\Column(type="integer"*) @ORM\GeneratedValue */
<<ORM\Id>><<ORM\Column("integer")>><<ORM\GeneratedValue>>
#[ORM\Id]
#[ORM\Column("integer")]
#[ORM\GeneratedValue]
private $id;
/**
* @ORM\Column(type="string", unique=true)
* @Assert\Email(message="The email '{{ value }}' is not a valid email.")
*/
<<ORM\Column("string", ORM\Column::UNIQUE)>>
<<Assert\Email(array("message" => "The email '{{ value }}' is not a valid email."))>>
#[ORM\Column("string", ORM\Column::UNIQUE)]
#[Assert\Email(array("message" => "The email '{{ value }}' is not a valid email."))]
private $email;
/**
@@ -50,8 +52,8 @@ class User
* maxMessage = "You cannot be taller than {{ limit }}cm to enter"
* )
*/
<<Assert\Range(["min" => 120, "max" => 180, "minMessage" => "You must be at least {{ limit }}cm tall to enter"])>>
<<ORM\Column(ORM\Column::T_INTEGER)>>
#[Assert\Range(["min" => 120, "max" => 180, "minMessage" => "You must be at least {{ limit }}cm tall to enter"])]
#[ORM\Column(ORM\Column::T_INTEGER)]
protected $height;
/**
@@ -61,10 +63,10 @@ class User
* inverseJoinColumns={@ORM\JoinColumn(name="phonenumber_id", referencedColumnName="id", unique=true)}
* )
*/
<<ORM\ManyToMany(Phonenumber::class)>>
<<ORM\JoinTable("users_phonenumbers")>>
<<ORM\JoinColumn("user_id", "id")>>
<<ORM\InverseJoinColumn("phonenumber_id", "id", ORM\JoinColumn::UNIQUE)>>
#[ORM\ManyToMany(Phonenumber::class)]
#[ORM\JoinTable("users_phonenumbers")]
#[ORM\JoinColumn("user_id", "id")]
#[ORM\InverseJoinColumn("phonenumber_id", "id", ORM\JoinColumn::UNIQUE)]
private $phonenumbers;
}
@@ -3,7 +3,7 @@ Attribute arguments support only const expressions.
--FILE--
<?php
<<A1(foo())>>
#[A1(foo())]
class C1 { }
?>
+12 -12
View File
@@ -3,22 +3,22 @@ Attributes comply with inheritance rules.
--FILE--
<?php
<<A2>>
#[A2]
class C1
{
<<A1>>
public function foo() { }
#[A1]
public function foo() { }
}
class C2 extends C1
{
public function foo() { }
public function foo() { }
}
class C3 extends C1
{
<<A1>>
public function bar() { }
#[A1]
public function bar() { }
}
$ref = new \ReflectionClass(C1::class);
@@ -37,20 +37,20 @@ echo "\n";
trait T1
{
<<A2>>
public $a;
#[A2]
public $a;
}
class C4
{
use T1;
use T1;
}
class C5
{
use T1;
public $a;
use T1;
public $a;
}
$ref = new \ReflectionClass(T1::class);
+23 -19
View File
@@ -1,53 +1,57 @@
--TEST--
Attributes AST can be exported.
--INI--
zend.assertions=1
assert.exception=0
assert.warning=1
--FILE--
<?php
assert(0 && ($a = <<A1>><<A2>> function ($a, <<A3(1)>> $b) { }));
assert(0 && ($a = #[A1] #[A2] function ($a, #[A3(1)] $b) { }));
assert(0 && ($a = <<A1(1, 2, 1 + 2)>> fn () => 1));
assert(0 && ($a = #[A1(1, 2, 1 + 2)] fn () => 1));
assert(0 && ($a = new <<A1>> class() {
<<A1>><<A2>> const FOO = 'foo';
<<A2>> public $x;
<<A3>> function a() { }
assert(0 && ($a = new #[A1] class() {
#[A1]#[A2] const FOO = 'foo';
#[A2] public $x;
#[A3] function a() { }
}));
assert(0 && ($a = function () {
<<A1>> class Test1 { }
<<A2>> interface Test2 { }
<<A3>> trait Test3 { }
#[A1] class Test1 { }
#[A2] interface Test2 { }
#[A3] trait Test3 { }
}));
?>
--EXPECTF--
Warning: assert(): assert(0 && ($a = <<A1>> <<A2>> function ($a, <<A3(1)>> $b) {
Warning: assert(): assert(0 && ($a = #[A1] #[A2] function ($a, #[A3(1)] $b) {
})) failed in %s on line %d
Warning: assert(): assert(0 && ($a = <<A1(1, 2, 1 + 2)>> fn() => 1)) failed in %s on line %d
Warning: assert(): assert(0 && ($a = #[A1(1, 2, 1 + 2)] fn() => 1)) failed in %s on line %d
Warning: assert(): assert(0 && ($a = new <<A1>> class {
<<A1>>
<<A2>>
Warning: assert(): assert(0 && ($a = new #[A1] class {
#[A1]
#[A2]
public const FOO = 'foo';
<<A2>>
#[A2]
public $x;
<<A3>>
#[A3]
public function a() {
}
})) failed in %s on line %d
Warning: assert(): assert(0 && ($a = function () {
<<A1>>
#[A1]
class Test1 {
}
<<A2>>
#[A2]
interface Test2 {
}
<<A3>>
#[A3]
trait Test3 {
}
+23 -23
View File
@@ -3,17 +3,17 @@ Attributes make use of class scope.
--FILE--
<?php
<<A1(self::class, self::FOO)>>
#[A1(self::class, self::FOO)]
class C1
{
<<A1(self::class, self::FOO)>>
private const FOO = 'foo';
#[A1(self::class, self::FOO)]
private const FOO = 'foo';
<<A1(self::class, self::FOO)>>
public $a;
#[A1(self::class, self::FOO)]
public $a;
<<A1(self::class, self::FOO)>>
public function bar(<<A1(self::class, self::FOO)>> $p) { }
#[A1(self::class, self::FOO)]
public function bar(#[A1(self::class, self::FOO)] $p) { }
}
$ref = new \ReflectionClass(C1::class);
@@ -27,15 +27,15 @@ echo "\n";
trait T1
{
<<A1(self::class, self::FOO)>>
public function foo() { }
#[A1(self::class, self::FOO)]
public function foo() { }
}
class C2
{
use T1;
private const FOO = 'bar';
use T1;
private const FOO = 'bar';
}
$ref = new \ReflectionClass(C2::class);
@@ -45,7 +45,7 @@ $ref = new \ReflectionClass(T1::class);
$attr = $ref->getMethod('foo')->getAttributes()[0];
try {
$attr->getArguments();
$attr->getArguments();
} catch (\Error $e) {
var_dump('ERROR 1', $e->getMessage());
}
@@ -54,17 +54,17 @@ echo "\n";
class C3
{
private const FOO = 'foo';
private const FOO = 'foo';
public static function foo()
{
return new <<A1(self::class, self::FOO)>> class() {
private const FOO = 'bar';
public static function foo()
{
return new #[A1(self::class, self::FOO)] class() {
private const FOO = 'bar';
<<A1(self::class, self::FOO)>>
public function bar() { }
};
}
#[A1(self::class, self::FOO)]
public function bar() { }
};
}
}
$ref = new \ReflectionObject(C3::foo());
@@ -109,7 +109,7 @@ Array
[1] => bar
)
string(7) "ERROR 1"
string(36) "Undefined class constant 'self::FOO'"
string(28) "Undefined constant self::FOO"
bool(true)
string(3) "bar"
@@ -1,14 +1,36 @@
--TEST--
Attributes cannot be applied to groups of class constants.
Attributes can be applied to groups of class constants
--FILE--
<?php
class C1
class C
{
<<A1>>
public const A = 1, B = 2;
#[A(1, X)]
public const A = 1, B = 2;
}
const X = 2;
$rp1 = new ReflectionClassConstant('C', 'A');
$ra1 = $rp1->getAttributes()[0];
var_dump($ra1->getName(), $ra1->getArguments());
$rp2 = new ReflectionClassConstant('C', 'B');
$ra2 = $rp2->getAttributes()[0];
var_dump($ra2->getName(), $ra2->getArguments());
?>
--EXPECTF--
Fatal error: Cannot apply attributes to a group of constants in %s
--EXPECT--
string(1) "A"
array(2) {
[0]=>
int(1)
[1]=>
int(2)
}
string(1) "A"
array(2) {
[0]=>
int(1)
[1]=>
int(2)
}
+28 -6
View File
@@ -1,14 +1,36 @@
--TEST--
Attributes cannot be applied to groups of properties.
Attributes can be applied to groups of properties
--FILE--
<?php
class C1
class C
{
<<A1>>
public $x, $y;
#[A(1, X)]
public $x, $y;
}
const X = 2;
$rp1 = new ReflectionProperty('C', 'x');
$ra1 = $rp1->getAttributes()[0];
var_dump($ra1->getName(), $ra1->getArguments());
$rp2 = new ReflectionProperty('C', 'y');
$ra2 = $rp2->getAttributes()[0];
var_dump($ra2->getName(), $ra2->getArguments());
?>
--EXPECTF--
Fatal error: Cannot apply attributes to a group of properties in %s
--EXPECT--
string(1) "A"
array(2) {
[0]=>
int(1)
[1]=>
int(2)
}
string(1) "A"
array(2) {
[0]=>
int(1)
[1]=>
int(2)
}
@@ -1,5 +1,5 @@
--TEST--
Attributes: Compiler Attributes can check for target declarations
Attribute validation callback of internal attributes.
--SKIPIF--
<?php
if (!extension_loaded('zend-test')) {
@@ -8,8 +8,9 @@ if (!extension_loaded('zend-test')) {
--FILE--
<?php
<<ZendTestAttribute>>
#[ZendTestAttribute]
function foo() {
}
?>
--EXPECTF--
Fatal error: Only classes can be marked with <<ZendTestAttribute>> in %s
Fatal error: Only classes can be marked with #[ZendTestAttribute] in %s
+6 -6
View File
@@ -5,17 +5,17 @@ Attributes make use of closure scope.
class Test1
{
private const FOO = 'bar';
private const FOO = 'bar';
}
class C1
{
private const FOO = 'foo';
private const FOO = 'foo';
public static function foo()
{
return <<A1(self::class, self::FOO)>> function (<<A1(self::class, self::FOO)>> $p) { };
}
public static function foo()
{
return #[A1(self::class, self::FOO)] function (#[A1(self::class, self::FOO)] $p) { };
}
}
$ref = new \ReflectionFunction(C1::foo());
@@ -3,7 +3,7 @@ Don't free uninitialized memory if a fatal error occurs in an attribute argument
--FILE--
<?php
<<Attr(a->b::c)>>
#[Attr(a->b::c)]
function test() {}
?>
@@ -3,9 +3,9 @@ Attribute name cannot be a variable
--FILE--
<?php
<<$x>>
#[$x]
class A {}
?>
--EXPECTF--
Parse error: syntax error, unexpected '$x' (T_VARIABLE), expecting identifier (T_STRING) or static (T_STATIC) or namespace (T_NAMESPACE) or \\ (T_NS_SEPARATOR) in %s on line %d
Parse error: syntax error, unexpected variable "$x" in %s on line %d
@@ -3,44 +3,44 @@ Attributes expose and verify target and repeatable data.
--FILE--
<?php
<<Attribute(Attribute::TARGET_FUNCTION | Attribute::TARGET_METHOD)>>
#[Attribute(Attribute::TARGET_FUNCTION | Attribute::TARGET_METHOD)]
class A1 { }
$ref = new \ReflectionFunction(<<A1>> function () { });
$ref = new \ReflectionFunction(#[A1] function () { });
$attr = $ref->getAttributes()[0];
var_dump($attr->getName(), $attr->getTarget() == Attribute::TARGET_FUNCTION, $attr->isRepeated());
var_dump(get_class($attr->newInstance()));
echo "\n";
$ref = new \ReflectionObject(new <<A1>> class() { });
$ref = new \ReflectionObject(new #[A1] class() { });
$attr = $ref->getAttributes()[0];
var_dump($attr->getName(), $attr->getTarget() == Attribute::TARGET_CLASS, $attr->isRepeated());
try {
$attr->newInstance();
$attr->newInstance();
} catch (\Throwable $e) {
var_dump('ERROR 1', $e->getMessage());
var_dump('ERROR 1', $e->getMessage());
}
echo "\n";
$ref = new \ReflectionFunction(<<A1>> <<A1>> function () { });
$ref = new \ReflectionFunction(#[A1] #[A1] function () { });
$attr = $ref->getAttributes()[0];
var_dump($attr->getName(), $attr->getTarget() == Attribute::TARGET_FUNCTION, $attr->isRepeated());
try {
$attr->newInstance();
$attr->newInstance();
} catch (\Throwable $e) {
var_dump('ERROR 2', $e->getMessage());
var_dump('ERROR 2', $e->getMessage());
}
echo "\n";
<<Attribute(Attribute::TARGET_CLASS | Attribute::IS_REPEATABLE)>>
#[Attribute(Attribute::TARGET_CLASS | Attribute::IS_REPEATABLE)]
class A2 { }
$ref = new \ReflectionObject(new <<A2>> <<A2>> class() { });
$ref = new \ReflectionObject(new #[A2] #[A2] class() { });
$attr = $ref->getAttributes()[0];
var_dump($attr->getName(), $attr->getTarget() == Attribute::TARGET_CLASS, $attr->isRepeated());
var_dump(get_class($attr->newInstance()));
@@ -3,9 +3,9 @@ Attribute flags type is validated.
--FILE--
<?php
<<Attribute("foo")>>
#[Attribute("foo")]
class A1 { }
?>
--EXPECTF--
Fatal error: Attribute::__construct(): Argument #1 ($flags) must must be of type int, string given in %s
Fatal error: Attribute::__construct(): Argument #1 ($flags) must be of type int, string given in %s
@@ -3,7 +3,7 @@ Attribute flags value is validated.
--FILE--
<?php
<<Attribute(-1)>>
#[Attribute(-1)]
class A1 { }
?>
@@ -3,9 +3,9 @@ Attribute flags value is validated.
--FILE--
<?php
<<Attribute(Foo::BAR)>>
#[Attribute(Foo::BAR)]
class A1 { }
?>
--EXPECTF--
Fatal error: Class 'Foo' not found in %s
Fatal error: Class "Foo" not found in %s on line %d
@@ -3,7 +3,7 @@ Internal attribute targets are validated.
--FILE--
<?php
<<Attribute>>
#[Attribute]
function a1() { }
?>
@@ -3,8 +3,8 @@ Internal attribute targets are validated.
--FILE--
<?php
<<Attribute>>
<<Attribute>>
#[Attribute]
#[Attribute]
class A1 { }
?>
@@ -3,7 +3,7 @@ Cannot use unpacking in attribute argument list
--FILE--
<?php
<<MyAttribute(...[1, 2, 3])>>
#[MyAttribute(...[1, 2, 3])]
class Foo { }
?>
@@ -3,12 +3,12 @@ Trailing comma in attribute argument list
--FILE--
<?php
<<MyAttribute(
"there",
"are",
"many",
"arguments",
)>>
#[MyAttribute(
"there",
"are",
"many",
"arguments",
)]
class Foo { }
$ref = new \ReflectionClass(Foo::class);
+55
View File
@@ -0,0 +1,55 @@
--TEST--
Attributes can be grouped
--FILE--
<?php
#[A1(1), A1(2), A2(3)]
class Foo
{
}
#[
A1(1),
A1(2),
A2(3)
]
function foo() {}
#[A1, A1, A2]
function bar() {}
$sources = [
new \ReflectionClass(Foo::class),
new \ReflectionFunction('foo'),
new \ReflectionFunction('bar'),
];
foreach ($sources as $ref) {
$attr = $ref->getAttributes();
var_dump(get_class($ref), count($attr));
foreach ($attr as $a) {
printf("%s(%s)\n", $a->getName(), implode(", ", $a->getArguments()));
}
echo "\n";
}
?>
--EXPECT--
string(15) "ReflectionClass"
int(3)
A1(1)
A1(2)
A2(3)
string(18) "ReflectionFunction"
int(3)
A1(1)
A1(2)
A2(3)
string(18) "ReflectionFunction"
int(3)
A1()
A1()
A2()
@@ -0,0 +1,32 @@
--TEST--
Reflect attributes on different kinds of internal symbols
--FILE--
<?php
$rf = new ReflectionFunction('unserialize');
var_dump($rf->getAttributes());
$rc = new ReflectionClass('DateTime');
var_dump($rc->getAttributes());
$rm = $rc->getMethod('__construct');
var_dump($rm->getAttributes());
$rcc = $rc->getReflectionConstant('ATOM');
var_dump($rcc->getAttributes());
$rp = new ReflectionProperty('Exception', 'message');
var_dump($rp->getAttributes());
?>
--EXPECT--
array(0) {
}
array(0) {
}
array(0) {
}
array(0) {
}
array(0) {
}
@@ -0,0 +1,5 @@
<?php
declare(strict_types=1);
#[MyAttribute("42")]
class TestStrict {}
@@ -0,0 +1,31 @@
--TEST--
strict_types=1 of the attribute use-site is respected
--FILE--
<?php
#[Attribute]
class MyAttribute {
public function __construct(public int $value) {}
}
#[MyAttribute("42")]
class TestWeak {}
require __DIR__ . '/030_strict_types.inc';
var_dump((new ReflectionClass(TestWeak::class))->getAttributes()[0]->newInstance());
var_dump((new ReflectionClass(TestStrict::class))->getAttributes()[0]->newInstance());
?>
--EXPECTF--
object(MyAttribute)#1 (1) {
["value"]=>
int(42)
}
Fatal error: Uncaught TypeError: MyAttribute::__construct(): Argument #1 ($value) must be of type int, string given, called in %s030_strict_types.inc on line 4 and defined in %s030_strict_types.php:5
Stack trace:
#0 %s030_strict_types.inc(4): MyAttribute->__construct('42')
#1 %s(%d): ReflectionAttribute->newInstance()
#2 {main}
thrown in %s on line %d
+97
View File
@@ -0,0 +1,97 @@
--TEST--
Backtrace during attribute instance creation
--FILE--
<?php
#[Attribute]
class MyAttribute {
public function __construct() {
debug_print_backtrace();
var_dump(debug_backtrace());
var_dump((new Exception)->getTrace());
}
}
#[MyAttribute]
class Test {}
(new ReflectionClass(Test::class))->getAttributes()[0]->newInstance();
?>
--EXPECTF--
#0 MyAttribute->__construct() called at [%s031_backtrace.php:12]
#1 ReflectionAttribute->newInstance() called at [%s:%d]
array(2) {
[0]=>
array(7) {
["file"]=>
string(%d) "%s031_backtrace.php"
["line"]=>
int(12)
["function"]=>
string(11) "__construct"
["class"]=>
string(11) "MyAttribute"
["object"]=>
object(MyAttribute)#1 (0) {
}
["type"]=>
string(2) "->"
["args"]=>
array(0) {
}
}
[1]=>
array(7) {
["file"]=>
string(%d) "%s"
["line"]=>
int(%d)
["function"]=>
string(11) "newInstance"
["class"]=>
string(19) "ReflectionAttribute"
["object"]=>
object(ReflectionAttribute)#2 (0) {
}
["type"]=>
string(2) "->"
["args"]=>
array(0) {
}
}
}
array(2) {
[0]=>
array(6) {
["file"]=>
string(%d) "%s031_backtrace.php"
["line"]=>
int(12)
["function"]=>
string(11) "__construct"
["class"]=>
string(11) "MyAttribute"
["type"]=>
string(2) "->"
["args"]=>
array(0) {
}
}
[1]=>
array(6) {
["file"]=>
string(%d) "%s"
["line"]=>
int(%d)
["function"]=>
string(11) "newInstance"
["class"]=>
string(19) "ReflectionAttribute"
["type"]=>
string(2) "->"
["args"]=>
array(0) {
}
}
}
@@ -0,0 +1,9 @@
--TEST--
Validation for "Attribute" does not use a scope when evaluating constant ASTs
--FILE--
<?php
#[Attribute(parent::x)]
class x extends y {}
?>
--EXPECTF--
Fatal error: Cannot access "parent" when no class scope is active in %s on line %d
+1
View File
@@ -77,6 +77,7 @@ var_dump(-0b11111111111111111111111111111111);
var_dump(-0b1111111111111111111111111111111);
var_dump(-0b111111111111111111111111111111);
var_dump(-0b1);
?>
--EXPECT--
int(1)
int(3)
+1
View File
@@ -79,6 +79,7 @@ var_dump(-0b1111111111111111111111111111111111111111111111111111111111111111);
var_dump(-0b111111111111111111111111111111111111111111111111111111111111111);
var_dump(-0b11111111111111111111111111111111111111111111111111111111111111);
var_dump(-0b1);
?>
--EXPECT--
int(1)
int(3)
+1 -1
View File
@@ -6,7 +6,7 @@ Bug #24773 (unset() of integers treated as arrays causes a crash)
unset($array["lvl1"]["lvl2"]["b"]);
?>
--EXPECTF--
Fatal error: Uncaught Error: Cannot use string offset as an array in %s:%d
Fatal error: Uncaught TypeError: Cannot access offset of type string on string in %s:%d
Stack trace:
#0 {main}
thrown in %s on line %d
Loaded 100 of 5649 files, more files were not shown because too many files have changed in this diff. Show more