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

6658 Commits

Author SHA1 Message Date
Dmitry Stogov f9a782d7a4 Merge branch 'PHP-8.5'
* PHP-8.5:
  Update IR
2025-10-14 23:22:21 +03:00
Dmitry Stogov c31c697a85 Merge branch 'PHP-8.4' into PHP-8.5
* PHP-8.4:
  Update IR
2025-10-14 23:22:14 +03:00
Dmitry Stogov 191430dc3d Update IR
IR commit: 5a81104e650ebd7ac24eb63d4dff67db723a5278
2025-10-14 23:21:49 +03:00
Arnaud Le Blanc dc8b9f05cd Merge branch 'PHP-8.5'
* PHP-8.5:
  Fix JIT TLS on MacOS
2025-10-13 16:35:59 +02:00
Arnaud Le Blanc 0f634077aa Merge branch 'PHP-8.4' into PHP-8.5
* PHP-8.4:
  Fix JIT TLS on MacOS
2025-10-13 16:31:14 +02:00
Arnaud Le Blanc 54d793dc41 Merge branch 'PHP-8.3' into PHP-8.4
* PHP-8.3:
  Fix JIT TLS on MacOS
2025-10-13 16:26:03 +02:00
Arnaud Le Blanc 3abebf3e31 Fix JIT TLS on MacOS
The dynamic loader, starting around version 1284, patches the thunk emitted for
thread local variables by the compiler, so that its format changes from

struct Thunk {
    void *func;
    size_t module;
    size_t offset;
}

to

struct Thunk_v2 {
     void *func;
     uint32_t module;
     uint32_t offset;
     // other fields
}

which has the same size, but not the same layout.

This is mentionned in
https://github.com/apple-oss-distributions/dyld/blob/9307719dd8dc9b385daa412b03cfceb897b2b398/libdyld/ThreadLocalVariables.h#L90

As a result, access to thread specific variables in JIT is broken.

Fix by using the new layout when the new dynamic loader is in use.

Closes GH-20121
2025-10-13 16:16:39 +02:00
Gina Peter Banyard cab2faa486 ext/opcache/zend_accelerator_module.c: remove unused include 2025-10-13 13:55:04 +01:00
Gina Peter Banyard e0a82b53d4 ext/opcache: use RETURN_BOOL() instead of if/else 2025-10-13 13:55:04 +01:00
Gina Peter Banyard 20a44af376 ext/opcache: use zend_result type instead of int 2025-10-13 13:55:04 +01:00
Gina Peter Banyard 1b651dbc9e ext/opcache: use bool type instead of int 2025-10-13 13:55:04 +01:00
Gina Peter Banyard aed3acfa11 ext/opcache: add const qualifiers 2025-10-13 13:55:04 +01:00
Arnaud Le Blanc 8f488f9556 Mask USR1/HUP while waiting for preloading
Preloading may fork and wait for the child to exit. In case waitpid() is
interrupted, the parent exits with a fatal error. This is fine when the
syscall is interrupted by a signal whose disposition is set to terminate
the process, but not otherwise.

In the apache2handler SAPI, the parent is the control process. Restarting
apache2 is done by sending SIGUSR1 or SIGHUP to the control process. Doing that
during the waitpid() syscall would cause the control process to exit instead.

Block the USR1 and HUP signals from being delivered during the syscall when
running the apache2handler SAPI, as these are not supposed to terminate
the process.

FPM is fine as it masks relevant signals during php startup.

Fixes GH-20051
Closes GH-20079

Co-authored-by: mycozyhom <welcomycozyhom@gmail.com>
2025-10-10 15:48:08 +02:00
Arnaud Le Blanc ce7d4e726c Merge branch 'PHP-8.5'
* PHP-8.5:
  Fix access to uninitialized variables in preload_load()
2025-10-10 15:45:34 +02:00
Arnaud Le Blanc 01e34156a8 Merge branch 'PHP-8.4' into PHP-8.5
* PHP-8.4:
  Fix access to uninitialized variables in preload_load()
2025-10-10 15:45:22 +02:00
Arnaud Le Blanc 27807fd0f1 Merge branch 'PHP-8.3' into PHP-8.4
* PHP-8.3:
  Fix access to uninitialized variables in preload_load()
2025-10-10 15:44:33 +02:00
Arnaud Le Blanc ab9d121f48 Fix access to uninitialized variables in preload_load()
preload_load() reads EG(class_table) and EG(function_table), but these may not
be initialized. Move these accesses out of preload_load().

Closes GH-20081
2025-10-10 15:42:58 +02:00
Dmitry Stogov 4b2bb20731 Merge branch 'PHP-8.5'
* PHP-8.5:
  Update IR
