Skip to content

Commit d582bca

Browse files
committed
Merge tag 'php-8.4.8' into was-8.4.x
Tag for php-8.4.8
2 parents 90bbadf + c998c36 commit d582bca

File tree

90 files changed

+1324
-1000278
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

90 files changed

+1324
-1000278
lines changed

.github/actions/freebsd/action.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ runs:
2727
bzip2 \
2828
t1lib \
2929
gmp \
30-
tidyp \
3130
libsodium \
3231
libzip \
3332
libxml2 \

.github/workflows/nightly.yml

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ on:
2929
windows_version:
3030
required: true
3131
type: string
32+
skip_laravel:
33+
required: true
34+
type: boolean
3235
skip_symfony:
3336
required: true
3437
type: boolean
@@ -550,7 +553,7 @@ jobs:
550553
git clone "https://github.com/amphp/$repository.git" "amphp-$repository" --depth 1
551554
cd "amphp-$repository"
552555
git rev-parse HEAD
553-
php /usr/bin/composer install --no-progress --ignore-platform-reqs
556+
php /usr/bin/composer install --no-progress --ignore-platform-req=php+
554557
vendor/bin/phpunit || EXIT_CODE=$?
555558
if [ ${EXIT_CODE:-0} -gt 128 ]; then
556559
X=1;
@@ -559,12 +562,12 @@ jobs:
559562
done
560563
exit $X
561564
- name: Test Laravel
562-
if: ${{ !cancelled() }}
565+
if: ${{ !cancelled() && !inputs.skip_laravel }}
563566
run: |
564567
git clone https://github.com/laravel/framework.git --depth=1
565568
cd framework
566569
git rev-parse HEAD
567-
php /usr/bin/composer install --no-progress --ignore-platform-reqs
570+
php /usr/bin/composer install --no-progress --ignore-platform-req=php+
568571
# Hack to disable a test that hangs
569572
php -r '$c = file_get_contents("tests/Filesystem/FilesystemTest.php"); $c = str_replace("public function testSharedGet()", "#[\\PHPUnit\\Framework\\Attributes\\Group('"'"'skip'"'"')]\n public function testSharedGet()", $c); file_put_contents("tests/Filesystem/FilesystemTest.php", $c);'
570573
php vendor/bin/phpunit --exclude-group skip || EXIT_CODE=$?
@@ -581,7 +584,7 @@ jobs:
581584
git clone "https://github.com/reactphp/$repository.git" "reactphp-$repository" --depth 1
582585
cd "reactphp-$repository"
583586
git rev-parse HEAD
584-
php /usr/bin/composer install --no-progress --ignore-platform-reqs
587+
php /usr/bin/composer install --no-progress --ignore-platform-req=php+
585588
vendor/bin/phpunit || EXIT_CODE=$?
586589
if [ $[EXIT_CODE:-0} -gt 128 ]; then
587590
X=1;
@@ -595,7 +598,7 @@ jobs:
595598
git clone https://github.com/revoltphp/event-loop.git --depth=1
596599
cd event-loop
597600
git rev-parse HEAD
598-
php /usr/bin/composer install --no-progress --ignore-platform-reqs
601+
php /usr/bin/composer install --no-progress --ignore-platform-req=php+
599602
vendor/bin/phpunit || EXIT_CODE=$?
600603
if [ ${EXIT_CODE:-0} -gt 128 ]; then
601604
exit 1
@@ -606,7 +609,7 @@ jobs:
606609
git clone https://github.com/symfony/symfony.git --depth=1
607610
cd symfony
608611
git rev-parse HEAD
609-
php /usr/bin/composer install --no-progress --ignore-platform-reqs
612+
php /usr/bin/composer install --no-progress --ignore-platform-req=php+
610613
php ./phpunit install
611614
# Test causes a heap-buffer-overflow but I cannot reproduce it locally...
612615
php -r '$c = file_get_contents("src/Symfony/Component/HtmlSanitizer/Tests/HtmlSanitizerCustomTest.php"); $c = str_replace("public function testSanitizeDeepNestedString()", "/** @group skip */\n public function testSanitizeDeepNestedString()", $c); file_put_contents("src/Symfony/Component/HtmlSanitizer/Tests/HtmlSanitizerCustomTest.php", $c);'
@@ -627,15 +630,15 @@ jobs:
627630
git clone https://github.com/sebastianbergmann/phpunit.git --branch=main --depth=1
628631
cd phpunit
629632
git rev-parse HEAD
630-
php /usr/bin/composer install --no-progress --ignore-platform-reqs
633+
php /usr/bin/composer install --no-progress --ignore-platform-req=php+
631634
php ./phpunit || EXIT_CODE=$?
632635
if [ ${EXIT_CODE:-0} -gt 128 ]; then
633636
exit 1
634637
fi
635638
- name: 'Symfony Preloading'
636639
if: ${{ !cancelled() && !inputs.skip_symfony }}
637640
run: |
638-
php /usr/bin/composer create-project symfony/symfony-demo symfony_demo --no-progress --ignore-platform-reqs
641+
php /usr/bin/composer create-project symfony/symfony-demo symfony_demo --no-progress --ignore-platform-req=php+
639642
cd symfony_demo
640643
git rev-parse HEAD
641644
sed -i 's/PHP_SAPI/"cli-server"/g' var/cache/dev/App_KernelDevDebugContainer.preload.php
@@ -646,7 +649,7 @@ jobs:
646649
git clone https://github.com/WordPress/wordpress-develop.git wordpress --depth=1
647650
cd wordpress
648651
git rev-parse HEAD
649-
php /usr/bin/composer install --no-progress --ignore-platform-reqs
652+
php /usr/bin/composer install --no-progress --ignore-platform-req=php+
650653
cp wp-tests-config-sample.php wp-tests-config.php
651654
sed -i 's/youremptytestdbnamehere/test/g' wp-tests-config.php
652655
sed -i 's/yourusernamehere/root/g' wp-tests-config.php

