1
0
mirror of https://github.com/php/php-src.git synced 2026-04-26 01:18:19 +02:00
Commit Graph

189 Commits

Author SHA1 Message Date
George Peter Banyard b40ae80804 Convert iterable into an internal alias for Traversable|array (#7309)
This does a compile time transformation of ``iterable`` into ``Traversable|array`` which simplifies some of the LSP variance handling.

The arginfo generation script from stubs is updated to produce a union type when it encounters the type ``iterable``
Extension functions which do not regenerate the arginfo, or write them manually are still supported by mimicking the compile time transformation while registering the function.

Type Reflection is preserved for single ``iterable`` (and ``?iterable``) to produce a ReflectionNamedType with name ``iterable``, however usage of ``iterable`` in union types will be converted to ``array|Traversable``
2022-06-07 13:35:34 +01:00
Sara Golemon e7817ec3b2 Do manual type checks because the engine doesn't 2022-06-01 16:27:47 +00:00
Sara Golemon 7c28196a8a Partial revert of 6d96f39a68 2022-06-01 16:10:30 +00:00
Máté Kocsis 2b6bfb0d80 Merge branch 'PHP-8.1'
* PHP-8.1:
  Get rid of invalid assertion and cleanup zend_call_method
2022-06-01 10:52:00 +02:00
Máté Kocsis 6d96f39a68 Get rid of invalid assertion and cleanup zend_call_method
Closes GH-8672
2022-06-01 10:50:50 +02:00
Sara Golemon 6c0a1db4a8 Merge branch 'PHP-8.1'
* PHP-8.1:
  Verify internal types before abandoning call frame
2022-06-01 00:52:30 +00:00
Sara Golemon 01d84545e7 Verify internal types before abandoning call frame
An internal caller executing a builtin method with
a static return type will lose context if we drop
our frame before performing the validation.
2022-06-01 00:51:08 +00:00
Ilija Tovilo d62d50b88e Add C API for getting backed enum case by value
Closes GH-8518
2022-05-28 12:08:10 +02:00
Ilija Tovilo df2414a223 Merge branch 'PHP-8.1'
* PHP-8.1:
  Fix Enum::from/tryFrom memory leak in JIT for internal enums
2022-05-28 10:53:27 +02:00
Ilija Tovilo 93fc88e808 Fix Enum::from/tryFrom memory leak in JIT for internal enums
when passing an int to a string enum. Previously, the int was coerced to
a string. The JIT skips parameter clean up when unnecessary. In this
particular case, passing int to from(int|string) normally doesn't cause
a coercion so no dtor for the $value zval is generated.

To circumvent this we avoid coersion by explicitly allowing ints and
converting them to strings ourselves. Then we can free it appropriately.

See GH-8518
Closes GH-8633
2022-05-28 10:51:17 +02:00
Arnaud Le Blanc 980385d12d Merge branch 'PHP-8.1'
* PHP-8.1:
  Stop closing stderr and stdout streams (#8570)
  Revert "XFAIL tests (GH-8588)"
  XFAIL tests (GH-8588)
  Stop closing stderr and stdout streams (#8569)
2022-05-20 13:40:27 +02:00
Levi Morrison ffd27bdec4 Stop closing stderr and stdout streams (#8570)
Extensions may (and do) write to stderr in mshutdown and similar. In
the best case, with the stderr stream closed, it's just swallowed.

However, some libraries will do things like try to detect color, and
these will outright fail and cause an error path to be taken.
2022-05-20 13:40:09 +02:00
Arnaud Le Blanc 6465f3ed13 Merge branch 'PHP-8.0' into PHP-8.1
* PHP-8.0:
  XFAIL tests (GH-8588)
  Stop closing stderr and stdout streams (#8569)
2022-05-20 13:36:22 +02:00
Levi Morrison fa78e17724 Stop closing stderr and stdout streams (#8569)
Extensions may (and do) write to stderr in mshutdown and similar. In
the best case, with the stderr stream closed, it's just swallowed.

However, some libraries will do things like try to detect color, and
these will outright fail and cause an error path to be taken.
2022-05-20 13:27:23 +02:00
Christoph M. Becker 710294c9a5 Fix zend_test tests
The `--EXTENSIONS--` directive isn't properly supported prior to PHP
8.1.0, so we use the classic `--SKIPIF--` instead.
2022-05-04 11:29:08 +02:00
Máté Kocsis da857c94a4 Merge branch 'PHP-8.1'
* PHP-8.1:
  Fix get_function_or_method_name when included file is scoped
2022-05-03 21:38:32 +02:00
Máté Kocsis 510061b595 Merge branch 'PHP-8.0' into PHP-8.1
* PHP-8.0:
  Fix get_function_or_method_name when included file is scoped
2022-05-03 21:36:42 +02:00
vajexal 74924ada93 Fix get_function_or_method_name when included file is scoped (#8467) 2022-05-03 21:34:01 +02:00
Christoph M. Becker 4d24ac3cb0 Merge branch 'PHP-8.1'
* PHP-8.1:
  Fix `--EXTENSIONS--` section for two tests in ext/zend_test
2022-04-13 14:47:34 +02:00
Christoph M. Becker 11231837d7 Merge branch 'PHP-8.0' into PHP-8.1
* PHP-8.0:
  Fix `--EXTENSIONS--` section for two tests in ext/zend_test
2022-04-13 14:46:56 +02:00
Tim Düsterhus 5655f1abe3 Fix --EXTENSIONS-- section for two tests in ext/zend_test
The extension name got broken in e6cf583160.

Closes GH-8357.
2022-04-13 14:45:52 +02:00
Bob Weinand e439736fdf Merge branch 'PHP-8.1' 2022-03-07 22:30:03 +01:00
Bob Weinand 67b372e287 Merge branch 'PHP-8.0' into PHP-8.1 2022-03-07 22:25:52 +01:00
Bob Weinand 185a14685d Merge branch 'PHP-8.1' 2022-03-07 22:17:35 +01:00
Tim Düsterhus 070012d62a Add tests for function parameter attributes to ext/zend_test
These tests verify the correct workings of the previous fixes:

- Parameter attributes for native functions should not leak memory.
- Parameter attributes for native functions should behave as expected.
2022-03-07 22:10:54 +01:00
Bob Weinand 0e88f749ff Merge branch 'PHP-8.1' 2022-03-01 14:55:09 +01:00
Bob Weinand 85b669e565 Merge branch 'PHP-8.0' into PHP-8.1 2022-03-01 14:54:09 +01:00
Bob Weinand e6cf583160 Fix GH-8082: Prevent leaking memory on observed transient run_time_caches
This is achieved by tracking the observers on the run_time_cache (with a fixed amount of slots, 2 for each observer).
That way round, if the run_time_cache is freed all associated observer data is as well.

This approach has been chosen, as to avoid any ABI or API breakage.
Future versions may for example choose to provide a hookable API for run_time_cache freeing or similar.
2022-03-01 14:49:44 +01:00
Christoph M. Becker a8c6a5cef6 Merge branch 'PHP-8.1'
* PHP-8.1:
  Fix #81430: Attribute instantiation leaves dangling pointer
2022-01-10 12:42:43 +01:00
Christoph M. Becker 4833362844 Merge branch 'PHP-8.0' into PHP-8.1
* PHP-8.0:
  Fix #81430: Attribute instantiation leaves dangling pointer
2022-01-10 12:42:18 +01:00
Benjamin Eberlei 2f6a06ccb0 Fix #81430: Attribute instantiation leaves dangling pointer
By switching attribute constructor stackframe to be called via
trampoline the stack allocation is not causing dangling pointers
in the zend_observer API anymore.

Co-Authored-By: Florian Sowade <f.sowade@suora.com>
Co-Authored-By: Christopher Becker <cmbecker69@gmx.de>
Co-Authored-By: Dmitry Stogov <dmitry@zend.com>

Closes GH-7885.
2022-01-10 12:40:15 +01:00
Christoph M. Becker 1d4482908b Merge branch 'PHP-8.1'
* PHP-8.1:
  Revert "Fix zend_observer_fcall_end_all() accessing dangling pointers"
2021-12-27 21:11:24 +01:00
Christoph M. Becker d58c48d45d Merge branch 'PHP-8.0' into PHP-8.1
* PHP-8.0:
  Revert "Fix zend_observer_fcall_end_all() accessing dangling pointers"
2021-12-27 21:10:40 +01:00
Christoph M. Becker ee610947ce Revert "Fix zend_observer_fcall_end_all() accessing dangling pointers"
This reverts commit 76e2a8380e.  Cf.
<https://github.com/php/php-src/commit/76e2a8380e5e030412e9d565955d011972af8418#r62560239>.
2021-12-27 21:08:51 +01:00
Christoph M. Becker a72a011054 Merge branch 'PHP-8.1'
* PHP-8.1:
  Fix zend_observer_fcall_end_all() accessing dangling pointers
2021-12-27 18:21:37 +01:00
Christoph M. Becker d4c07df4df Merge branch 'PHP-8.0' into PHP-8.1
* PHP-8.0:
  Fix zend_observer_fcall_end_all() accessing dangling pointers
2021-12-27 18:20:48 +01:00
Florian Sowade 76e2a8380e Fix zend_observer_fcall_end_all() accessing dangling pointers
This may happen, when the execute_data was allocated on the stack.  We
ensure that the runtime cache pointer is not NULL before dereferencing
it.

This is a partial fix for bug 81430.

Closes GH-7665.
2021-12-27 18:19:13 +01:00
Tyson Andre 7504cf189b Improve performance of WeakReference/WeakMap. Avoid hash collisions on pointers. (#7690)
Shift pointers by ZEND_MM_ALIGNMENT_LOG2
to avoid the noticeable performance degradation caused by hash table collisions.
in `EG(weakrefs)` and zend_weakmap->ht

On 64-bit platforms, pointers are usually aligned to at least 8 bytes,
so only one in 8 hash buckets were actually getting used.
(With the metadata needed to track allocations,
alignment might be at least 16 bytes in practice)

Address review comments, add optimization

Make it public for any extensions that need to work with EG(weakrefs)
for instrumentation, debugging, etc. (e.g. zend_test)

PHP 8.1 and previous releases would use the raw pointer value as a hash key instead.
2021-11-27 19:52:30 -05:00
Nikita Popov d362caed2c Merge branch 'PHP-8.1'
* PHP-8.1:
  Fix generation of property with class union type
  Replace SKIPIF with EXTENSIONS
2021-11-15 11:05:52 +01:00
Nikita Popov 68ca3879d7 Fix generation of property with class union type
The generated type was missing the UNION bit. Add a ZEND_TYPE_INIT_UNION
macro to hide the implementation details.
2021-11-15 11:04:48 +01:00
Nikita Popov 86379b6710 Warn if return type on internal __toString() is missing 2021-11-09 10:24:41 +01:00
Nikita Popov 85acad5688 Merge branch 'PHP-8.1'
* PHP-8.1:
  Add string return type to __toString() of internal classes
2021-11-09 10:21:16 +01:00
Nikita Popov 277caa1db0 Merge branch 'PHP-8.0' into PHP-8.1
* PHP-8.0:
  Add string return type to __toString() of internal classes
2021-11-09 10:20:36 +01:00
Nikita Popov a551b08307 Add string return type to __toString() of internal classes
Same as with userland classes, automatically add a string return
type to __toString() methods in internal classes, so the signature
is compatible with Stringable.
2021-11-09 10:17:26 +01:00
Bob Weinand 76145424c6 Merge branch 'PHP-8.1' 2021-10-21 19:32:20 +02:00
Bob Weinand 32024dd0bb Merge branch 'PHP-8.0' into PHP-8.1 2021-10-21 19:32:03 +02:00
Bob Weinand 345f46ff29 Fix weakmap API test
Apparently under some targets the address can evaluate to an address with the most significant bit set. (displays as negative number)
2021-10-21 19:31:37 +02:00
Bob Weinand d6bf375fe4 Merge branch 'PHP-8.1' 2021-10-21 13:44:03 +02:00
Bob Weinand 51a9c68ee5 Merge branch 'PHP-8.0' into PHP-8.1 2021-10-21 13:42:20 +02:00
Bob Weinand 471102edcd Add ZEND_API for weakmap functionality via zend_weakrefs_hash_add/del
Closes GH-7600.
2021-10-21 13:34:22 +02:00