1
0
mirror of https://github.com/php/php-src.git synced 2026-04-28 10:43:30 +02:00
Commit Graph

5560 Commits

Author SHA1 Message Date
Dmitry Stogov 7320f33f7f Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  Fixed incorrect type inference
2023-10-24 18:48:58 +03:00
Dmitry Stogov aa45df4849 Fixed incorrect type inference 2023-10-24 18:48:29 +03:00
Dmitry Stogov 9668077f6b Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  Fixed GH-12482: Abortion with tracing JIT
2023-10-24 14:21:06 +03:00
Dmitry Stogov 76c41d27f9 Fixed GH-12482: Abortion with tracing JIT 2023-10-24 14:20:35 +03:00
Dmitry Stogov fed7937d27 Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  memory_consumption must be page aligned
2023-10-23 12:10:54 +03:00
Dmitry Stogov e270ee3008 memory_consumption must be page aligned 2023-10-23 12:10:11 +03:00
Dmitry Stogov 6be3c18d38 Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  Fixed GH-12494: Zend/tests/arginfo_zpp_mismatch.phpt causes a segfault withJIT + --repeat 2
2023-10-23 10:51:48 +03:00
Dmitry Stogov e0ca4dca5b Fixed GH-12494: Zend/tests/arginfo_zpp_mismatch.phpt causes a segfault withJIT + --repeat 2 2023-10-23 10:50:55 +03:00
Ilija Tovilo b49e178563 Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  Avoid JIT warning with opcache.jit_buffer_size=0
2023-10-18 10:49:07 +02:00
Ilija Tovilo 07d81592e9 Avoid JIT warning with opcache.jit_buffer_size=0
Closes GH-12460
2023-10-18 10:46:30 +02:00
Dmitry Stogov ef91794264 Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  Fixed GH-11917: primitives seem to be passed via reference instead of by value under some conditions when JIT is enabled on windows (#12451)
2023-10-17 01:58:36 +03:00
Dmitry Stogov 89eb1c64a9 Fixed GH-11917: primitives seem to be passed via reference instead of by value under some conditions when JIT is enabled on windows (#12451) 2023-10-17 01:58:07 +03:00
Dmitry Stogov 0c6999cf94 Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  Fixed GH-12428: Assertion with function/tracing JIT
2023-10-16 15:12:29 +03:00
Dmitry Stogov dabced0fbb Fixed GH-12428: Assertion with function/tracing JIT 2023-10-16 15:11:56 +03: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
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
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 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
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 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
Niels Dossche 0f5b382528 Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  Revert "Fix GH-10008: Narrowing occurred during type inference of ZEND_ADD_ARRAY_ELEMENT"
2023-09-30 01:27:06 +02:00
Niels Dossche 643c4ba417 Revert "Fix GH-10008: Narrowing occurred during type inference of ZEND_ADD_ARRAY_ELEMENT"
Although it passes CI on 8.1, it causes CI failures in the JIT on 8.2 and
higher.
See https://github.com/php/php-src/actions/runs/6357716718/job/17269225001

This reverts commit e72fc12058.
2023-09-30 01:25:48 +02:00
Niels Dossche d7a7309b53 Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  Fix GH-10008: Narrowing occurred during type inference of ZEND_ADD_ARRAY_ELEMENT
  Fix type error on XSLTProcessor::transformToDoc return value with SimpleXML
2023-09-30 00:10:35 +02:00
Niels Dossche e72fc12058 Fix GH-10008: Narrowing occurred during type inference of ZEND_ADD_ARRAY_ELEMENT
This test triggers narrowing for two ops: first ZEND_ADD_ARRAY_ELEMENT,
and then ZEND_ASSIGN.

The type inference happens in the following order:
1) The ZEND_ADD_ARRAY_ELEMENT infers type 0x40e04080 (packed flag is set),
   arr_type=0 at this point because it hasn't been set by ZEND_INIT_ARRAY yet.
2) The ZEND_INIT_ARRAY infers type 0x40804080
3) The ZEND_ADD_ARRAY_ELEMENT infers type 0x40e04080, arr_type=0x40804080,
   which does not have the packed flag set while the existing result of
   ZEND_ADD_ARRAY_ELEMENT has the packed flag set.

This seems to occur because of the phi node introduced by the while
loop. If I remove the loop the problem goes away.

As Arnaud noted, this seems to be caused by a too wide type inference
for arr_type==0. We should keep the invariant that if x>=y then
key_type(x) >= key_type(y).
If we write the possible results down in a table we get:

```
arr_type           resulting key type
---------------    --------------------------------------------------------------------------
HASH_ONLY	-> MAY_BE_ARRAY_NUMERIC_HASH
PACKED_ONLY	-> MAY_BE_ARRAY_NUMERIC_HASH | MAY_BE_ARRAY_PACKED (== MAY_BE_ARRAY_KEY_LONG)
HASH || PACKED	-> MAY_BE_ARRAY_NUMERIC_HASH | MAY_BE_ARRAY_PACKED (== MAY_BE_ARRAY_KEY_LONG)
0		-> MAY_BE_ARRAY_NUMERIC_HASH | MAY_BE_ARRAY_PACKED (== MAY_BE_ARRAY_KEY_LONG)
```

As we can see, `HASH_ONLY > 0` but
`MAY_BE_ARRAY_NUMERIC_HASH < MAY_BE_ARRAY_NUMERIC_HASH | MAY_BE_ARRAY_PACKED`,
which violates the invariant.
Instead if we modify the zero case to have MAY_BE_ARRAY_NUMERIC_HASH instead,
we get the following table which satisfies the invariant.

```
arr_type           resulting key type
---------------    --------------------------------------------------------------------------
HASH_ONLY	-> MAY_BE_ARRAY_NUMERIC_HASH
PACKED_ONLY	-> MAY_BE_ARRAY_NUMERIC_HASH | MAY_BE_ARRAY_PACKED (== MAY_BE_ARRAY_KEY_LONG)
HASH || PACKED	-> MAY_BE_ARRAY_NUMERIC_HASH | MAY_BE_ARRAY_PACKED (== MAY_BE_ARRAY_KEY_LONG)
0		-> MAY_BE_ARRAY_NUMERIC_HASH
```

Broke in 1ffbb73.
Closes GH-10294.
2023-09-30 00:08:32 +02:00
Dmitry Stogov 8fcffa666f Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  Fixed tracing JIT support for CALLABLE_CONVERT (#12156)
2023-09-08 18:27:31 +03:00
Dmitry Stogov be0245c756 Fixed tracing JIT support for CALLABLE_CONVERT (#12156) 2023-09-08 18:27:13 +03:00
Ilija Tovilo aff86d68f6 Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  [skip ci] Fix borked xleak skip on <PHP-8.3
2023-09-01 12:40:07 +02:00
Ilija Tovilo b21df69848 [skip ci] Fix borked xleak skip on <PHP-8.3
xleak in skipif was only added in PHP 8.3.
2023-09-01 12:39:03 +02:00
Ilija Tovilo 10c81039da Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  Skip dl() tests on ASAN
2023-08-30 22:25:11 +02:00
Ilija Tovilo fb0f4215de Skip dl() tests on ASAN 2023-08-30 22:20:51 +02:00
Ilija Tovilo f2328302b6 Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  Check if restart is pending before trying to lock SHM
2023-07-31 20:00:49 +02:00
Mikhail Galanin 3e9792f4a2 Check if restart is pending before trying to lock SHM
This reduces lock contention when Opcache restart is scheduled
but not yet started.

Closes GH-11805
2023-07-31 20:00:31 +02:00