1
0
mirror of https://github.com/php/php-src.git synced 2026-04-24 16:38:25 +02:00
Commit Graph

131329 Commits

Author SHA1 Message Date
Niels Dossche d8cd0f4ba0 Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  Fix GH-12392: Segmentation fault on SoapClient::__getTypes
  Fix GH-11121: ReflectionFiber segfault
  [ci skip] NEWS
2023-10-11 17:23:17 +02:00
Niels Dossche 7e4a3236d9 Fix GH-12392: Segmentation fault on SoapClient::__getTypes
There are two issues:
- UAF because the hashmap resized while being iterated over, yet the local
  variables used internally in the macros are not updated.
- The hashmap being iterated over is modified: entries are deleted after
  other entries have been added. This causes the deletion to fail sometimes
  because indices of buckets have shifted.

Fix it by using a while loop iteration and HashPosition position tracker
instead.
Issue exists on PHP 8.1 too, but is much harder to trigger.
The test file reproduces the issue reliably on PHP 8.2 and up.

Closes GH-12409.
2023-10-11 17:21:54 +02:00
Daniil Gentili 71f14510f6 Fix GH-11121: ReflectionFiber segfault
Closes GH-12391.

Co-authored-by: Aaron Piotrowski <aaron@trowski.com>
2023-10-11 17:19:01 +02:00
Niels Dossche 1f4159e504 [ci skip] NEWS
Entry for 90f2e7607a.
2023-10-11 17:17:11 +02:00
Ilija Tovilo 18942459a2 Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  Report warning if JIT cannot be enabled
2023-10-11 12:11:59 +02:00
Daniil Gentili 7177461141 Report warning if JIT cannot be enabled
Closes GH-12404
2023-10-11 12:10:48 +02:00
Ilija Tovilo 53dbb760da 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
2023-10-11 11:49:40 +02:00
Dmitry Stogov 310b5283eb Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  Reset inheritance_cache pointer of zend_class_entry upon serialization (#12401)
2023-10-11 09:57:35 +03:00
Sergei Turchanov 90f2e7607a Reset inheritance_cache pointer of zend_class_entry upon serialization (#12401)
to opcache filecache. Usually, when a class is being loaded, a dependency
tracking is performed after the call to zend_file_cache_script_store.
But sometimes, when opcache cache is empty and there are many simultaneous
outstanding requests for compilation, some classes do have their
inheritance_cache initialized before the call to zend_file_cache_script_store,
and in that case this pointer is serialized as-is. And when such a class
is loaded from opcache filecache this pointer also loaded as-is, and now
it points to some random location in memory. This causes segfaults occuring
when traversing inheritance_cache of such classes.

We need to reset inheritance_cache pointer of zend_class_entry
upon serialization. This should have been done anyway since it is a sensible
strategy to sanitize any memory pointer upon serialization (either by calling
SERIALIZE_x macros or setting to NULL or any other deterministic value).
2023-10-11 09:57:18 +03:00
Patrick Allaert fce51867f4 Merge branch 'PHP-8.1' into PHP-8.2 2023-10-10 22:54:21 +02:00
Patrick Allaert be64db5939 PHP-8.1 is now for PHP 8.1.26-dev 2023-10-10 22:54:03 +02:00
Pierrick Charron 2642a08697 PHP-8.2 is now for PHP 8.2.13-dev 2023-10-10 11:45:26 -04:00
Ilija Tovilo bb046c7217 Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  Move Cirrus to nightly only, trigger on-demand
2023-10-10 11:47:32 +02:00
Ilija Tovilo 92693a2286 Move Cirrus to nightly only, trigger on-demand
Closes GH-12398
2023-10-10 11:47:19 +02:00
Dmitry Stogov 70ff3c378d Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  Fixed possible use-after-free
2023-10-10 00:01:49 +03:00
Dmitry Stogov 2297e8c143 Fixed possible use-after-free 2023-10-10 00:01:03 +03:00
Niels Dossche 5e1058b426 Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  Fix GH-8996: DOMNode serialization on PHP ^8.1
  Fix GH-12380: JIT+private array property access inside closure accesses private property in child class
2023-10-09 22:10:54 +02:00
Niels Dossche 24e5e4ec0d Fix GH-8996: DOMNode serialization on PHP ^8.1
PHP 8.1 introduced a seemingly unintentional BC break in ca94d55a19 by
blocking the (un)serialization of DOM objects.
This was done because the serialization never really worked and just
resulted in an empty object, which upon unserialization just resulted in
an object that you can't use.

Users can however implement their own serialization methods, but the
commit made that impossible as the ACC flag gets passed down to the
child class. An approach was tried in #10307 with a new ACC flag to
selectively allow serialization with subclasses if they implement the
right methods. However, that was found to be too ad hoc.

Instead, let's abuse how the __sleep and __wakeup methods work to throw
the exception instead. If the child class implements the __serialize /
__unserialize method, then the throwing methods won't be called.
Similarly, if the child class implements __sleep and __wakeup, then
they're overridden and it doesn't matter that they throw.

For the user, this PR has the exact same behaviour for (sub)classes that
don't implement the serialization methods: an exception will be thrown.
For code that previously implemented subclasses with these methods, this
approach will make that code work again. This approach should be both BC
preserving and unbreak user's code.

Closes GH-12388.

For the test:
Co-authored-by: wazelin <contact@sergeimikhailov.com>
2023-10-09 22:10:05 +02:00
Niels Dossche fb6838770c Fix GH-12380: JIT+private array property access inside closure accesses private property in child class
For private fields, the scope has to be taken into account, otherwise
the property info may come from the wrong ce.

Closes GH-12381.
2023-10-09 22:10:05 +02:00
Dmitry Stogov 5a276bf478 Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  Fix GH-12364: JIT leak in Symfony TranslationDebugCommandTest (#12394)
2023-10-09 23:07:39 +03:00
Dmitry Stogov 36b2c5dc88 Fix GH-12364: JIT leak in Symfony TranslationDebugCommandTest (#12394) 2023-10-09 23:07:34 +03:00
Dmitry Stogov 176b79fe7f Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  Fix incorrect trace type inference
2023-10-09 22:58:21 +03:00
Dmitry Stogov 44a7016049 Fix incorrect trace type inference
Fixes GH-12365
2023-10-09 22:57:31 +03:00
Dmitry Stogov b38c57b4fc Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  Fixed GH-12382: JIT Index invalid or out of range error
2023-10-09 11:20:36 +03:00
Dmitry Stogov 5a8f96b0bb Fixed GH-12382: JIT Index invalid or out of range error 2023-10-09 11:20:18 +03:00
Niels Dossche 325b2b4a56 Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  [ci skip] Add xml and simplexml dependency to EXTENSIONS section in test
2023-10-07 21:13:47 +02:00
Niels Dossche 6bb536e3f6 [ci skip] Add xml and simplexml dependency to EXTENSIONS section in test 2023-10-07 21:13:30 +02:00
Niels Dossche 4268b0cdf8 Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  Fix Windows CI
2023-10-07 15:50:41 +02:00
Niels Dossche ae52f1958d Fix Windows CI
The path to mysql.exe changed. Fortunately, chocolately puts the folder
containing the exe in the PATH environment variable, so we don't even
need to provide an absolute path.
2023-10-07 15:49:46 +02:00
Niels Dossche a1845944ce Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  php_cli_server: ensure single date header is present
2023-10-06 17:50:13 +02:00
coppolafab f6ac08c6a3 php_cli_server: ensure single date header is present
Currently the PHP Development Server appends a Date header in the
response, despite already set from user code.

Added a check condition before append the header, and a test file.

Closes GH-12363.
2023-10-06 17:49:30 +02:00
Ilija Tovilo af5cdd8db0 Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  Minimal backport of 098d9ca
2023-10-04 15:33:25 +02:00
Ilija Tovilo 36a87e6d32 Minimal backport of 098d9ca 2023-10-04 15:31:04 +02:00
Ilija Tovilo 6f8261ed79 Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  Fix SKIPIF jit test
2023-10-04 15:06:32 +02:00
Ilija Tovilo 6e7e52de19 Fix SKIPIF jit test
JIT can be available but disabled, in which case the array offset 'jit' is still
available.
2023-10-04 15:05:41 +02:00
Ilija Tovilo b13f743761 Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  [skip ci] Test opcache_invalidate() return value for deleted files
2023-10-03 15:56:16 +02:00
Ilija Tovilo cad1660501 [skip ci] Test opcache_invalidate() return value for deleted files 2023-10-03 15:55:44 +02:00
Ilija Tovilo 6274970bee Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  Invalidate path even if the file was deleted
2023-10-03 15:32:28 +02:00
Mikhail Galanin f4ab494906 Invalidate path even if the file was deleted
Closes GH-12323
2023-10-03 15:31:39 +02:00
Dmitry Stogov 101bd1b199 Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  Fixed GH-12262: Tracing JIT assertion crash when using phpstan
2023-10-03 13:25:22 +03:00
Dmitry Stogov 54452b4811 Fixed GH-12262: Tracing JIT assertion crash when using phpstan 2023-10-03 13:22:33 +03:00
Niels Dossche 6aa20956fb Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  Ignore optional warning output in test
2023-10-02 22:55:28 +02:00
Niels Dossche 6cf76d552e Ignore optional warning output in test
Due to the greedy behaviour of regex, we can't seem to use %A?
Use a for loop with a marker instead to ignore module startup warnings.
2023-10-02 22:53:39 +02:00
Niels Dossche 87cd401aaf Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  Fix test under older CI configurations
2023-10-02 21:52:52 +02:00
Niels Dossche b140f6e9f8 Fix test under older CI configurations 2023-10-02 21:52:44 +02:00
Niels Dossche 28a909d40a Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  Fix #80092: ZTS + preload = segfault on shutdown
2023-10-02 19:37:09 +02:00
Niels Dossche bdc87b0f66 Fix #80092: ZTS + preload = segfault on shutdown
After preloading has executed, the executor globals for class_table and
function_table are still referring to the values during preloading.
If no request happens after that then these values will remain dangling
pointers. If then the -v option on CLI or -h option (and possibly
others) on CGI is provided, there is a double free.
Fix it by nulling the pointers explicitly after preloading has finished
to fix it for all SAPIs.

Closes GH-12311.
2023-10-02 19:33:41 +02:00
Anatol Belski 1934da0a81 NEWS: Added note about #11891
[ci skip]

Signed-off-by: Anatol Belski <ab@php.net>
2023-09-30 19:18:25 +02:00
Anatol Belski e181af7018 Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  NEWS: Added note about #11891
2023-09-30 19:17:36 +02:00
Anatol Belski a1225f35bb NEWS: Added note about #11891
[ci skip]

Signed-off-by: Anatol Belski <ab@php.net>
2023-09-30 19:16:42 +02:00