2025-10-08 23:37:26 +03:00
Dmitry Stogov f77be081e1 Merge branch 'PHP-8.4' into PHP-8.5
* PHP-8.4:
  Update IR
2025-10-08 23:37:16 +03:00
Dmitry Stogov dd4189da83 Update IR
IR commit: 62d48607eb3ae5a9d1240115e9e4bdb3decdcadf
2025-10-08 23:36:58 +03:00
Arnaud Le Blanc 5c0a1ef7c7 Merge branch 'PHP-8.5'
* PHP-8.5:
  Fix race condition in zend_runtime_jit(), zend_jit_hot_func()
2025-10-07 10:54:05 +02:00
Arnaud Le Blanc 294e408ca2 Merge branch 'PHP-8.4' into PHP-8.5
* PHP-8.4:
  Fix race condition in zend_runtime_jit(), zend_jit_hot_func()
2025-10-07 10:53:53 +02:00
Arnaud Le Blanc 359ad80c4a Fix race condition in zend_runtime_jit(), zend_jit_hot_func()
zend_runtime_jit() prevents concurrent compilation with
zend_shared_alloc_lock(), but this doesn't prevent blocked threads from
trying to compile the function again after they acquire the lock.

In the case of GH-19889, one of the function entries is compiled with
zend_jit_handler(), which fails when the op handler has already been replaced by
a JIT'ed handler.

Fix by marking compiled functions with a new flag ZEND_FUNC_JITED, and
skipping compilation of marked functions. The same fix is applied to
zend_jit_hot_func().

Fixes GH-19889
Closes GH-19971
2025-10-07 10:48:44 +02:00
Ilija Tovilo 5c956f9838 Avoid capturing nested arrow function parameters
Fixes GH-19867
Closes GH-20041
2025-10-03 23:16:21 +02:00
Ilija Tovilo d2fcf04b64 Merge branch 'PHP-8.5'
* PHP-8.5:
  Fix flaky gh19984.phpt test
2025-10-03 22:25:29 +02:00
Ilija Tovilo faa4c7f9e6 Fix flaky gh19984.phpt test
When the parent finishes before the child, we may miss some output from the
child and have the test fail.
2025-10-03 22:25:18 +02:00
Ilija Tovilo 292e0c2937 Add ce_flags2 & fn_flags2 (GH-19991) 2025-09-30 22:54:59 +02:00
Ilija Tovilo 8aaffac9ff Merge branch 'PHP-8.5'
* PHP-8.5:
  Fix double-free of EG(errors)/persistent_script->warnings on persist of already persisted file
2025-09-30 22:53:33 +02:00
Ilija Tovilo bcd4be7d50 Fix double-free of EG(errors)/persistent_script->warnings on persist of already persisted file
Both processes race to compile warning_replay.inc. Whichever is first will get
to persist the script. The loser will use the script that is already persisted,
and the script that was just compiled is freed.

However, EG(errors) and persistent_script->warnings still refer to the same
allocation, and EG(errors) becomes a dangling pointer. To solve this, we simply
don't free warnings from free_persistent_script() anymore to maintain exclusive
ownership for EG(errors).

Furthermore, we need to adjust a call to zend_emit_recorded_errors() that would
previously use EG(errors), even when persistent_script has been swapped out.

Fixes GH-19984
Closes GH-19995
2025-09-30 22:53:25 +02:00
Gina Peter Banyard a94dc48567 Zend: Convert _zend_op_array.last_live_range field to uint32_t 2025-09-29 15:53:58 +01:00
Tim Düsterhus 3ef2505092 opcache: Use true / false instead of 1 / 0 for bool parameters
Changes done with Coccinelle:

    @r1@
    identifier F;
    identifier p;
    typedef bool;
    parameter list [n1] PL1;
    parameter list [n2] PL2;
    @@

    F(PL1, bool p, PL2) {
    ...
    }

    @r2@
    identifier r1.F;
    expression list [r1.n1] EL1;
    expression list [r1.n2] EL2;
    @@

    F(EL1,
    (
    - 1
    + true
    |
    - 0
    + false
    )
    , EL2)
2025-09-24 18:51:40 +02:00
Tim Düsterhus 65bd151bb7 opcache: Use return true / return false for functions returning bool
Changes done with Coccinelle:

    @r1@
    identifier fn;
    typedef bool;
    symbol false;
    symbol true;
    @@

    bool fn ( ... )
    {
    <...
    return
    (
    - 0
    + false
    |
    - 1
    + true
    )
    ;
    ...>
    }

Coccinelle patch sourced from
torvalds/linux@46b5c9b856.
2025-09-24 18:51:40 +02:00
Tim Düsterhus 066b63e7d9 opcache: Use true / false instead of 1 / 0 when assigning to bool
Changes done with Coccinelle:

    @@
    bool b;
    @@

    - b = 0
    + b = false

    @@
    bool b;
    @@

    - b = 1
    + b = true
