#
08e0729c |
| 08-Sep-2024 |
Ilija Tovilo |
Fix uninitialized lineno in constant AST of internal enums Closes GH-15806
|
#
423fc811 |
| 06-Aug-2024 |
Christoph M. Becker |
zend_enum: Rename try parameter to avoid conflict with C++ `try` is a keyword in C++, and as such C++ code including <zend_enum.h> fails to compile unless a workaround is in place. To r
zend_enum: Rename try parameter to avoid conflict with C++ `try` is a keyword in C++, and as such C++ code including <zend_enum.h> fails to compile unless a workaround is in place. To resolve this, we simply rename the parameter. We choose `try_from` to make it clear that this parameter is true when the function is called from `BackedEnum::tryFrom()`. For consistency, we also rename the `try` parameter of `zend_enum_from_base()`, although that function is not exported. This issue had been reported by @oplanre, who also provided an initial PR. Closes GH-15259.
show more ...
|
#
53dbb760 |
| 10-Oct-2023 |
Ilija Tovilo |
Fix use-after-free of constant name The constant name is usually interend. Without opcache, compilation always interns strings. Without opcache, compilation does not intern (new) strings
Fix use-after-free of constant name The constant name is usually interend. Without opcache, compilation always interns strings. Without opcache, compilation does not intern (new) strings, but persisting of script does. If a script is not stored in shm the constant name will not be interned. The building of enum backing stores was missing a addref for the constant name, leading to a double-free when releasing constants and backing stores of enums. Fixes GH-12366 Closes GH-12405
show more ...
|
#
e560592a |
| 21-Dec-2022 |
Petar Obradović |
Fix GH-9675: Re-adjust run_time_cache init for internal enum methods Closes GH-10143. |
#
5a0b68be |
| 14-Sep-2022 |
Bob Weinand |
Revert "Store default object handlers alongside the class entry" This reverts commit 9e6eab3c139b41dc976dd5305fd1a6e387e5e27f. Reverted along a01dd9fedaecd2e5b95bc5c2e8d6542116addea
Revert "Store default object handlers alongside the class entry" This reverts commit 9e6eab3c139b41dc976dd5305fd1a6e387e5e27f. Reverted along a01dd9fedaecd2e5b95bc5c2e8d6542116addeae.
show more ...
|
#
9e6eab3c |
| 22-Jul-2022 |
Bob Weinand |
Store default object handlers alongside the class entry Object handlers being separate from class entries is a legacy inherited from PHP 5. Today it has little benefit to keep them separate:
Store default object handlers alongside the class entry Object handlers being separate from class entries is a legacy inherited from PHP 5. Today it has little benefit to keep them separate: in fact, accessing object handlers usually requires not-so-safe hacks. While it is possible to swap handlers in a custom installed create_object handler, this mostly is tedious, as well as it requires allocating the object handlers struct at runtime, possibly caching it etc.. This allows extensions, which intend to observe other classes to install their own class handlers. The life cycle of internal classes may now be simply observed by swapping the class handlers in post_startup stage. The life cycle of userland classes may be observed by iterating over the new classes in zend_compile_file and zend_compile_string and then swapping their handlers. In general, this would also be a first step in directly tying the object handlers to classes. Especially given that I am not aware of any case where the object handlers would be different between various instances of a given class. Signed-off-by: Bob Weinand <bobwei9@hotmail.com>
show more ...
|
#
9b984f52 |
| 23-Aug-2022 |
Ollie Read
|
Enum error message consistency (#9350) |
#
dc5475c1 |
| 28-Jul-2022 |
Bob Weinand |
Save previous observer on the VM stack This avoids a possible significant performance penalty, when some leaf function was observed, deep in the stack. As a side effect, we are not itera
Save previous observer on the VM stack This avoids a possible significant performance penalty, when some leaf function was observed, deep in the stack. As a side effect, we are not iterating over prev_execute_data anymore and thus, non-observed fake frames, possibly on stack, cannot have any impact on the observer anymore (especially within zend_observer_fcall_end_all). Saving the previous observer happens now directly on the VM stack. If there is any observer, function frames are allocated an extra zval (the last temporary), which will, on observed frames, contain the previous observed frame address.
show more ...
|
#
625f1649 |
| 20-Jul-2022 |
Bob Weinand |
Include internal functions in the observer API There are two main motivations to this: a) The logic for handling internal and userland observation can be unified. b) Unwinding of obs
Include internal functions in the observer API There are two main motivations to this: a) The logic for handling internal and userland observation can be unified. b) Unwinding of observed functions on a bailout does notably not include observers. Even if users of observers were to ensure such handling themselves, it would be impossible to retain the relative ordering - either the user has to unwind all internal observed frames before the automatic unwinding (zend_observer_fcall_end_all) or afterwards, but not properly interleaved. Signed-off-by: Bob Weinand <bobwei9@hotmail.com>
show more ...
|
#
76fcd70c |
| 25-Jun-2022 |
Ilija Tovilo |
Fix enum preloading again (#8859) |
#
d9e1871c |
| 16-Jun-2022 |
Ilija Tovilo |
Fix leak of backed_enum_table with preloading |
#
912c22cc |
| 16-Jun-2022 |
Ilija Tovilo |
Fix segfault when using preloaded enums |
#
45210b47 |
| 16-Jun-2022 |
Ilija Tovilo |
Fix segfault when calling from/tryFrom on empty enum |
#
ddc0b490 |
| 10-Mar-2022 |
Ilija Tovilo |
Allow arbitrary const expressions in backed enums Closes GH-7821 Closes GH-8190 Closes GH-8418 |
#
d62d50b8 |
| 08-May-2022 |
Ilija Tovilo |
Add C API for getting backed enum case by value Closes GH-8518 |
#
df2414a2 |
| 28-May-2022 |
Ilija Tovilo |
Merge branch 'PHP-8.1' * PHP-8.1: Fix Enum::from/tryFrom memory leak in JIT for internal enums
|
#
93fc88e8 |
| 25-May-2022 |
Ilija Tovilo |
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 unne
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
show more ...
|
#
90b7bde6 |
| 03-Nov-2021 |
Dmitry Stogov |
Use more compact representation for packed arrays. - for packed arrays we store just an array of zvals without keys. - the elements of packed array are accessible throuf as ht->arPacked[
Use more compact representation for packed arrays. - for packed arrays we store just an array of zvals without keys. - the elements of packed array are accessible throuf as ht->arPacked[i] instead of ht->arData[i] - in addition to general ZEND_HASH_FOREACH_* macros, we introduced similar familied for packed (ZEND_HASH_PACKED_FORECH_*) and real hashes (ZEND_HASH_MAP_FOREACH_*) - introduced an additional family of macros to access elements of array (packed or real hashes) ZEND_ARRAY_ELEMET_SIZE, ZEND_ARRAY_ELEMET_EX, ZEND_ARRAY_ELEMET, ZEND_ARRAY_NEXT_ELEMENT, ZEND_ARRAY_PREV_ELEMENT - zend_hash_minmax() prototype was changed to compare only values Because of smaller data set, this patch may show performance improvement on some apps and benchmarks that use packed arrays. (~1% on PHP-Parser) TODO: - sapi/phpdbg needs special support for packed arrays (WATCH_ON_BUCKET). - zend_hash_sort_ex() may require converting packed arrays to hash.
show more ...
|
#
c03f97cd |
| 31-Aug-2021 |
Nikita Popov |
Add missing const qualitier in zend_register_internal_enum() |
#
a0272472 |
| 13-Aug-2021 |
Nikita Popov |
Fix message in test Looks like I did not "git add" the message update. Also drop the now dead ZEND_ENUM_PROPERTY_ERROR() macro while here. |
#
caefc6a5 |
| 13-Aug-2021 |
Nikita Popov |
Don't use custom object handlers for enum properties Instead mark name/value as readonly and the class as NO_DYNAMIC_PROPERTIES. This gives us the desired limitations using native fe
Don't use custom object handlers for enum properties Instead mark name/value as readonly and the class as NO_DYNAMIC_PROPERTIES. This gives us the desired limitations using native features. In fact, this also fixes a bug where opcache cache slot merging might result in a write to the name/value properties being allowed. The readonly implementation handles this case correctly.
show more ...
|
#
aef3bb70 |
| 27-Jul-2021 |
Nikita Popov |
Fix enum cast AST allocation, again We always need to allocate space for the three children, and only don't need one of the zend_ast_zval structures. |
#
645ef626 |
| 27-Jul-2021 |
Nikita Popov |
Fix enum cast AST allocation I missed this occurrence of the hardcoded number "3". |
#
a374230c |
| 22-Jul-2021 |
Nikita Popov |
Add support for internal enums This adds support for internal enums with the same basic approach as userland enums. Enum values are stored as CONSTANT_AST and objects created during
Add support for internal enums This adds support for internal enums with the same basic approach as userland enums. Enum values are stored as CONSTANT_AST and objects created during constant updating at runtime. This means that we need to use mutable_data for internal enums. This just adds basic support and APIs, it does not include the stubs integration from #7212. Closes GH-7302.
show more ...
|
#
fd1d5ec2 |
| 28-Apr-2021 |
Nikita Popov |
Add ZEND_CLASS_CONST_FLAGS() macro And drop Z_ACCESS_FLAGS(). We no longer store *only* access flags in these. |