1
0
mirror of https://github.com/php/php-src.git synced 2026-04-29 11:13:36 +02:00
Commit Graph

136394 Commits

Author SHA1 Message Date
Gina Peter Banyard 35c5cf9760 ext/spl: Remove useless wrapper 2024-06-15 01:33:09 +01:00
Gina Peter Banyard 90b8db49ac ext/spl: Refactor SplFileInfo::getPathInfo() implementation 2024-06-15 01:33:09 +01:00
Máté Kocsis bed11e4edc Generate DocBook 5.2 conformant class synopses pages (#14351)
Related to https://github.com/php/doc-en/pull/3415
2024-06-14 22:12:40 +02:00
David Carlier 2bb8fbd0a8 ext/pgsql: add pg_jit server info.
since PostgreSQL 11, LLVM JIT feature had been brought thus reporting
the settings to the client connection.

Close GH-14566
2024-06-14 16:27:00 +01:00
Niels Dossche 4107cb2eda phpdbg: change uses of sprintf into snprintf 2024-06-14 08:12:03 -07:00
Niels Dossche 80d4d406ba FPM: change uses of sprintf into snprintf 2024-06-14 08:12:03 -07:00
Niels Dossche 1bd33b7476 CLI: change uses of sprintf into snprintf 2024-06-14 08:12:03 -07:00
Niels Dossche c151d2d135 standard: change uses of sprintf into snprintf and zend_string_concat2 2024-06-14 08:12:03 -07:00
Niels Dossche a4674654ab opcache: change uses of sprintf into snprintf 2024-06-14 08:12:03 -07:00
Niels Dossche 26fcb5f2b2 win32: change uses of sprintf into snprintf 2024-06-14 08:12:03 -07:00
Niels Dossche 5fffdaa419 openssl: change uses of sprintf into snprintf and zend_string_concat2 2024-06-14 08:12:03 -07:00
Niels Dossche 429f91d80d snmp: change uses of sprintf into snprintf 2024-06-14 08:12:03 -07:00
Niels Dossche b1fd3477b2 mysqlnd: change uses of sprintf into snprintf 2024-06-14 08:12:03 -07:00
Niels Dossche cbb81b87f2 intl: change uses of sprintf into snprintf 2024-06-14 08:12:03 -07:00
Niels Dossche 934e385640 gd: change uses of sprintf into snprintf 2024-06-14 08:12:03 -07:00
Niels Dossche 7e2d47d2b8 curl: change uses of sprintf into snprintf 2024-06-14 08:12:03 -07:00
Niels Dossche 8c92b5f7ae TSRM: change uses of sprintf into snprintf 2024-06-14 08:12:03 -07:00
Niels Dossche 3b83d7e3b5 Zend: change uses of sprintf into snprintf 2024-06-14 08:12:03 -07:00
Peter Kokot 3b951e7b04 Rename HAVE_DECL_ARC4RANDOM_BUF to HAVE_ARC4RANDOM_BUF (#14565)
AC_CHECK_DECLS defines HAVE_DECL_ARC4RANDOM_BUF to 0 or 1. On Windows
this isn't defined to 0. To avoid the undefined state, the AC_CHECK_DECL
is used to manually define the HAVE_ARC4RANDOM_BUF to 1 if declaration
is found, otherwise undefined.

In the future on current platforms, also AC_CHECK_FUNCS can be used
instead since the arc4random_buf is located in default libraries (C)
with declaration available in headers.
2024-06-13 22:36:05 +02:00
Saki Takamachi 37488d6e01 ext/bcmath: Minor fixes to bcmul() (#14564)
The original calculation method for prod_arr_size allowed for some error,
which could have increased the number of simple loops without byte tricks
at the end of the calculation when converting to bc_num.

The new method calculates the size accurately, so the number of loops does
not increase unnecessarily.
2024-06-14 02:20:32 +09:00
Ilija Tovilo 460b851214 [skip ci] Fix codecov upload 2024-06-13 17:33:56 +02:00
Peter Kokot 2969889fb8 Remove conditional pg_encoding_to_char usage (#14557)
The pg_encoding_to_char is available in PostgreSQL since ~7.3 where also
the --enable-multibyte option was removed. PHP minimum PostgreSQL
version at this point is 9.1, which also has the pg_encoding_to_char
declaration in libpq-fe.h.

This removes conditional usage and the HAVE_PGSQL_WITH_MULTIBYTE_SUPPORT
symbol.
2024-06-13 16:00:16 +02:00
Derick Rethans 4b24f5d6db Merge branch 'PHP-8.3' 2024-06-13 14:04:48 +01:00
Derick Rethans 784b745e07 Update NEWS 2024-06-13 14:04:42 +01:00
Derick Rethans 31798e4b6d Merge branch 'PHP-8.2' into PHP-8.3 2024-06-13 14:04:13 +01:00
Derick Rethans c595ab96ab Update NEWS 2024-06-13 14:04:03 +01:00
Derick Rethans e0e9eb4053 Merge branch 'fix-anonymous-socket-at-length-boundary' into PHP-8.2 2024-06-13 14:03:46 +01:00
Ilija Tovilo 8fd1388a7f Merge branch 'PHP-8.3'
* PHP-8.3:
  Remove GitHub actions junit artifacts
2024-06-13 14:09:17 +02:00
Ilija Tovilo 9cec164f76 Merge branch 'PHP-8.2' into PHP-8.3
* PHP-8.2:
  Remove GitHub actions junit artifacts
2024-06-13 14:07:43 +02:00
Ilija Tovilo f598b58790 Remove GitHub actions junit artifacts
Nobody looks at those, and nightly regularly fails due to uploading them.

Closes GH-14555
2024-06-13 14:05:50 +02:00
Ilija Tovilo 4542cc66dd Merge branch 'PHP-8.3'
* PHP-8.3:
  Fix windows rename test directories clashing
2024-06-13 14:03:33 +02:00
Ilija Tovilo 22ac07a886 Merge branch 'PHP-8.2' into PHP-8.3
* PHP-8.2:
  Fix windows rename test directories clashing
2024-06-13 14:03:26 +02:00
Ilija Tovilo 8d9f9755e8 Fix windows rename test directories clashing
Closes GH-14554
2024-06-13 14:02:57 +02:00
Ilija Tovilo 86ebc18e38 [skip ci] Add myself as CODEOWNER for some more files 2024-06-13 13:59:55 +02:00
Derick Rethans ad56ec7bbf Fixed off-by-one error in checking length of abtract namespace Unix sockets 2024-06-13 12:46:22 +01:00
Peter Kokot 5baef94d00 Remove conditional usage of PQfreemem (#14559)
PQfreemem is available since PostgreSQL 7.4.
2024-06-13 13:34:08 +02:00
Peter Kokot dcd20da8a5 Merge branch 'PHP-8.3'
* PHP-8.3:
  Fix incompatible function pointer types
2024-06-13 12:28:27 +02:00
Peter Kokot 7b40a5a9f3 Merge branch 'PHP-8.2' into PHP-8.3
* PHP-8.2:
  Fix incompatible function pointer types
2024-06-13 12:27:09 +02:00
Ryan Carsten Schmidt b43378d830 Fix incompatible function pointer types
Closes #14549
2024-06-13 12:24:52 +02:00
Giovanni Giacobbi 592d899462 ext/gd: de-factorize image output functions (#14523)
The image output functions imagegif/imagepng/imagewebp/imageavif/imagejpeg
were all calling the static function _php_image_output_ctx which was basically
a big switch statement between each image type which also have different
parameters.

The only identical part was the call to create_stream_context_from_zval that
is now merged with create_output_context.
2024-06-13 09:46:47 +01:00
Tim Düsterhus 1e7aac315e zend_compile: Optimize sprintf() into a rope (#14546)
* zend_compile: Add `zend_compile_rope_finalize()`

This just extracts the implementation as-is into a dedicated function to make
it reusable in preparation of a future commit.

* zend_compile: Use clearer parameter names for `zend_compile_rope_finalize()`

* zend_compile: Fix `zend_compile_rope_finalize()` for ropes containing a single constant string

Without this Opcache will trigger a use-after-free in
`zend_optimizer_compact_literals()`.

Co-authored-by: Ilija Tovilo <ilija.tovilo@me.com>

* zend_compile: Optimize `sprintf()` into a rope

This optimization will compile `sprintf()` using only `%s` placeholders into a
rope at compile time, effectively making those calls equivalent to the use of
string interpolation, with the added benefit of supporting arbitrary
expressions instead of just expressions starting with a `$`.

For a synthetic test using:

    <?php

    $a = 'foo';
    $b = 'bar';

    for ($i = 0; $i < 100_000_000; $i++) {
    	sprintf("%s-%s", $a, $b);
    }

This optimization yields a 2.1× performance improvement:

    $ hyperfine 'sapi/cli/php -d zend_extension=php-src/modules/opcache.so -d opcache.enable_cli=1 test.php' \
          '/tmp/unoptimized -d zend_extension=php-src/modules/opcache.so -d opcache.enable_cli=1 test.php'
    Benchmark 1: sapi/cli/php -d zend_extension=php-src/modules/opcache.so -d opcache.enable_cli=1 test.php
      Time (mean ± σ):      1.869 s ±  0.033 s    [User: 1.865 s, System: 0.003 s]
      Range (min … max):    1.840 s …  1.945 s    10 runs

    Benchmark 2: /tmp/unoptimized -d zend_extension=php-src/modules/opcache.so -d opcache.enable_cli=1 test.php
      Time (mean ± σ):      4.011 s ±  0.034 s    [User: 4.006 s, System: 0.005 s]
      Range (min … max):    3.964 s …  4.079 s    10 runs

    Summary
      sapi/cli/php -d zend_extension=php-src/modules/opcache.so -d opcache.enable_cli=1 test.php ran
        2.15 ± 0.04 times faster than /tmp/unoptimized -d zend_extension=php-src/modules/opcache.so -d opcache.enable_cli=1 test.php

This optimization comes with a small and probably insignificant behavioral
change: If one of the values cannot be (cleanly) converted to a string, for
example when attempting to insert an object that is not `Stringable`, the
resulting Exception will naturally not show the `sprintf()` call in the
resulting stack trace, because there is no call to `sprintf()`.

Nevertheless it will correctly point out the line of the `sprintf()` call as
the source of the Exception, pointing the user towards the correct location.

* zend_compile: Eagerly handle empty format strings in `sprintf()` optimization

* zend_compile: Add additional explanatory comments to zend_compile_func_sprintf()

* Add zero-argument test to sprintf_rope_optimization_001.phpt

---------

Co-authored-by: Ilija Tovilo <ilija.tovilo@me.com>
2024-06-13 10:41:45 +02:00
David CARLIER 18cfd94de4 ext/sockets: multicast simplification on ipv4 table retrieval and buffer handling. (#14542) 2024-06-12 18:33:16 +01:00
Arnaud Le Blanc 25360ef249 Detect heap freelist corruption (#14054)
We keep track of free slots by organizing them in a linked list, with the
first word of every free slot being a pointer to the next one.

In order to make corruptions more difficult to exploit, we check the consistency
of these pointers before dereference by comparing them with a shadow. The shadow
is a copy of the pointer, stored at the end of the slot.

Before this change, an off-by-1 write is enough to produce a valid freelist
pointer. After this change, a bigger out of bound write is required for that.
The difficulty is increase further by mangling the shadow with a secret, and
byte-swapping it, which increases the minimal required out of bound write
length.

Closes GH-14054
2024-06-12 17:28:52 +02:00
Arnaud Le Blanc d1048a0869 Add zend_random_bytes(), zend_random_bytes_insecure() functions (#14054)
Co-authored-by: Tim Düsterhus <tim@bastelstu.be>
2024-06-12 17:27:01 +02:00
Peter Kokot d545b1d643 Add missing ext/pcre dependency for ext/pgsql (#14541) 2024-06-11 23:38:23 +02:00
Peter Kokot 5d3fab9334 Sync #if/ifdef/defined (#14520)
These are either undefined or defined (to value 1):
- __DragonFly__
- __FreeBSD__
- HAS_MCAST_EXT
- HAVE_GETCWD
- HAVE_GETWD
- HAVE_GLIBC_ICONV
- HAVE_JIT
- HAVE_LCHOWN
- HAVE_NL_LANGINFO
- HAVE_RL_CALLBACK_READ_CHAR
- HAVE_RL_ON_NEW_LINE
- HAVE_SQL_EXTENDED_FETCH
- HAVE_UTIME

Follow up of GH-5526 (-Wundef)
2024-06-11 22:47:05 +02:00
Jorg Adam Sowa 45714e2cb8 random: Remove redundant assignments in php_random_rangeX() (#14536)
Co-authored-by: Tim Düsterhus <tim@bastelstu.be>
2024-06-11 21:36:02 +02:00
Peter Kokot 61a0e3bd19 Sync HAVE_OPENSSL* symbols (#14333)
This syncs few inconsistencies between the Windows and Autotools build
systems:
- HAVE_OPENSSL_EXT is now defined in the same style on both systems
  (undefined - extension is not available, defined to 1 - extension is
  available)
- HAVE_OPENSSL removed as it was only defined on Windows
2024-06-11 19:18:19 +02:00
Saki Takamachi bfc988552f Fixed GH-14383: Fixed usec was carry up (#14463)
If round to the fractional part of a timestamp, a carry will occur in cases
such as 999 999 9. In that case, set usec to 0 and add/sub 1 to sec.
2024-06-11 19:02:43 +09:00
Peter Kokot 5433f02e79 Use default argument in AS_CASE instead of pattern 2024-06-11 11:26:52 +02:00