.github/workflows/root.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ jobs:
5959
(((matrix.branch.version[0] == 8 && matrix.branch.version[1] >= 5) || matrix.branch.version[0] >= 9) && '24.04')
6060
|| '22.04' }}
6161
windows_version: ${{ ((matrix.branch.version[0] == 8 && matrix.branch.version[1] >= 4) || matrix.branch.version[0] >= 9) && '2022' || '2019' }}
62+
skip_laravel: ${{ matrix.branch.version[0] == 8 && matrix.branch.version[1] == 1 }}
6263
skip_symfony: ${{ matrix.branch.version[0] == 8 && matrix.branch.version[1] == 1 }}
6364
skip_wordpress: ${{ matrix.branch.version[0] == 8 && matrix.branch.version[1] == 1 }}
6465
secrets: inherit

EXTENSIONS

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -170,56 +170,56 @@ EXTENSION: dom
170170
PRIMARY MAINTAINER: Christian Stocker <[email protected]> (2003 - 2011)
171171
Rob Richards <[email protected]> (2003 - 2012)
172172
Marcus Börger <[email protected]> (2003 - 2006)
173-
Niels Dossche <[email protected]> (2023 - 2024)
173+
Niels Dossche <[email protected]> (2023 - 2025)
174174
MAINTENANCE: Maintained
175175
STATUS: Working
176176
SINCE: 5.0
177177
-------------------------------------------------------------------------------
178178
EXTENSION: simplexml
179179
PRIMARY MAINTAINER: Marcus Börger <[email protected]> (2003 - 2008)
180-
Niels Dossche <[email protected]> (2023 - 2024)
180+
Niels Dossche <[email protected]> (2023 - 2025)
181181
MAINTENANCE: Maintained
182182
STATUS: Working
183183
SINCE: 5.0
184184
-------------------------------------------------------------------------------
185185
EXTENSION: soap
186186
PRIMARY MAINTAINER: Dmitry Stogov <[email protected]> (2004 - 2018)
187-
Niels Dossche <[email protected]> (2024 - 2024)
187+
Niels Dossche <[email protected]> (2024 - 2025)
188188
MAINTENANCE: Odd fixes
189189
STATUS: Working
190190
-------------------------------------------------------------------------------
191191
EXTENSION: xml
192192
PRIMARY MAINTAINER: Thies C. Arntzen <[email protected]> (1999 - 2002)
193193
Rob Richards <[email protected]> (2003 - 2013)
194-
Niels Dossche <[email protected]> (2023 - 2024)
194+
Niels Dossche <[email protected]> (2023 - 2025)
195195
MAINTENANCE: Maintained
196196
STATUS: Working
197197
-------------------------------------------------------------------------------
198198
EXTENSION: libxml
199199
PRIMARY MAINTAINER: Rob Richards <[email protected]> (2003 - 2009)
200200
Christian Stocker <[email protected]> (2004 - 2011)
201-
Niels Dossche <[email protected]> (2023 - 2024)
201+
Niels Dossche <[email protected]> (2023 - 2025)
202202
MAINTENANCE: Maintained
203203
STATUS: Working
204204
-------------------------------------------------------------------------------
205205
EXTENSION: xmlreader
206206
PRIMARY MAINTAINER: Rob Richards <[email protected]> (2004 - 2010)
207207
Christian Stocker <[email protected]> (2004 - 2004)
208-
Niels Dossche <[email protected]> (2023 - 2024)
208+
Niels Dossche <[email protected]> (2023 - 2025)
209209
MAINTENANCE: Maintained
210210
STATUS: Working
211211
-------------------------------------------------------------------------------
212212
EXTENSION: xmlwriter
213213
PRIMARY MAINTAINER: Rob Richards <[email protected]> (2004 - 2010)
214214
Pierre-Alain Joye <[email protected]> (2005-2009)
215-
Niels Dossche <[email protected]> (2023 - 2024)
215+
Niels Dossche <[email protected]> (2023 - 2025)
216216
MAINTENANCE: Maintained
217217
STATUS: Working
218218
-------------------------------------------------------------------------------
219219
EXTENSION: xsl
220220
PRIMARY MAINTAINER: Christian Stocker <[email protected]> (2003 - 2011)
221221
Rob Richards <[email protected]> (2003 - 2010)
222-
Niels Dossche <[email protected]> (2023 - 2024)
222+
Niels Dossche <[email protected]> (2023 - 2025)
223223
MAINTENANCE: Maintained
224224
STATUS: Working
225225
SINCE: 5.0

