1
0
mirror of https://github.com/php/php-src.git synced 2026-04-04 14:42:49 +02:00
Commit Graph

1394 Commits

Author SHA1 Message Date
Dmitry Stogov
c6eb5dc5fd Fix possible crash in case of exception
Fixes oss-fuzz #49068
2022-07-18 15:40:11 +03:00
George Peter Banyard
f905590764 Add support for Disjoint Normal Form (DNF) types (#8725)
RFC: https://wiki.php.net/rfc/dnf_types

This allows to combine union and intersection types together in the following form (A&B)|(X&Y)|T but not of the form (X|A)&(Y|B) or (X|A)&(Y|B)|T.

* Improve union type parsing

Co-authored-by: Sara Golemon <pollita@php.net>
2022-07-08 11:30:23 +01:00
Pierrick Charron
4dd66b8ce0 Merge branch 'PHP-8.1'
* PHP-8.1:
  Fixed bug GH-8943 Reflection::getModifiersNames() with readonly modifier
2022-07-07 17:03:25 -04:00
Pierrick Charron
c650e67c90 Fixed bug GH-8943 Reflection::getModifiersNames() with readonly modifier 2022-07-07 16:59:54 -04:00
George Peter Banyard
0ae6a67550 Add true as a type (#8326)
RFC: https://wiki.php.net/rfc/true-type
2022-06-12 23:28:19 +01:00
Ilija Tovilo
ddc0b490f7 Allow arbitrary const expressions in backed enums
Closes GH-7821
Closes GH-8190
Closes GH-8418
2022-06-12 22:56:05 +02:00
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
Dmitry Stogov
7451b8b6b0 Merge branch 'PHP-8.1'
* PHP-8.1:
  Fix memory leak
2022-06-06 11:38:37 +03:00
Dmitry Stogov
74744f3c0d Merge branch 'PHP-8.0' into PHP-8.1
* PHP-8.0:
  Fix memory leak
2022-06-06 11:38:29 +03:00
Dmitry Stogov
088e5677fb Fix memory leak
This fixes oss-fuzz #47791
2022-06-06 11:35:01 +03:00
Sam
2ce2aff50e Better return types for getBackingType (#8687)
The only backing types for Enums are int and string. The proper return type for ReflectionEnum::getBackingType() is thus null|ReflectionNamedType.

See also https://github.com/php/doc-en/pull/1608

Closes GH-8687
2022-06-02 18:13:21 +02:00
Máté Kocsis
7850c10389 Add support for readonly classes (#7305)
RFC: https://wiki.php.net/rfc/readonly_classes
2022-05-16 20:40:23 +02:00
Ollie Read
f590782b60 Add ReflectionMethod::hasPrototype method
Closes GH-8487.
2022-05-09 16:48:54 +02:00
Nicolas Grekas
be11bcb0b1 Add ReflectionFunction::isAnonymous()
Closes GH-8499.
2022-05-09 12:56:10 +02:00
Máté Kocsis
fc04a6ebdd Throw when calling ReflectionAttribute::__construct()
ReflectionAttribute::__construct() accepted any number of parameters until now, because parameter validation was missing. Even though this was unlikely to be an issue in practice (since the method is private), the problem is fixed by always throwing an exception.
2022-05-03 21:23:22 +02:00
Máté Kocsis
ef5478b823 Reorder param parsing and reflection object retrieval 2022-05-03 20:34:00 +02:00
Ilija Tovilo
90a845c13f Merge branch 'PHP-8.1'
* PHP-8.1:
  Fix ReflectionProperty::__toString() of properties containing enums
2022-04-29 10:22:08 +02:00
Ilija Tovilo
1944c14ce7 Fix ReflectionProperty::__toString() of properties containing enums
Fix GH-8444
2022-04-28 19:48:23 +02:00
Ilija Tovilo
91fe8075ab Merge branch 'PHP-8.1'
* PHP-8.1:
  Fix GH-8421: Attributes that target functions are not valid for anonymous functions defined within a method
2022-04-23 11:19:34 +02:00
Ilija Tovilo
82d3a831d2 Merge branch 'PHP-8.0' into PHP-8.1
* PHP-8.0:
  Fix GH-8421: Attributes that target functions are not valid for anonymous functions defined within a method
2022-04-23 11:19:20 +02:00
Ollie Read
d0f1b987a5 Fix GH-8421: Attributes that target functions are not valid for anonymous functions defined within a method
Closes GH-8424
2022-04-23 11:16:28 +02:00
George Peter Banyard
6039c07a3a Allow `null and false` as standalone types (#7546)
RFC: https://wiki.php.net/rfc/null-standalone-type

Also a drive-by consistency fix for error messages.
2022-04-08 17:23:52 +01:00
Christoph M. Becker
c8720568ec Merge branch 'PHP-8.1'
* PHP-8.1:
  Fix GH-8080: ReflectionClass::getConstants() depends on def. order
2022-02-28 10:12:23 +01:00
Christoph M. Becker
27d2fddf6a Merge branch 'PHP-8.0' into PHP-8.1
* PHP-8.0:
  Fix GH-8080: ReflectionClass::getConstants() depends on def. order
2022-02-28 10:11:29 +01:00
Christoph M. Becker
0d266a24d6 Fix GH-8080: ReflectionClass::getConstants() depends on def. order
When we need to evaluate constant ASTs, we always have to do that in
the scope where the constant has been defined, which may be a parent
of the `ReflectionClass`'s scope.

Closes GH-8106.
2022-02-28 10:08:47 +01:00
Dmitry Stogov
9a165336bd Merge branch 'PHP-8.1'
* PHP-8.1:
  Fix ext/zend_test/tests/observer_bug81430_2.phpt failure
2022-01-12 12:10:23 +03:00
Dmitry Stogov
f6d7f78a9b Merge branch 'PHP-8.0' into PHP-8.1
* PHP-8.0:
  Fix ext/zend_test/tests/observer_bug81430_2.phpt failure
2022-01-12 12:09:28 +03:00
Dmitry Stogov
f7c3f6e7e2 Fix ext/zend_test/tests/observer_bug81430_2.phpt failure 2022-01-12 12:08:59 +03: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
2658925e60 Merge branch 'PHP-8.1'
* PHP-8.1:
  Fix #81681: ReflectionEnum throwing exceptions
2021-12-02 23:22:47 +01:00
Christoph M. Becker
59dd4fd742 Fix #81681: ReflectionEnum throwing exceptions
Enums are neither instantiable nor cloneable.

Closes GH-7707.
2021-12-02 23:22:07 +01:00
Nikita Popov
902d64390e Deprecate implicit dynamic properties
Writing to a proprety that hasn't been declared is deprecated,
unless the class uses the #[AllowDynamicProperties] attribute or
defines __get()/__set().

RFC: https://wiki.php.net/rfc/deprecate_dynamic_properties
2021-11-26 14:10:11 +01:00
Nikita Popov
aaba0000d3 Merge branch 'PHP-8.1'
* PHP-8.1:
  Fix bug #81630: Don't claim known hash in getTraitAliases()
  Assert hash is known when we claim it is
2021-11-17 15:55:25 +01:00
Nikita Popov
6641e3b8f4 Fix bug #81630: Don't claim known hash in getTraitAliases()
We don't intern this string, and this code is not particularly
performance critical in the first place, so just drop the the
assumption.
2021-11-17 15:54:42 +01:00
Nikita Popov
f51eb15799 Merge branch 'PHP-8.1'
* PHP-8.1:
  Fix bug #81611
  Extract code for reporting a zend_fetch_class() error
2021-11-16 14:40:37 +01:00
Cameron Porter
812df2bd8a Fix bug #81611
Add zend_fetch_class_with_scope() which accepts a scope to use for
self/parent, and use that during constant expression evaluation.

Closes GH-7649.
2021-11-16 14:40:06 +01: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
c0441f9377 Replace SKIPIF with EXTENSIONS 2021-11-15 10:45:25 +01:00
Nikita Popov
edc02d2d94 Merge branch 'PHP-8.1'
* PHP-8.1:
  Implement Stringable automatically for internal classes
2021-11-05 10:24:07 +01:00
Nikita Popov
b0ec6223e2 Merge branch 'PHP-8.0' into PHP-8.1
* PHP-8.0:
  Implement Stringable automatically for internal classes
2021-11-05 10:23:23 +01:00
Nikita Popov
b302bfabe7 Implement Stringable automatically for internal classes
Requiring all internal classes (including those from 3rd-party
extensions) to implement Stringable if they provide __toString()
is too error prone. Case in point, our _ZendTestClass test class
was not doing so, resulting in preloading test failures after
recent changes.

Instead we automatically implement Stringable, the same as we do
for userland classes. We still allow explicit implementations,
but ignore them (normally they would result in an error due to
duplicate interface implementation). Finally, we need to be
careful about not trying to implement Stringable on Stringable
itself.

In some cases this changes the interface order, in particular the
automatic Stringable implementation will now come first.
2021-11-05 10:22:04 +01:00
Dmitry Stogov
90b7bde615 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.
2021-11-03 15:18:26 +03:00
Nikita Popov
a1285978d4 Merge branch 'PHP-8.1'
* PHP-8.1:
  Print array defaults in reflection
2021-10-20 15:17:08 +02:00
Nikita Popov
fb5cff1272 Print array defaults in reflection
As a followup to f34114b1fb print
the contents of arrays rather than just a generic "Array" marker.
Also drop the truncation on strings. As we no longer resolve
constants, there should be less concerns about printing very
large strings here. If someone thought it was a good idea to use
a 10k character strings as a default value in code, then it should
be fine for us to print it in reflection as well.
2021-10-20 15:16:29 +02:00
Nikita Popov
90ef1c7834 Merge branch 'PHP-8.1'
* PHP-8.1:
  Remove unused scope argument
2021-10-20 14:55:13 +02:00
Nikita Popov
11d97ae00c Remove unused scope argument 2021-10-20 14:55:00 +02:00
Máté Kocsis
f7d9594dbd Merge branch 'PHP-8.1'
* PHP-8.1:
  Remove extra space before return type
2021-10-18 14:29:35 +02:00