2025-09-24 18:51:40 +02:00
Gina Peter Banyard c98cca6f47 Merge branch 'PHP-8.5'
* PHP-8.5:
  Update NEWS
  opcache: Fix segfault in function JIT due to NAN to bool warning (#19947)
2025-09-24 16:50:46 +01:00
Gina Peter Banyard b4b0155f64 opcache: Fix segfault in function JIT due to NAN to bool warning (#19947) 2025-09-24 16:48:02 +01:00
Arnaud Le Blanc 0d4ff662e6 Expose the source of exit points in zend_jit_dump_exit_info()
This adds a new flag: ZEND_JIT_DEBUG_TRACE_EXIT_INFO_SRC. When the flag is set,
zend_jit_dump_exit_info() exposes the source of exit points, in debug builds.

Closes GH-19700
2025-09-24 09:26:14 +02:00
Gina Peter Banyard 320fe2975b core: Warn when coercing NAN to other types
RFC: https://wiki.php.net/rfc/warnings-php-8-5#coercing_nan_to_other_types

Closes GH-19573
2025-09-23 11:16:51 +01:00
Gina Peter Banyard d27e1e1723 core: Add new test for coercions from NAN 2025-09-23 11:14:58 +01:00
Dmitry Stogov 83ccc97d80 Merge branch 'PHP-8.4'
* PHP-8.4:
  Update IR
2025-09-22 20:14:49 +03:00
Dmitry Stogov 1302b9f6da Update IR
IR commit: 425ca45ffed99b6d3085c6a7f7c9d4fb3c2b5737
2025-09-22 20:14:21 +03:00
Dmitry Stogov 58981ade34 Merge branch 'PHP-8.4'
* PHP-8.4:
  Update IR
2025-09-22 19:31:41 +03:00
Dmitry Stogov ef202cc4b7 Update IR
IR commit: 503018483d8333a3cfb25ab89a1eadefbee665bc
2025-09-22 19:31:06 +03:00
Arnaud Le Blanc f0878c8e30 Merge branch 'PHP-8.4'
* PHP-8.4:
  Handle references after FETCH_OBJ_R with REG destination
2025-09-22 17:57:35 +02:00
Arnaud Le Blanc 32c919b474 Handle references after FETCH_OBJ_R with REG destination
zend_jit_fetch_obj_r_slow_ex() may be used by the function JIT, which doesn't
rely on guards to handle references. Therefore it must deref the property value.

Other variants of zend_jit_fetch_obj_*_slow_ex can not be used used in function
JIT.

Fixes GH-19831
Closes GH-19838
2025-09-22 17:56:57 +02:00
Gina Peter Banyard b4ed215299 core: Warn when non-representable floats are coerced to int (#19760)
RFC: https://wiki.php.net/rfc/warnings-php-8-5#casting_out_of_range_floats_to_int
2025-09-21 23:53:16 +01:00
Niels Dossche 527ce267dd Merge branch 'PHP-8.4'
* PHP-8.4:
  Fix GH-19792: SCCP causes UAF for return value if both warning and exception are triggered
2025-09-11 19:37:29 +02:00
Niels Dossche 3026e88b0c Merge branch 'PHP-8.3' into PHP-8.4
* PHP-8.3:
  Fix GH-19792: SCCP causes UAF for return value if both warning and exception are triggered
2025-09-11 19:36:29 +02:00
Niels Dossche 2ad0b5cf05 Fix GH-19792: SCCP causes UAF for return value if both warning and exception are triggered
If an exception _and_ a warning (or deprecation) is emitted, then the
result is destroyed twice. Use an `else if` to prevent this.
This is tested via zend_test because the deprecation that triggered the
original reproducer may disappear in the future.

Closes GH-19793.
2025-09-11 19:35:53 +02:00
Arnaud Le Blanc 75945580bc Fix deoptimization after exit during inc/dec
When the assumption that (PRE|POST)_(INC|DEC) overflows turns out to be
false and we exit, effects are lost if op1 or result were in regs.

Fix by updating the stack map before creating the exit point.

Fixes GH-19669
Closes GH-19680
2025-09-11 12:35:39 +02:00
Arnaud Le Blanc 4e0e88a140 Fix deoptimization after exit during inc/dec
When the assumption that (PRE|POST)_(INC|DEC) overflows turns out to be
false and we exit, effects are lost if op1 or result were in regs.

Fix by updating the stack map before creating the exit point.

Fixes GH-19669
Closes GH-19680
2025-09-11 12:28:45 +02:00