NEWS

Lines changed: 68 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,73 @@
11
PHP NEWS
22
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
3-
?? ??? ????, PHP 8.4.7
3+
05 Jun 2025 PHP 8.4.8
4+
5+
- Core:
6+
. Fixed GH-18480 (array_splice with large values for offset/length arguments).
7+
(nielsdos/David Carlier)
8+
. Partially fixed GH-18572 (nested object comparisons leading to stack overflow).
9+
(David Carlier)
10+
. Fixed OSS-Fuzz #417078295. (nielsdos)
11+
. Fixed OSS-Fuzz #418106144. (nielsdos)
12+
13+
- Curl:
14+
. Fixed GH-18460 (curl_easy_setopt with CURLOPT_USERPWD/CURLOPT_USERNAME/
15+
CURLOPT_PASSWORD set the Authorization header when set to NULL).
16+
(David Carlier)
17+
18+
- Date:
19+
. Fixed bug GH-18076 (Since PHP 8, the date_sun_info() function returns
20+
inaccurate sunrise and sunset times, but other calculated times are
21+
correct) (JiriJozif).
22+
. Fixed bug GH-18481 (date_sunrise with unexpected nan value for the offset).
23+
(nielsdos/David Carlier)
24+
25+
- DOM:
26+
. Backport lexbor/lexbor#274. (nielsdos, alexpeattie)
27+
28+
- Intl:
29+
. Fix various reference issues. (nielsdos)
30+
31+
- LDAP:
32+
. Fixed bug GH-18529 (ldap no longer respects TLS_CACERT from ldaprc in
33+
ldap_start_tls()). (Remi)
34+
35+
- Opcache:
36+
. Fixed bug GH-18417 (Windows SHM reattachment fails when increasing
37+
memory_consumption or jit_buffer_size). (nielsdos)
38+
. Fixed bug GH-18297 (Exception not handled when jit guard is triggered).
39+
(Arnaud)
40+
. Fixed bug GH-18408 (Snapshotted poly_func / poly_this may be spilled).
41+
(Arnaud)
42+
. Fixed bug GH-18567 (Preloading with internal class alias triggers assertion
43+
failure). (nielsdos)
44+
. Fixed bug GH-18534 (FPM exit code 70 with enabled opcache and hooked
45+
properties in traits). (nielsdos)
46+
. Fix leak of accel_globals->key. (nielsdos)
47+
48+
- OpenSSL:
49+
. Fix missing checks against php_set_blocking() in xp_ssl.c. (nielsdos)
50+
51+
- SPL:
52+
. Fixed bug GH-18421 (Integer overflow with large numbers in LimitIterator).
53+
(nielsdos)
54+
55+
- Standard:
56+
. Fixed bug GH-17403 (Potential deadlock when putenv fails). (nielsdos)
57+
. Fixed bug GH-18400 (http_build_query type error is inaccurate). (nielsdos)
58+
. Fixed bug GH-18509 (Dynamic calls to assert() ignore zend.assertions).
59+
(timwolla)
60+
61+
- Windows:
62+
. Fix leak+crash with sapi_windows_set_ctrl_handler(). (nielsdos)
63+
64+
- Zip:
65+
. Fixed bug GH-18431 (Registering ZIP progress callback twice doesn't work).
66+
(nielsdos)
67+
. Fixed bug GH-18438 (Handling of empty data and errors in
68+
ZipArchive::addPattern). (nielsdos)
69+
70+
24 Apr 2025, PHP 8.4.7
471

572
- Core:
673
. Fixed bug GH-18038 (Lazy proxy calls magic methods twice). (Arnaud)

Zend/Optimizer/zend_optimizer.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1579,7 +1579,7 @@ void zend_foreach_op_array(zend_script *script, zend_op_array_func_t func, void
15791579
if (property->ce == ce && property->hooks) {
15801580
for (uint32_t i = 0; i < ZEND_PROPERTY_HOOK_COUNT; i++) {
15811581
zend_function *hook = hooks[i];
1582-
if (hook && hook->common.scope == ce) {
1582+
if (hook && hook->common.scope == ce && !(hooks[i]->op_array.fn_flags & ZEND_ACC_TRAIT_CLONE)) {
15831583
zend_foreach_op_array_helper(&hooks[i]->op_array, func, context);
15841584
}
15851585
}

Zend/tests/gh18572.phpt

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
--TEST--
2+
GH-18572: Nested object comparison leading to stack overflow
3+
--SKIPIF--
4+
<?php
5+
if (getenv('SKIP_ASAN')) die('skip as it fatally crash');
6+
?>
7+
--FILE--
8+
<?php
9+
10+
#[AllowDynamicProperties]
11+
class Node {
12+
public $next;
13+
// forcing dynamic property creation is key
14+
}
15+
16+
$first = new Node();
17+
$first->previous = $first;
18+
$first->next = $first;
19+
20+
$cur = $first;
21+
22+
for ($i = 0; $i < 50000; $i++) {
23+
$new = new Node();
24+
$new->previous = $cur;
25+
$cur->next = $new;
26+
$new->next = $first;
27+
$first->previous = $new;
28+
$cur = $new;
29+
}
30+
31+
try {
32+
// Force comparison manually to trigger zend_hash_compare
33+
$first == $cur;
34+
} catch(Error $e) {
35+
echo $e->getMessage(). PHP_EOL;
36+
}
37+
?>
38+
--EXPECTREGEX--
39+
(Maximum call stack size reached during object comparison|Nesting level too deep - recursive dependency\?)

Zend/tests/gh418106144.phpt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
--TEST--
2+
OSS-Fuzz #418106144
3+
--FILE--
4+
<?php
5+
6+
class Foo {
7+
function __toString(){}
8+
}
9+
function test($y=new Foo>''){
10+
var_dump();
11+
}
12+
try {
13+
test();
14+
} catch (TypeError $e) {
15+
echo $e->getMessage(), "\n";
16+
}
17+
18+
?>
19+
--EXPECT--
20+
Foo::__toString(): Return value must be of type string, none returned

Zend/tests/oss_fuzz_417078295.phpt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
--TEST--
2+
OSS-Fuzz #417078295
3+
--FILE--
4+
<?php
5+
6+
function foo() {
7+
$a = new stdClass();
8+
static $a = $a;
9+
debug_zval_dump($a);
10+
}
11+
12+
foo();
13+
14+
?>
15+
--EXPECT--
16+
object(stdClass)#1 (0) refcount(2){
17+
}

Zend/zend.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
#ifndef ZEND_H
2121
#define ZEND_H
2222

23-
#define ZEND_VERSION "4.4.7"
23+
#define ZEND_VERSION "4.4.8"
2424

2525
#define ZEND_ENGINE_3
2626

0 commit comments

Comments
 (0)