xref: /PHP-8.4/NEWS (revision ab595c07)
1PHP                                                                        NEWS
2|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
3?? ??? ????, PHP 8.4.0RC3
4
5- Cli:
6  . Fixed bug GH-16373 (Shebang is not skipped for router script in cli-server
7    started through shebang). (ilutov)
8
9- COM:
10  . Fixed out of bound writes to SafeArray data. (cmb)
11
12- Core:
13  . Fixed bug OSS-Fuzz #371445205 (Heap-use-after-free in attr_free).
14    (nielsdos)
15  . Fixed bug GH-16168 (php 8.1 and earlier crash immediately when compiled
16    with Xcode 16 clang on macOS 15). (nielsdos)
17  . Fixed bug GH-16371 (Assertion failure in Zend/zend_weakrefs.c:646). (Arnaud)
18
19- Curl:
20  . Fixed bug GH-16302 (CurlMultiHandle holds a reference to CurlHandle if
21    curl_multi_add_handle fails). (timwolla)
22  . Fixed bug GH-16359 (crash with curl_setopt* CURLOPT_WRITEFUNCTION
23    without null callback). (David Carlier)
24
25- DOM:
26  . Fixed bug GH-16316 (DOMXPath breaks when not initialized properly).
27    (nielsdos)
28  . Add missing hierarchy checks to replaceChild. (nielsdos)
29
30- EXIF:
31  . Fixed bug GH-16409 (Segfault in exif_thumbnail when not dealing with a
32    real file). (nielsdos, cmb)
33
34- FFI:
35  . Fixed bug GH-16397 (Segmentation fault when comparing FFI object).
36    (nielsdos)
37
38- GD:
39  . Fixed bug GH-16334 (imageaffine overflow on matrix elements).
40    (David Carlier)
41  . Fixed bug GH-16427 (Unchecked libavif return values). (cmb)
42
43- GMP:
44  . Fixed floating point exception bug with gmp_pow when using
45    large exposant values. (David Carlier).
46  . Fixed bug GH-16411 (gmp_export() can cause overflow). (cmb)
47
48- MBstring:
49  . Fixed bug GH-16361 (mb_substr overflow on start/length arguments).
50    (David Carlier)
51
52- Opcache:
53  . Fixed bug GH-16408 (Array to string conversion warning emitted in
54    optimizer). (ilutov)
55
56- OpenSSL:
57  . Fixed bug GH-16357 (openssl may modify member types of certificate arrays).
58    (cmb)
59
60- PHPDBG:
61  . Fixed bug GH-16174 (Empty string is an invalid expression for ev). (cmb)
62
63- Session:
64  . Fixed bug GH-16385 (Unexpected null returned by session_set_cookie_params).
65    (nielsdos)
66  . Fixed bug GH-16290 (overflow on cookie_lifetime ini value).
67    (David Carlier)
68
69- SOAP:
70  . Fixed bug GH-16318 (Recursive array segfaults soap encoding). (nielsdos)
71  . Fixed bug GH-16429 (Segmentation fault access null pointer in SoapClient).
72    (nielsdos)
73
74- Sockets:
75  . Fixed bug with overflow socket_recvfrom $length argument. (David Carlier)
76
77- SPL:
78  . Fixed bug GH-16337 (Use-after-free in SplHeap). (nielsdos)
79
80- Standard:
81  . Fixed bug GH-16293 (Failed assertion when throwing in assert() callback with
82    bail enabled). (ilutov)
83
84- XMLReader:
85  . Fixed bug GH-16292 (Segmentation fault in ext/xmlreader/php_xmlreader.c).
86    (nielsdos)
87
88- Zlib:
89  . Fixed bug GH-16326 (Memory management is broken for bad dictionaries.)
90    (cmb)
91
9210 Oct 2024, PHP 8.4.0RC2
93
94- CGI:
95  . Fixed bug GHSA-p99j-rfp4-xqvq (Bypass of CVE-2024-4577, Parameter Injection
96    Vulnerability). (CVE-2024-8926) (nielsdos)
97  . Fixed bug GHSA-94p6-54jq-9mwp (cgi.force_redirect configuration is
98    bypassable due to the environment variable collision). (CVE-2024-8927)
99    (nielsdos)
100
101- Calendar:
102  . Fixed GH-16240: jdtounix overflow on argument value. (David Carlier)
103  . Fixed GH-16241: easter_days/easter_date overflow on year argument.
104    (David Carlier)
105  . Fixed GH-16263: jddayofweek overflow. (cmb)
106  . Fixed GH-16234: jewishtojd overflow. (nielsdos)
107
108- CLI:
109  . Fixed bug GH-16137: duplicate http headers when set several times by
110    the client. (David Carlier)
111
112- Core:
113  . Fixed bug GH-16040 (Use-after-free of object released in hook). (ilutov)
114  . Fixed bug GH-16054 (Segmentation fault when resizing hash table iterator
115    list while adding). (nielsdos)
116  . Fixed bug GH-15905 (Assertion failure for TRACK_VARS_SERVER). (cmb)
117  . Fixed bug GH-15907 (Failed assertion when promoting Serialize deprecation to
118    exception). (ilutov)
119  . Fixed bug GH-15851 (Segfault when printing backtrace during cleanup of
120    nested generator frame). (ilutov)
121  . Fixed bug GH-16026 (Reuse of dtor fiber during shutdown). (Arnaud)
122  . Fixed bug GH-15999 (zend_std_write_property() assertion failure with lazy
123    objects). (Arnaud)
124  . Fixed bug GH-15866 (Core dumped in Zend/zend_generators.c). (Arnaud)
125  . Fixed bug GH-15960 (Foreach edge cases with lazy objects). (Arnaud)
126  . Fixed bug GH-16188 (Assertion failure in Zend/zend_exceptions.c). (Arnaud)
127  . Fixed bug GH-16233 (Observer segfault when calling user function in
128    internal function via trampoline). (nielsdos)
129  . Fixed bug GH-16185 (Various hooked object iterator issues). (ilutov)
130
131- DOM:
132  . Fixed bug GH-16039 (Segmentation fault (access null pointer) in
133    ext/dom/parentnode/tree.c). (nielsdos)
134  . Fixed bug GH-16149 (Null pointer dereference in
135    DOMElement->getAttributeNames()). (nielsdos)
136  . Fixed bug GH-16151 (Assertion failure in ext/dom/parentnode/tree.c).
137    (nielsdos)
138  . Fixed bug GH-16190 (Using reflection to call Dom\Node::__construct
139    causes assertion failure). (nielsdos)
140  . Fixed bug GH-16150 (Use after free in php_dom.c). (nielsdos)
141  . Fixed bug GH-16152 (Memory leak in DOMProcessingInstruction/DOMDocument).
142    (nielsdos)
143  . Fix edge-case in DOM parsing decoding. (nielsdos)
144
145- FPM:
146  . Fixed bug GHSA-865w-9rf3-2wh5 (Logs from childrens may be altered).
147    (CVE-2024-9026) (Jakub Zelenka)
148
149- JSON:
150  . Fixed bug GH-15168 (stack overflow in json_encode()). (nielsdos)
151
152- GD:
153  . Fixed bug GH-16232 (bitshift overflow on wbmp file content reading /
154    fix backport from upstream). (David Carlier)
155  . Fixed bug GH-12264 (overflow/underflow on imagerotate degrees value)
156    (David Carlier)
157  . Fixed bug GH-16274 (imagescale underflow on RBG channels /
158    fix backport from upstream). (David Carlier)
159
160- LDAP:
161  . Fixed bug GH-16032 (Various NULL pointer dereferencements in
162    ldap_modify_batch()). (Girgias)
163  . Fixed bug GH-16101 (Segfault in ldap_list(), ldap_read(), and ldap_search()
164    when LDAPs array is not a list). (Girgias)
165  . Fix GH-16132 (php_ldap_do_modify() attempts to free pointer not allocated
166    by ZMM.). (Girgias)
167  . Fix GH-16136 (Memory leak in php_ldap_do_modify() when entry is not a
168    proper dictionary). (Girgias)
169
170- MBString:
171  . Fixed bug GH-16261 (Reference invariant broken in mb_convert_variables()).
172    (nielsdos)
173
174- Opcache:
175  . Fixed bug GH-16009 (Segmentation fault with frameless functions and
176    undefined CVs). (nielsdos)
177  . Fixed bug GH-16186 (Assertion failure in Zend/zend_operators.c). (Arnaud)
178
179- PCRE:
180  . Fixed bug GH-16184 (UBSan address overflowed in ext/pcre/php_pcre.c).
181    (nielsdos)
182
183- PHPDBG:
184  . Fixed bug GH-16181 (phpdbg: exit in exception handler reports fatal error).
185    (cmb)
186  . Fixed bug GH-16041 (Support stack limit in phpdbg). (Arnaud)
187
188- Reflection:
189  . Fixed bug GH-16122 (The return value of ReflectionFunction::getNamespaceName()
190    and ReflectionFunction::inNamespace() for closures is incorrect). (timwolla)
191  . Fixed bug GH-16187 (Assertion failure in ext/reflection/php_reflection.c).
192    (DanielEScherzer)
193  . Fixed bug GH-16162 (No ReflectionProperty::IS_VIRTUAL) (DanielEScherzer)
194
195- SAPI:
196  . Fixed bug GHSA-9pqp-7h25-4f32 (Erroneous parsing of multipart form data).
197    (CVE-2024-8925) (Arnaud)
198
199- SOAP:
200  . Fixed bug GH-16237 (Segmentation fault when cloning SoapServer). (nielsdos)
201  . Fix Soap leaking http_msg on error. (nielsdos)
202  . Fixed bug GH-16256 (Assertion failure in ext/soap/php_encoding.c:460).
203    (nielsdos)
204  . Fixed bug GH-16259 (Soap segfault when classmap instantiation fails).
205    (nielsdos)
206
207- Standard:
208  . Fixed bug GH-16053 (Assertion failure in Zend/zend_hash.c). (Arnaud)
209  . Fixed bug GH-15169 (stack overflow when var serialization in
210    ext/standard/var). (nielsdos)
211
212- Windows:
213  . Fixed bug GH-16199 (GREP_HEADER() is broken). (Peter Kokot)
214
21526 Sep 2024, PHP 8.4.0RC1
216
217- BcMath:
218  . bcpow() performance improvement. (Jorg Sowa)
219  . ext/bcmath: Check for scale overflow. (SakiTakamachi)
220  . [RFC] ext/bcmath: Added bcdivmod. (SakiTakamachi)
221  . Fix GH-15968 (Avoid converting objects to strings in operator calculations).
222    (SakiTakamachi)
223
224- Curl:
225  . Added CURLOPT_DEBUGFUNCTION as a Curl option. (Ayesh Karunaratne)
226
227- Debugging:
228  . Fixed bug GH-15923 (GDB: Python Exception <class 'TypeError'>:
229    exceptions must derive from BaseException). (nielsdos)
230
231- DOM:
232  . Fix XML serializer errata: xmlns="" serialization should be allowed.
233    (nielsdos)
234  . Fixed bug GH-15910 (Assertion failure in ext/dom/element.c). (nielsdos)
235  . Fix unsetting DOM properties. (nielsdos)
236
237- MBString:
238  . Fixed bug GH-15824 (mb_detect_encoding(): Argument $encodings contains
239    invalid encoding "UTF8"). (Yuya Hamada)
240  . Updated Unicode data tables to Unicode 16.0. (Ayesh Karunaratne)
241
242- Opcache:
243  . Fixed bug GH-15657 (Segmentation fault in dasm_x86.h). (nielsdos)
244  . Added opcache_jit_blacklist() function. (Bob)
245
246- PCRE:
247  . Fixed GH-16189 (underflow on offset argument). (David Carlier)
248
249- PHPDBG:
250  . Fixed bug GH-15901 (phpdbg: Assertion failure on i funcs). (cmb)
251
252- PCRE:
253  . Fix UAF issues with PCRE after request shutdown. (nielsdos)
254
255- PDO_MYSQL:
256  . Fixed GH-15949 (PDO_MySQL not properly quoting PDO_PARAM_LOB binary
257    data). (mbeccati, lcobucci)
258
259- PDO_PGSQL:
260  . Fixed GH-15986 (Double-free due to Pdo\Pgsql::setNoticeCallback()). (cmb,
261    nielsdos)
262  . Fixed GH-12940 (Using PQclosePrepared when available instead of
263    the DEALLOCATE command to free statements resources). (David Carlier)
264
265- Reflection:
266  . Add missing ReflectionProperty::hasHook[s]() methods. (ilutov)
267  . Add missing ReflectionProperty::isFinal() method. (ilutov)
268
269- SimpleXML:
270  . Fixed bug GH-15837 (Segmentation fault in ext/simplexml/simplexml.c).
271    (nielsdos)
272
273- Sockets:
274  . Fixed bug GH-16267 (socket_strerror overflow on errno argument).
275    (David Carlier)
276
277- SOAP:
278  . Fixed bug #73182 (PHP SOAPClient does not support stream context HTTP
279    headers in array form). (nielsdos)
280  . Fixed bug #62900 (Wrong namespace on xsd import error message). (nielsdos)
281  . Fixed bug GH-15711 (SoapClient can't convert BackedEnum to scalar value).
282    (nielsdos)
283
284- SPL:
285  . Fixed bug GH-15918 (Assertion failure in ext/spl/spl_fixedarray.c).
286    (nielsdos)
287
288- Standard:
289  . Add support for backed enums in http_build_query(). (ilutov)
290  . Fixed bug GH-15982 (Assertion failure with array_find when references are
291    involved). (nielsdos)
292
293- Streams:
294  . Fixed bugs GH-15908 and GH-15026 (leak / assertion failure in streams.c).
295    (nielsdos)
296  . Fixed bug GH-15980 (Signed integer overflow in main/streams/streams.c).
297    (cmb)
298
299- TSRM:
300  . Prevent closing of unrelated handles. (cmb)
301
302- Windows:
303  . Fixed minimal Windows version. (cmb)
304
305- Zip:
306  . Added ZipArchive::ER_TRUNCATED_ZIP added in libzip 1.11. (Remi)
307
30812 Sep 2024, PHP 8.4.0beta5
309
310- BCMath:
311  . Fixed LONG_MAX in BCMath ext. (Saki Takamachi)
312  . Fixed bcdiv() div by one. (Saki Takamachi)
313  . [RFC] Support object types in BCMath. (Saki Takamachi)
314
315- Core:
316  . Fixed bug GH-15330 (Do not scan generator frames more than once). (Arnaud)
317  . Fixed bug GH-15644 (Asymmetric visibility doesn't work with hooks). (ilutov)
318  . Implemented lazy objects RFC. (Arnaud)
319  . Fixed bug GH-15686 (Building shared iconv with external iconv library).
320    (Peter Kokot, zeriyoshi)
321  . Fixed missing error when adding asymmetric visibility to unilateral virtual
322    property. (ilutov)
323  . Fixed bug GH-15693 (Unnecessary include in main.c bloats binary).
324    (nielsdos)
325  . Fixed bug GH-15731 (AllowDynamicProperties validation should error on
326    enums). (DanielEScherzer)
327  . Fixed uninitialized lineno in constant AST of internal enums. (ilutov)
328
329- Curl:
330  . The CURLOPT_DNS_USE_GLOBAL_CACHE option is now silently ignored. (Ayesh Karunaratne)
331
332- DOM:
333  . Fixed bug GH-13988 (Storing DOMElement consume 4 times more memory in
334    PHP 8.1 than in PHP 8.0). (nielsdos)
335  . Fixed bug GH-15654 (Signed integer overflow in ext/dom/nodelist.c).
336    (nielsdos)
337
338- GD:
339  . Added gdImageClone to bundled libgd. (David Carlier)
340
341- Hash:
342  . Fixed bug GH-15742 (php_hash_sha.h incompatible with C++). (cmb)
343
344- OpenSSL:
345  . Implement GH-13514 PASSWORD_ARGON2 from OpenSSL 3.2. (Remi)
346
347- PDO:
348  . The internal header php_pdo_int.h is no longer installed; it is not
349    supposed to be used by PDO drivers. (cmb)
350
351- PDO_Firebird:
352  . Fixed GH-15604 (Always make input parameters nullable). (sim1984)
353
354- Reflection:
355  . Fixed bug GH-15718 (Segfault on ReflectionProperty::get{Hook,Hooks}() on
356    dynamic properties). (DanielEScherzer)
357  . Fixed bug GH-15694 (ReflectionProperty::isInitialized() is incorrect for
358    hooked properties). (ilutov)
359
360- SOAP:
361  . Fixed bug #61525 (SOAP functions require at least one space after HTTP
362    header colon). (nielsdos)
363  . Implement request #47317 (SoapServer::__getLastResponse()). (nielsdos)
364
365- Standard:
366  . Fixed bug GH-15552 (Signed integer overflow in ext/standard/scanf.c). (cmb)
367  . Implemented GH-15685 (improve proc_open error reporting on Windows). (cmb)
368
369- Streams:
370  . Fixed bug GH-15628 (php_stream_memory_get_buffer() not zero-terminated).
371    (cmb)
372
37329 Aug 2024, PHP 8.4.0beta4
374
375- Core:
376  . Fixed bug GH-15408 (MSan false-positve on zend_max_execution_timer).
377    (zeriyoshi)
378  . Fixed bug GH-15438 (Hooks on constructor promoted properties without
379    visibility are ignored). (ilutov)
380  . Fixed bug GH-15419 (Missing readonly+hook incompatibility check for readonly
381    classes). (ilutov)
382  . Fixed bug GH-15187 (Various hooked object iterator issues). (ilutov)
383  . Fixed bug GH-15456 (Crash in get_class_vars() on virtual properties).
384    (ilutov)
385  . Fixed bug GH-15501 (Windows HAVE_<header>_H macros defined to 1 or
386    undefined). (Peter Kokot)
387  . Fixed bug GH-15565 (--disable-ipv6 during compilation produces error
388    EAI_SYSTEM not found). (nielsdos)
389  . Implemented asymmetric visibility for properties. (ilutov)
390
391- Curl:
392  . Added CURLOPT_PREREQFUNCTION Curl option to set a custom callback
393    after the connection is established, but before the request is
394    performed. (Ayesh Karunaratne)
395  . Added CURLOPT_SERVER_RESPONSE_TIMEOUT, which was formerly known as
396    CURLOPT_FTP_RESPONSE_TIMEOUT. (Ayesh Karunaratne)
397
398- Date:
399  . Fixed bug GH-13773 (DatePeriod not taking into account microseconds for end
400    date). (Mark Bennewitz, Derick)
401
402- DOM:
403  . Fixed bug GH-15551 (Segmentation fault (access null pointer) in
404    ext/dom/xml_common.h). (nielsdos)
405  . Fixed bug GH-15570 (Segmentation fault (access null pointer) in
406    ext/dom/html5_serializer.c). (nielsdos)
407
408- FPM:
409  . Added memory peak to the scoreboard / status page. (Flávio Heleno)
410
411- MySQLnd:
412  . Fixed bug GH-15432 (Heap corruption when querying a vector). (cmb,
413    Kamil Tekiela)
414
415- Opcache:
416  . Fixed bug GH-15490 (Building of callgraph modifies preloaded symbols).
417    (ilutov)
418  . Fixed bug GH-15178 (Assertion in tracing JIT on hooks). (ilutov)
419
420- PDO_MYSQL:
421  . mysqlnd: support ER_CLIENT_INTERACTION_TIMEOUT. (Appla)
422
423- Session:
424  . Emit warnings for non-positive values of session.gc_divisor and negative values
425    of session.gc_probability. (Jorg Sowa)
426
427- Standard:
428  . The "allowed_classes" option for unserialize() now throws TypeErrors and
429    ValueErrors	if it is not an	array of class names. (Girgias)
430
431- Streams:
432  . Fixed bug GH-14930 (Custom stream wrapper dir_readdir output truncated to
433    255 characters in PHP 8.3). (Joe Cai)
434
435
43615 Aug 2024, PHP 8.4.0beta3
437
438- Core:
439  . Exiting a namespace now clears seen symbols. (ilutov)
440  . The exit (and die) language constructs now behave more like a function.
441    They can be passed liked callables, are affected by the strict_types
442    declare statement, and now perform the usual type coercions instead of
443    casting any non-integer value to a string.
444    As such, passing invalid types to exit/die may now result in a TypeError
445    being thrown. (Girgias)
446
447- CURL:
448  . Added CURLOPT_TCP_KEEPCNT to set the number of probes to send before
449    dropping the connection. (David Carlier)
450
451- Hash:
452  . Fix GH-15384 (Build fails on Alpine / Musl for amd64). (timwolla)
453
454- Sockets:
455  . Added SO_BINDTOIFINDEX to bind a socket to an interface index.
456    (David Carlier)
457
458- Standard:
459  . php_uname() now throws ValueErrors on invalid inputs. (Girgias)
460
46115 Aug 2024, PHP 8.4.0beta1
462
463- Core:
464  . Updated build system scripts config.guess to 2024-07-27 and config.sub to
465    2024-05-27. (Peter Kokot)
466  . Fixed bug GH-15240 (Infinite recursion in trait hook). (ilutov)
467  . Fixed bug GH-15140 (Missing variance check for abstract set with asymmetric
468    type). (ilutov)
469  . Fixed bug GH-15181 (Disabled output handler is flushed again). (cmb)
470  . Passing E_USER_ERROR to trigger_error() is now deprecated. (Girgias)
471  . Fixed bug GH-15292 (Dynamic AVX detection is broken for MSVC). (nielsdos)
472  . Using "_" as a class name is now deprecated. (Girgias)
473
474- Curl:
475  . Added constants CURL_HTTP_VERSION_3 (libcurl 7.66) and CURL_HTTP_VERSION_3ONLY
476    (libcurl 7.88) as options for CURLOPT_HTTP_VERSION (Ayesh Karunaratne)
477
478- Date:
479  . Constants SUNFUNCS_RET_TIMESTAMP, SUNFUNCS_RET_STRING, and SUNFUNCS_RET_DOUBLE
480    are now deprecated. (Jorg Sowa)
481
482- DBA:
483  . Passing null or false to dba_key_split() is deprecated. (Grigias)
484
485- DOM:
486  . Fixed bug GH-15192 (Segmentation fault in dom extension
487    (html5_serializer)). (nielsdos)
488  . Deprecated DOM_PHP_ERR constant. (nielsdos)
489  . Removed DOMImplementation::getFeature(). (nielsdos)
490  . Fixed bug GH-15331 (Element::$substitutedNodeValue test failed). (nielsdos)
491
492- Hash:
493  . Deprecated passing incorrect data types for options to ext/hash functions.
494    (nielsdos)
495  . Added SSE2 and SHA-NI implementation of SHA-256. (timwolla, Colin Percival,
496    Graham Percival)
497
498- Mysqli:
499  . The mysqli_ping() function and mysqli::ping() method are now deprecated,
500    as the reconnect feature was removed in PHP 8.2. (Kamil Tekiela)
501  . The mysqli_kill() function and mysqli::kill() method are now deprecated.
502    If this functionality is needed a SQL "KILL" command can be used instead.
503    (Kamil Tekiela)
504  . The mysqli_refresh() function and mysqli::refresh() method are now deprecated.
505    If this functionality is needed a SQL "FLUSH" command can be used instead.
506    (Kamil Tekiela)
507  . Passing explicitly the $mode parameter to mysqli_store_result() has been
508    deprecated. As the MYSQLI_STORE_RESULT_COPY_DATA constant was only used in
509    conjunction with this function it has also been deprecated. (Girgias)
510
511- PDO_Firebird:
512  . Support proper formatting of time zone types. (sim1984)
513
514- PHPDBG:
515  . array out of bounds, stack overflow handled for segfault handler on windows.
516    (David Carlier)
517
518- Random:
519  . lcg_value() is now deprecated. (timwolla)
520
521- Readline:
522  . Fixed bug #51558 (Shared readline build fails). (Peter Kokot)
523
524- Session:
525  . INI settings session.sid_length and session.sid_bits_per_character are now
526    deprecated. (timwolla)
527
528- SOAP:
529  . Passing an int to SoapServer::addFunction() is now deprecated.
530    If all PHP functions need to be provided flatten the array returned by
531    get_defined_functions(). (Girgias)
532  . The SOAP_FUNCTIONS_ALL constant is now deprecated. (Girgias)
533
534- Sockets:
535  . Added IP_PORTRANGE* constants for BSD systems to control ephemeral port
536    ranges. (David Carlier)
537  . Added SOCK_NONBLOCK/SOCK_CLOEXEC constants for socket_create and
538    socket_create_pair to apply O_NONBLOCK/O_CLOEXEC flags to the
539    newly created sockets. (David Carlier)
540
541- SPL:
542  . The SplFixedArray::__wakeup() method has been deprecated as it implements
543    __serialize() and __unserialize() which need to be overwritten instead.
544    (TysonAndre)
545  . Passing a non-empty string for the $escape parameter of:
546    - SplFileObject::setCsvControl()
547    - SplFileObject::fputcsv()
548    - SplFileObject::fgetcsv()
549    is now deprecated. (Girgias)
550
551- Standard:
552  . Unserializing the uppercase 'S' tag is now deprecated. (timwolla)
553  . Enables crc32 auxiliary detection on OpenBSD. (David Carlier)
554  . Passing a non-empty string for the $escape parameter of:
555    - fputcsv()
556    - fgetcsv()
557    - str_getcsv()
558    is now deprecated. (Girgias)
559  . The str_getcsv() function now throws ValueErrors when the $separator and
560    $enclosure arguments are not one byte long, or if the $escape is not one
561    byte long or the empty string. This aligns the behaviour to be identical
562    to that of fputcsv() and fgetcsv(). (Girgias)
563
564- Streams:
565  . Implemented GH-15155 (Stream context is lost when custom stream wrapper is
566    being filtered). (Quentin Dreyer)
567
568- XML:
569  . The xml_set_object() function has been deprecated. (Girgias)
570  . Passing non-callable strings to the xml_set_*_handler() functions is now
571    deprecated. (Girgias)
572
57301 Aug 2024, PHP 8.4.0alpha4
574
575- GMP:
576  . RFC: Change GMP bool cast behavior. (Saki Takamachi)
577
57801 Aug 2024, PHP 8.4.0alpha3
579
580- Core:
581  . Fix GH-14978 (The xmlreader extension phpize build). (Peter Kokot)
582  . Throw Error exception when encountering recursion during comparison, rather
583    than fatal error. (ilutov)
584  . Added missing cstddef include for C++ builds. (cmb)
585  . Fixed bug GH-15108 (Segfault when destroying generator during shutdown).
586    (Arnaud)
587  . Fixed bug GH-15275 (Crash during GC of suspended generator delegate).
588    (Arnaud)
589
590- BCMath:
591  . Adjust bcround()'s $mode parameter to only accept the RoundingMode
592    enum. (timwolla, saki)
593
594- DOM:
595  . Fix trampoline leak in xpath callables. (nielsdos)
596  . Throw instead of silently failing when creating a too long text node in
597    (DOM)ParentNode and (DOM)ChildNode. (nielsdos)
598
599- FPM:
600  . /dev/poll events.mechanism for Solaris/Illumos setting had been retired.
601    (David Carlier)
602
603- GMP:
604  . The GMP class is now final and cannot be extended anymore. (Girgias)
605
606- Intl:
607  . Added SpoofChecker::setAllowedChars to set unicode chars ranges.
608    (David Carlier)
609  . Fixed bug GH-15087 (IntlChar::foldCase()'s $option is not optional). (cmb)
610
611- Opcache:
612  . Fixed bug GH-13775 (Memory leak possibly related to opcache SHM placement).
613    (Arnaud, nielsdos)
614
615- OpenSSL:
616  . Bumped minimum required OpenSSL version to 1.1.0. (cmb)
617
618- PDO_FIREBIRD:
619  . Added Pdo\Firebird::ATTR_API_VERSION. (SakiTakamachi)
620  . Added getApiVersion() and removed from getAttribute().
621    (SakiTakamachi)
622  . Supported Firebird 4.0 datatypes. (sim1984)
623
624- PGSQL:
625  . pg_convert/pg_insert/pg_update/pg_delete ; regexes are now cached.
626    (David Carlier)
627
628- Random:
629  . Fixed bug GH-15094 (php_random_default_engine() is not C++ conforming).
630    (cmb)
631
632- Readline:
633  . Fixed readline_info, rl_line_buffer_length/rl_len globals on update.
634    (David Carlier)
635
636- Standard:
637  . Fix references in request_parse_body() options array. (nielsdos)
638  . Add RoundingMode enum. (timwolla, saki)
639
640- Tidy:
641  . Failures in the constructor now throw exceptions rather than emitting
642    warnings and having a broken object. (nielsdos)
643  . Add tidyNode::getNextSibling() and tidyNode::getPreviousSibling().
644    (nielsdos)
645
646- XMLReader:
647  . Fixed bug GH-15123 (var_dump doesn't actually work on XMLReader).
648    (nielsdos)
649
650- XSL:
651  . Fix trampoline leak in xpath callables. (nielsdos)
652
65318 Jul 2024, PHP 8.4.0alpha2
654
655- Core:
656  . Fixed bug GH-14801 (Fix build for armv7). (andypost)
657  . Implemented property hooks RFC. (ilutov)
658
659- DOM:
660  . Improve support for template elements. (nielsdos)
661
662- GD:
663  . Check overflow/underflow for imagescale/imagefilter. (David Carlier)
664
665- LibXML:
666  . Added LIBXML_NO_XXE constant. (nielsdos)
667
668- Opcache:
669  . Fixed bug GH-14873 (PHP 8.4 min function fails on typed integer).
670    (nielsdos)
671
672- PDO:
673  . Fixed bug GH-14792 (Compilation failure on pdo_* extensions).
674    (Peter Kokot)
675
676- Standard:
677  . Change highlight_string() and print_r() return type to string|true. (Ayesh)
678
679- Windows:
680  . Update the icon of the Windows executables, e.g. php.exe. (Ayesh,
681    Nurudin Imširović)
682
683- XML:
684  . Fixed bug #81481 (xml_get_current_byte_index limited to 32-bit numbers on
685    64-bit builds). (nielsdos)
686
68704 Jul 2024, PHP 8.4.0alpha1
688
689- BCMath:
690  . [RFC] Add bcfloor, bcceil and bcround to BCMath. (Saki Takamachi)
691  . Improve performance. (Saki Takamachi, nielsdos)
692
693- Core:
694  . Added zend_call_stack_get implementation for NetBSD, DragonFlyBSD,
695    Solaris and Haiku. (David Carlier)
696  . Enabled ifunc checks on FreeBSD from the 12.x releases. (Freaky)
697  . Changed the type of PHP_DEBUG and PHP_ZTS constants to bool. (haszi)
698  . Fixed bug GH-13142 (Undefined variable name is shortened when contains \0).
699    (nielsdos)
700  . Fixed bug GH-13178 (Iterator positions incorrect when converting packed
701    array to hashed). (ilutov)
702  . Fixed zend fiber build for solaris default mode (32 bits). (David Carlier)
703  . Fixed zend call stack size for macOs/arm64. (David Carlier)
704  . Added support for Zend Max Execution Timers on FreeBSD. (Kévin Dunglas)
705  . Ensure fiber stack is not backed by THP. (crrodriguez)
706  . Implement GH-13609 (Dump wrapped object in WeakReference class). (nielsdos)
707  . Added sparc64 arch assembly support for zend fiber. (Claudio Jeker)
708  . Fixed GH-13581 no space available for TLS on NetBSD. (Paul Ripke)
709  . Added fiber Sys-V loongarch64 support. (qiangxuhui)
710  . Adjusted closure names to include the parent function's name. (timwolla)
711  . Improve randomness of uploaded file names and files created by tempnam().
712    (Arnaud)
713  . Added gc and shutdown callbacks to zend_mm custom handlers.
714    (Florian Engelhardt)
715  . Fixed bug GH-14650 (Compute the size of pages before allocating memory).
716    (Julien Voisin)
717  . Fixed bug GH-11928 (The --enable-re2c-cgoto doesn't add the -g flag).
718    (Peter Kokot)
719  . Added the #[\Deprecated] attribute. (beberlei, timwolla)
720  . Fixed GH-11389 (Allow suspending fibers in destructors). (Arnaud, trowski)
721
722- Curl:
723  . Deprecated the CURLOPT_BINARYTRANSFER constant. (divinity76)
724  . Bumped required libcurl version to 7.61.0. (Ayesh)
725  . Added feature_list key to the curl_version() return value. (Ayesh)
726
727- Date:
728  . Added DateTime[Immutable]::createFromTimestamp. (Marc Bennewitz)
729  . Added DateTime[Immutable]::[get|set]Microsecond. (Marc Bennewitz)
730
731- DOM:
732  . Added DOMNode::compareDocumentPosition(). (nielsdos)
733  . Implement #53655 (Improve speed of DOMNode::C14N() on large XML documents).
734    (nielsdos)
735  . Fix cloning attribute with namespace disappearing namespace. (nielsdos)
736  . Implement DOM HTML5 parsing and serialization RFC. (nielsdos)
737  . Fix DOMElement->prefix with empty string creates bogus prefix. (nielsdos)
738  . Handle OOM more consistently. (nielsdos)
739  . Implemented "Improve callbacks in ext/dom and ext/xsl" RFC. (nielsdos)
740  . Added DOMXPath::quote() static method. (divinity76)
741  . Implemented opt-in ext/dom spec compliance RFC. (nielsdos)
742  . Fixed bug #79701 (getElementById does not correctly work with duplicate
743    definitions). (nielsdos)
744  . Implemented "New ext-dom features in PHP 8.4" RFC. (nielsdos)
745  . Fixed GH-14698 (segfault on DOM node dereference). (David Carlier)
746
747- Fileinfo:
748  . Update to libmagic 5.45. (nielsdos)
749  . Fixed bug #65106 (PHP fails to compile ext/fileinfo). (Guillaume Outters)
750
751- FPM:
752  . Implement GH-12385 (flush headers without body when calling flush()).
753    (nielsdos)
754  . Added DragonFlyBSD system to the list which set FPM_BACKLOG_DEFAULT
755    to SOMAXCONN. (David Carlier)
756
757- FTP:
758  . Removed the deprecated inet_ntoa call support. (David Carlier)
759  . Fixed bug #63937 (Upload speed 10 times slower with PHP). (nielsdos)
760
761- GD:
762  . Fix parameter numbers and missing alpha check for imagecolorset().
763    (Giovanni Giacobbi)
764  . imagepng/imagejpeg/imagewep/imageavif now throw an exception on
765    invalid quality parameter. (David Carlier)
766
767- Gettext:
768  . bind_textdomain_codeset, textdomain and d(*)gettext functions
769    now throw an exception on empty domain. (David Carlier)
770
771- Hash:
772  . Changed return type of hash_update() to true. (nielsdos)
773  . Added HashContext::__debugInfo(). (timwolla)
774
775- IMAP:
776  . Moved to PECL. (Derick Rethans)
777
778- Intl:
779  . Added IntlDateFormatter::PATTERN constant. (David Carlier)
780  . Fixed Numberformatter::__construct when the locale is invalid, now
781    throws an exception. (David Carlier)
782  . Added NumberFormatter::ROUND_TOWARD_ZERO and ::ROUND_AWAY_FROM_ZERO as
783    aliases for ::ROUND_DOWN and ::ROUND_UP. (Jorg Sowa)
784  . Added NumberFormatter::ROUND_HALFODD. (Ayesh Karunaratne)
785  . Added PROPERTY_IDS_UNARY_OPERATOR, PROPERTY_ID_COMPAT_MATH_START and
786    PROPERTY_ID_COMPAT_MATH_CONTINUE constants. (David Carlier)
787  . Added IntlDateFormatter::getIanaID/intltz_get_iana_id method/function.
788    (David Carlier)
789  . Set to C++17 standard for icu 74 and onwards. (David Carlier)
790  . resourcebundle_get(), ResourceBundle::get(), and accessing offsets on a
791    ResourceBundle object now throw:
792    - TypeError for invalid offset types
793    - ValueError for an empty string
794    - ValueError if the integer index does not fit in a signed 32 bit integer
795  . ResourceBundle::get() now has a tentative return type of:
796    ResourceBundle|array|string|int|null
797  . Added the new Grapheme function grapheme_str_split. (youkidearitai)
798  . Added IntlDateFormatter::parseToCalendar. (David Carlier)
799
800- LDAP:
801  . Added LDAP_OPT_X_TLS_PROTOCOL_MAX/LDAP_OPT_X_TLS_PROTOCOL_TLS1_3
802    constants. (StephenWall)
803
804- LibXML:
805  . Added LIBXML_RECOVER constant. (nielsdos)
806  . libxml_set_streams_context() now throws immediately on an invalid context
807    instead of at the use-site. (nielsdos)
808
809- MBString:
810  . Added mb_trim, mb_ltrim and mb_rtrim. (Yuya Hamada)
811  . Added mb_ucfirst and mb_lcfirst. (Yuya Hamada)
812  . Updated Unicode data tables to Unicode 15.1. (Ayesh Karunaratne)
813
814- MySQLnd:
815  . Fixed bug GH-13440 (PDO quote bottleneck). (nielsdos)
816  . Fixed bug GH-10599 (Apache crash on Windows when using a self-referencing
817    anonymous function inside a class with an active mysqli connection).
818    (nielsdos)
819
820- Opcache:
821  . Added large shared segments support for FreeBSD. (David Carlier)
822  . If JIT is enabled, PHP will now exit with a fatal error on startup in case
823    of JIT startup initialization issues. (danog)
824  . Increased the maximum value of opcache.interned_strings_buffer to 32767 on
825    64bit archs. (Arnaud)
826  . Fixed bug GH-13834 (Applying non-zero offset 36 to null pointer in
827    zend_jit.c). (nielsdos)
828  . Fixed bug GH-14361 (Deep recursion in zend_cfg.c causes segfault).
829    (nielsdos)
830
831- OpenSSL:
832  . Fixed bug #80269 (OpenSSL sets Subject wrong with extraattribs parameter).
833    (Jakub Zelenka)
834  . Implement request #48520 (openssl_csr_new - allow multiple values in DN).
835    (Jakub Zelenka)
836  . Introduced new serial_hex parameter to openssl_csr_sign. (Jakub Zelenka,
837    Florian Sowade)
838  . Added X509_PURPOSE_OCSP_HELPER and X509_PURPOSE_TIMESTAMP_SIGN constants.
839    (Vincent Jardin)
840  . Bumped minimum required OpenSSL version to 1.1.1. (Ayesh Karunaratne)
841  . Added compile-time option --with-openssl-legacy-provider to enable legacy
842    provider. (Adam Saponara)
843  . Added support for Curve25519 + Curve448 based keys. (Manuel Mausz)
844  . Fixed bug GH-13343 (openssl_x509_parse should not allow omitted seconds in
845    UTCTimes). (Jakub Zelenka)
846
847- Output:
848  . Clear output handler status flags during handler initialization. (haszi)
849  . Fixed bug with url_rewriter.hosts not used by output_add_rewrite_var().
850    (haszi)
851
852- PCNTL:
853  . Added pcntl_setns for Linux. (David Carlier)
854  . Added pcntl_getcpuaffinity/pcntl_setcpuaffinity. (David Carlier)
855  . Updated pcntl_get_signal_handler signal id upper limit to be
856    more in line with platforms limits. (David Carlier)
857  . Added pcntl_getcpu for Linux/FreeBSD/Solaris/Illumos. (David Carlier)
858  . Added pcntl_getqos_class/pcntl_setqos_class for macOs. (David Carlier)
859  . Added SIGCKPT/SIGCKPTEXIT constants for DragonFlyBSD. (David Carlier)
860  . Added FreeBSD's SIGTRAP handling to pcntl_siginfo_to_zval. (David Carlier)
861  . Added POSIX pcntl_waitid. (Vladimir Vrzić)
862
863- PCRE:
864  . Upgrade bundled pcre2lib to version 10.43. (nielsdos)
865  . Add "/r" modifier. (Ayesh)
866  . Upgrade bundled pcre2lib to version 10.44. (Ayesh)
867
868- PDO:
869  . Fixed setAttribute and getAttribute. (SakiTakamachi)
870  . Implemented PDO driver-specific subclasses RFC. (danack, kocsismate)
871  . Added support for PDO driver-specific SQL parsers. (Matteo Beccati)
872
873- PDO_DBLIB:
874  . Fixed setAttribute and getAttribute. (SakiTakamachi)
875  . Added class Pdo\DbLib. (danack, kocsismate)
876
877- PDO_FIREBIRD:
878  . Fixed setAttribute and getAttribute. (SakiTakamachi)
879  . Feature: Add transaction isolation level and mode settings to pdo_firebird.
880    (SakiTakamachi)
881  . Added class Pdo\Firebird. (danack, kocsismate)
882
883- PDO_MYSQL:
884  . Fixed setAttribute and getAttribute. (SakiTakamachi)
885  . Added class Pdo\Mysql. (danack, kocsismate)
886  . Added custom SQL parser. (Matteo Beccati)
887
888- PDO_ODBC:
889  . Added class Pdo\Odbc. (danack, kocsismate)
890
891- PDO_PGSQL:
892  . Fixed GH-12423, DSN credentials being prioritized over the user/password
893    PDO constructor arguments. (SakiTakamachi)
894  . Fixed native float support with pdo_pgsql query results. (Yurunsoft)
895  . Added class Pdo\Pgsql. (danack, kocsismate)
896  . Retrieve the memory usage of the query result resource. (KentarouTakeda)
897  . Added Pdo\Pgsql::setNoticeCallBack method to receive DB notices.
898    (outtersg)
899  . Added custom SQL parser. (Matteo Beccati)
900
901- PDO_SQLITE:
902  . Added class Pdo\Sqlite. (danack, kocsismate)
903  . Fixed bug #81227 (PDO::inTransaction reports false when in transaction).
904    (nielsdos)
905  . Added custom SQL parser. (Matteo Beccati)
906
907- PGSQL:
908  . Added the possibility to have no conditions for pg_select. (OmarEmaraDev)
909  . Persistent connections support the PGSQL_CONNECT_FORCE_RENEW flag.
910    (David Carlier)
911  . Added pg_result_memory_size to get the query result memory usage.
912    (KentarouTakeda)
913  . Added pg_change_password to alter an user's password. (David Carlier)
914  . Added pg_put_copy_data/pg_put_copy_end to send COPY commands and signal
915    the end of the COPY. (David Carlier)
916  . Added pg_socket_poll to poll on the connection. (David Carlier)
917  . Added pg_jit to get infos on server JIT support. (David Carlier)
918  . Added pg_set_chunked_rows_size to fetch results per chunk. (David Carlier)
919
920- Phar:
921  . Fixed bug GH-12532 (PharData created from zip has incorrect timestamp).
922    (nielsdos)
923
924- POSIX:
925  . Added POSIX_SC_CHILD_MAX and POSIX_SC_CLK_TCK constants. (Jakub Zelenka)
926  . Updated posix_isatty to set the error number on file descriptors.
927    (David Carlier)
928
929- PSpell:
930  . Moved to PECL. (Derick Rethans)
931
932- Reflection:
933  . Implement GH-12908 (Show attribute name/class in ReflectionAttribute dump).
934    (nielsdos)
935  . Make ReflectionGenerator::getFunction() legal after generator termination.
936    (timwolla)
937  . Added ReflectionGenerator::isClosed(). (timwolla)
938
939- SimpleXML:
940  . Fixed bug GH-12192 (SimpleXML infinite loop when getName() is called
941    within foreach). (nielsdos)
942  . Fixed bug GH-12208 (SimpleXML infinite loop when a cast is used inside a
943    foreach). (nielsdos)
944  . Fixed bug #55098 (SimpleXML iteration produces infinite loop). (nielsdos)
945  . Fix signature of simplexml_import_dom(). (nielsdos)
946
947- Sockets:
948  . Added multicast group support for ipv4 on FreeBSD. (jonathan@tangential.ca)
949  . Added the TCP_SYNCNT constant for Linux to set number of attempts to send
950    SYN packets from the client. (David Carlier)
951  . Added the SO_EXCLBIND constant for exclusive socket binding on illumos/solaris.
952    (David Carlier)
953  . Updated the socket_create_listen backlog argument default value to SOMAXCONN.
954    (David Carlier)
955  . Added the SO_NOSIGPIPE constant to control the generation of SIGPIPE for
956    macOs and FreeBSD. (David Carlier)
957  . Added SO_LINGER_SEC for macOs, true equivalent of SO_LINGER in other platforms.
958    (David Carlier)
959  . Add close-on-exec on socket created with socket_accept on unixes. (David Carlier)
960
961- SNMP:
962  . Removed the deprecated inet_ntoa call support. (David Carlier)
963
964- SOAP:
965  . Add support for clark notation for namespaces in class map. (lxShaDoWxl)
966  . Mitigate #51561 (SoapServer with a extented class and using sessions,
967    lost the setPersistence()). (nielsdos)
968  . Fixed bug #49278 (SoapClient::__getLastResponseHeaders returns NULL if
969    wsdl operation !has output). (nielsdos)
970  . Fixed bug #44383 (PHP DateTime not converted to xsd:datetime). (nielsdos)
971  . Fixed bug GH-11941 (soap with session persistence will silently fail when
972    "session" built as a shared object). (nielsdos)
973
974- Sockets:
975  . Removed the deprecated inet_ntoa call support. (David Carlier)
976  . Added the SO_EXECLUSIVEADDRUSE windows constant. (David Carlier)
977  . Added the SOCK_CONN_DGRAM/SOCK_DCCP netbsd constants. (David Carlier)
978
979- Sodium:
980  . Add support for AEGIS-128L and AEGIS-256. (jedisct1)
981  . Enable AES-GCM on aarch64 with the ARM crypto extensions. (jedisct1)
982
983- SPL:
984  . Implement SeekableIterator for SplObjectStorage. (nielsdos)
985
986- Standard:
987  . Implement GH-12188 (Indication for the int size in phpinfo()). (timwolla)
988  . Partly fix GH-12143 (Incorrect round() result for 0.49999999999999994).
989    (timwolla)
990  . Fix GH-12252 (round(): Validate the rounding mode). (timwolla)
991  . Increase the default BCrypt cost to 12. (timwolla)
992  . Fixed bug GH-12592 (strcspn() odd behaviour with NUL bytes and empty mask).
993    (nielsdos)
994  . Removed the deprecated inet_ntoa call support. (David Carlier)
995  . Cast large floats that are within int range to int in number_format so
996    the precision is not lost. (Marc Bennewitz)
997  . Add support for 4 new rounding modes to the round() function. (Jorg Sowa)
998  . debug_zval_dump() now indicates whether an array is packed. (Max Semenik)
999  . Fix GH-12143 (Optimize round). (SakiTakamachi)
1000  . Changed return type of long2ip to string from string|false. (Jorg Sowa)
1001  . Fix GH-12143 (Extend the maximum precision round can handle by one digit).
1002    (SakiTakamachi)
1003  . Added the http_get_last_response_headers() and
1004    http_clear_last_response_headers() that allows retrieving the same content
1005    as the magic $http_response_header variable.
1006  . Add php_base64_encode_ex() API. (Remi)
1007  . Implemented "Raising zero to the power of negative number" RFC. (Jorg Sowa)
1008  . Added array_find(), array_find_key(), array_all(), and array_any(). (josh)
1009
1010- XML:
1011  . Added XML_OPTION_PARSE_HUGE parser option. (nielsdos)
1012
1013- XMLReader:
1014  . Declares class constant types. (Ayesh)
1015  . Add XMLReader::fromStream(), XMLReader::fromUri(), XMLReader::fromString(). (nielsdos)
1016
1017- XMLWriter:
1018  . Add XMLWriter::toStream(), XMLWriter::toUri(), XMLWriter::toMemory(). (nielsdos)
1019
1020- XSL:
1021  . Implement request #64137 (XSLTProcessor::setParameter() should allow both
1022    quotes to be used). (nielsdos)
1023  . Implemented "Improve callbacks in ext/dom and ext/xsl" RFC. (nielsdos)
1024  . Added XSLTProcessor::$maxTemplateDepth and XSLTProcessor::$maxTemplateVars.
1025    (nielsdos)
1026
1027<<< NOTE: Insert NEWS from last stable release here prior to actual release! >>>
1028