ZendPHP Changes
PHP version 8.4.1
Community dropped some extensions from the PHP main sources, extensions are now built from PECL sources, therefore the packaging changes on Linux and IBM i:
- oci8
- have different packaging names for RPM based releases, provides old package naming for backward compatibility
- pdo_oci
- to be installed separately as php8.4-zend-pdo-oci (deb) / php84zend-php-pecl-pdo-oci (RPMs). Or: zendphpctl ext install [ --php 8.4 ] pdo_oci
- pspell
- have different packaging names for RPM based releases, provides old package naming for backward compatibility
- imap
- have different packaging names for RPM based releases, provides old package naming for backward compatibility
RPM packages rebuilt and re-released 25 Nov 2024 as 8.4.1-1.
Fixed apache libphp and litespeed SAPI build options.
Original release was built as ZTS, new build is fixed to be NTS.
All loadable extensions are built as non-thread-safe, therefore sapi modules built as ZTS cannot use NTS extension modules.
Community CVE Fixes
PHP version 8.3.14, 8.2.26, 8.1.31 CVE fixes
-
LDAP
- Fixed bug GHSA-g665-fm4p-vhff: OOB access in
ldap_escape. (CVE-2024-8932)
-
MySQLnd
- Fixed bug GHSA-h35g-vwh6-m678: Leak partial content of the heap through heap buffer over-read. (CVE-2024-8929)
-
PDO DBLIB
- Fixed bug GHSA-5hqh-c84r-qjcv: Integer overflow in the
dblib quoter causing OOB writes. (CVE-2024-11236)
-
PDO Firebird
- Fixed bug GHSA-5hqh-c84r-qjcv: Integer overflow in the
firebird quoter causing OOB writes. (CVE-2024-11236)
-
Streams
- Fixed bug GHSA-c5f2-jwm7-mmq2: Configuring a proxy in a stream context might allow for CRLF injection in URIs. (CVE-2024-11234)
- Fixed bug GHSA-r977-prxv-hc43: Single byte overread with
convert.quoted-printable-decode filter. (CVE-2024-11233)
Backported PHP CVE Fixes
PHP version 7.2.34.21, 7.3.33.13, 7.4.33.8, 8.0.30.4 CVE fixes
-
CLI
- Fixed bug GHSA-4w77-75f9-2c8w: Heap-Use-After-Free in
sapi_read_post_data
Processing in CLI SAPI Interface.
-
LDAP
- Fixed bug GHSA-g665-fm4p-vhff: OOB access in
ldap_escape. (CVE-2024-8932)
-
MySQLnd
- Fixed bug GHSA-h35g-vwh6-m678: Leak partial content of the heap through heap buffer over-read. (CVE-2024-8929)
-
PDO DBLIB
- Fixed bug GHSA-5hqh-c84r-qjcv: Integer overflow in the
dblib quoter causing OOB writes. (CVE-2024-11236)
-
PDO Firebird
- Fixed bug GHSA-5hqh-c84r-qjcv: Integer overflow in the
firebird quoter causing OOB writes. (CVE-2024-11236)
-
Streams
- Fixed bug GHSA-c5f2-jwm7-mmq2: Configuring a proxy in a stream context might allow for CRLF injection in URIs. (CVE-2024-11234)
- Fixed bug GHSA-r977-prxv-hc43: Single byte overread with
convert.quoted-printable-decode filter. (CVE-2024-11233)
Community Changes
PHP version 8.4.1 changes
-
BcMath
- [RFC] Add bcfloor, bcceil and bcround to BCMath.
- Improve performance.
- Adjust bcround()'s $mode parameter to only accept the RoundingMode enum.
- Fixed LONG_MAX in BCMath ext.
- Fixed bcdiv() div by one.
- [RFC] Support object types in BCMath.
- bcpow() performance improvement.
- ext/bcmath: Check for scale overflow.
- [RFC] ext/bcmath: Added bcdivmod.
- Fix GH-15968: Avoid converting objects to strings in operator calculations.
- Fixed bug GH-16265: Added early return case when result is 0.
- Fixed bug GH-16262: Fixed a bug where size_t underflows.
- Fixed GH-16236: Fixed a bug in BcMath\Number::pow() and bcpow() when raising negative powers of 0
-
Core
- Added zend_call_stack_get implementation for NetBSD, DragonFlyBSD, Solaris and Haiku.
- Enabled ifunc checks on FreeBSD from the 12.x releases.
- Changed the type of PHP_DEBUG and PHP_ZTS constants to bool.
- Fixed bug GH-13142: Undefined variable name is shortened when contains \0.
- Fixed bug GH-13178: Iterator positions incorrect when converting packed array to hashed.
- Fixed zend fiber build for solaris default mode (32 bits).
- Fixed zend call stack size for macOs/arm64.
- Added support for Zend Max Execution Timers on FreeBSD.
- Ensure fiber stack is not backed by THP.
- Implement GH-13609: Dump wrapped object in WeakReference class.
- Added sparc64 arch assembly support for zend fiber.
- Fixed GH-13581 no space available for TLS on NetBSD.
- Added fiber Sys-V loongarch64 support.
- Adjusted closure names to include the parent function's name.
- Improve randomness of uploaded file names and files created by tempnam().
- Added gc and shutdown callbacks to zend_mm custom handlers.
- Fixed bug GH-14650: Compute the size of pages before allocating memory.
- Fixed bug GH-11928: The --enable-re2c-cgoto doesn't add the -g flag.
- Added the #[\Deprecated] attribute.
- Fixed GH-11389: Allow suspending fibers in destructors.
- Fixed bug GH-14801: Fix build for armv7.
- Implemented property hooks RFC.
- Fix GH-14978: The xmlreader extension phpize build.
- Throw Error exception when encountering recursion during comparison, rather than fatal error.
- Added missing cstddef include for C++ builds.
- Updated build system scripts config.guess to 2024-07-27 and config.sub to 2024-05-27.
- Fixed bug GH-15240: Infinite recursion in trait hook.
- Fixed bug GH-15140: Missing variance check for abstract set with asymmetric type.
- Fixed bug GH-15181: Disabled output handler is flushed again.
- Passing E_USER_ERROR to trigger_error() is now deprecated.
- Fixed bug GH-15292: Dynamic AVX detection is broken for MSVC.
- Using "_" as a class name is now deprecated.
- Exiting a namespace now clears seen symbols.
- The exit (and die) language constructs now behave more like a function. They can be passed liked callables, are affected by the strict_types declare statement, and now perform the usual type coercions instead of casting any non-integer value to a string. As such, passing invalid types to exit/die may now result in a TypeError being thrown.
- Fixed bug GH-15438: Hooks on constructor promoted properties without visibility are ignored.
- Fixed bug GH-15419: Missing readonly+hook incompatibility check for readonly classes.
- Fixed bug GH-15187: Various hooked object iterator issues.
- Fixed bug GH-15456: Crash in get_class_vars() on virtual properties.
- Fixed bug GH-15501: Windows HAVE__H macros defined to 1 or undefined.
- Implemented asymmetric visibility for properties.
- Fixed bug GH-15644: Asymmetric visibility doesn't work with hooks.
- Implemented lazy objects RFC.
- Fixed bug GH-15686: Building shared iconv with external iconv library.
- Fixed missing error when adding asymmetric visibility to unilateral virtual property.
- Fixed bug GH-15693: Unnecessary include in main.c bloats binary.
- Fixed bug GH-15731: AllowDynamicProperties validation should error on enums.
- Fixed bug GH-16040: Use-after-free of object released in hook.
- Fixed bug GH-16026: Reuse of dtor fiber during shutdown.
- Fixed bug GH-15999: zend_std_write_property() assertion failure with lazy objects.
- Fixed bug GH-15960: Foreach edge cases with lazy objects.
- Fixed bug GH-16185: Various hooked object iterator issues.
- Fixed bug OSS-Fuzz #371445205: Heap-use-after-free in attr_free.
- Fixed missing error when adding asymmetric visibility to static properties.
- Fixed bug OSS-Fuzz #71407: Null-dereference WRITE in
zend_lazy_object_clone.
- Fixed bug GH16574: Incorrect error "undefined method" messages.
- Fixed bug GH16577:
EG(strtod_state).freelist leaks with opcache.preload.
- Fixed bug GH16574: Incorrect error "undefined method" messages.
- Fixed bug GH16577:
EG(strtod_state).freelist leaks with opcache.preload.
- Fixed bug GH16615: Assertion failure in
zend_std_read_property.
- Fixed bug GH16342: Added
ReflectionProperty::isLazy().
- Fixed bug GH16725: Incorrect access check for non-hooked properties in hooked object iterator.
-
Curl
- Deprecated the
CURLOPT_BINARYTRANSFER constant.
- Bumped required libcurl version to 7.61.0.
- Added
feature_list key to the curl_version() return value.
- Added constants
CURL_HTTP_VERSION_3 (libcurl 7.66) and CURL_HTTP_VERSION_3ONLY (libcurl 7.88) as options for CURLOPT_HTTP_VERSION.
- Added
CURLOPT_TCP_KEEPCNT to set the number of probes to send before dropping the connection.
- Added
CURLOPT_PREREQFUNCTION Curl option to set a custom callback after the connection is established but before the request is performed.
- Added
CURLOPT_SERVER_RESPONSE_TIMEOUT, which was formerly known as CURLOPT_FTP_RESPONSE_TIMEOUT.
- The
CURLOPT_DNS_USE_GLOBAL_CACHE option is now silently ignored.
- Added
CURLOPT_DEBUGFUNCTION as a Curl option.
- Fixed bug GH16359: Crash with
curl_setopt* CURLOPT_WRITEFUNCTION without null callback.
- Fixed bug GH16723:
CURLMOPT_PUSHFUNCTION issues.
-
Date
- Added
DateTime[Immutable]::createFromTimestamp.
- Added
DateTime[Immutable]::[get|set]Microsecond.
- Constants
SUNFUNCS_RET_TIMESTAMP, SUNFUNCS_RET_STRING, and SUNFUNCS_RET_DOUBLE are now deprecated.
- Fixed bug GH13773:
DatePeriod not taking into account microseconds for end date.
-
DBA
- Passing
null or false to dba_key_split() is deprecated.
-
Debugging
- Fixed bug GH15923: GDB: Python Exception
: exceptions must derive from BaseException.
-
DOM
- Added
DOMNode::compareDocumentPosition()
- Implemented #53655: Improve speed of
DOMNode::C14N() on large XML documents.
- Fixed cloning attribute with namespace disappearing namespace.
- Implemented DOM HTML5 parsing and serialization RFC.
- Fixed
DOMElement->prefix with empty string creating bogus prefix.
- Handled OOM more consistently.
- Implemented "Improve callbacks in ext/dom and ext/xsl" RFC.
- Added
DOMXPath::quote() static method.
- Implemented opt-in ext/dom spec compliance RFC.
- Fixed bug #79701:
getElementById does not correctly work with duplicate definitions.
- Implemented "New extdom features in PHP 8.4" RFC.
- Fixed bug GH14698: Segfault on DOM node dereference.
- Improved support for template elements.
- Fixed trampoline leak in XPath callables.
- Throws instead of silently failing when creating a too long text node in
(DOM)ParentNode and (DOM)ChildNode.
- Fixed bug GH15192: Segmentation fault in DOM extension (html5_serializer).
- Deprecated
DOM_PHP_ERR constant.
- Removed
DOMImplementation::getFeature().
- Fixed bug GH15331:
Element::$substitutedNodeValue test failed.
- Fixed bug GH15570: Segmentation fault (access null pointer) in
ext/dom/html5_serializer.c.
- Fixed bug GH13988: Storing
DOMElement consumes 4 times more memory in PHP 8.1 than in PHP 8.0.
- Fixed XML serializer errata:
xmlns="" serialization should be allowed.
- Fixed bug GH15910: Assertion failure in
ext/dom/element.c.
- Fixed unsetting of DOM properties.
- Fixed bug GH16190: Using reflection to call
Dom\Node::__construct causes assertion failure.
- Fixed edge case in DOM parsing decoding.
- Fixed bug GH16465: Heap buffer overflow in
DOMNode->getElementByTagName.
- Fixed bug GH16594: Assertion failure in DOM > before.
-
Fileinfo
- Updated to
libmagic 5.45.
- Fixed bug #65106: PHP fails to compile
ext/fileinfo.
-
FPM
- Implemented GH12385: Flush headers without body when calling
flush().
- Added DragonFlyBSD system to the list which sets
FPM_BACKLOG_DEFAULT to SOMAXCONN.
/dev/poll events.mechanism for Solaris/Illumos setting has been retired.
- Added memory peak to the scoreboard/status page.
-
FTP
- Removed the deprecated
inet_ntoa call support.
- Fixed bug #63937: Upload speed 10 times slower with PHP.
-
GD
- Fixed parameter numbers and missing alpha check for
imagecolorset().
imagepng, imagejpeg, imagewep, and imageavif now throw an exception on invalid quality parameter.
- Checked overflow/underflow for
imagescale and imagefilter.
- Added
gdImageClone to bundled libgd.
-
Gettext
bind_textdomain_codeset, textdomain, and d(*)gettext functions now throw an exception on empty domain.
-
GMP
- The
GMP class is now final and cannot be extended anymore.
- RFC: Changed GMP bool cast behavior.
-
Hash
- Changed return type of
hash_update() to true.
- Added
HashContext::__debugInfo().
-
IMAP
-
Intl
- Added
IntlDateFormatter::PATTERN constant.
- Fixed
Numberformatter::__construct when the locale is invalid, now throws an exception.
- Added
NumberFormatter::ROUND_TOWARD_ZERO and ::ROUND_AWAY_FROM_ZERO as aliases for ::ROUND_DOWN and ::ROUND_UP.
- Added
NumberFormatter::ROUND_HALFODD.
- Added
PROPERTY_IDS_UNARY_OPERATOR, PROPERTY_ID_COMPAT_MATH_START, and PROPERTY_ID_COMPAT_MATH_CONTINUE constants.
- Added
IntlDateFormatter::getIanaID/intltz_get_iana_id method/function.
- Set to C++17 standard for ICU 74 and onwards.
resourcebundle_get(), ResourceBundle::get(), and accessing offsets on a ResourceBundle object now throw:
TypeError for invalid offset types.
ValueError for an empty string.
ValueError if the integer index does not fit in a signed 32-bit integer.
ResourceBundle::get() now has a tentative return type of: ResourceBundle|array|string|int|null.
- Added the new Grapheme function
grapheme_str_split.
- Added
IntlDateFormatter::parseToCalendar.
- Added
SpoofChecker::setAllowedChars to set Unicode character ranges.
-
LDAP
- Added
LDAP_OPT_X_TLS_PROTOCOL_MAX/LDAP_OPT_X_TLS_PROTOCOL_TLS1_3 constants.
-
LibXML
- Added
LIBXML_RECOVER constant.
libxml_set_streams_context() now throws immediately on an invalid context instead of at the use site.
- Added
LIBXML_NO_XXE constant.
-
MBString
- Added
mb_trim, mb_ltrim, and mb_rtrim.
- Added
mb_ucfirst and mb_lcfirst.
- Updated Unicode data tables to Unicode 15.1.
- Fixed bug GH15824:
mb_detect_encoding(): Argument $encodings contains invalid encoding "UTF8".
- Updated Unicode data tables to Unicode 16.0.
-
Mysqli
- The
mysqli_ping() function and mysqli::ping() method are now deprecated, as the reconnect feature was removed in PHP 8.2.
- The
mysqli_kill() function and mysqli::kill() method are now deprecated. If this functionality is needed, a SQL "KILL" command can be used instead.
- The
mysqli_refresh() function and mysqli::refresh() method are now deprecated. If this functionality is needed, a SQL "FLUSH" command can be used instead.
- Passing explicitly the
$mode parameter to mysqli_store_result() has been deprecated.
- As the
MYSQLI_STORE_RESULT_COPY_DATA constant was only used in conjunction with this function, it has also been deprecated.
-
MySQLnd
- Fixed bug GH13440: PDO quote bottleneck.
- Fixed bug GH10599: Apache crash on Windows when using a self-referencing anonymous function inside a class with an active MySQLi connection.
-
Opcache
- Added large shared segments support for FreeBSD.
- If JIT is enabled, PHP will now exit with a fatal error on startup in case of JIT startup initialization issues.
- Increased the maximum value of
opcache.interned_strings_buffer to 32767 on 64-bit architectures.
- Fixed bug GH13834: Applying nonzero offset 36 to null pointer in
zend_jit.c.
- Fixed bug GH14361: Deep recursion in
zend_cfg.c causes segfault.
- Fixed bug GH14873: PHP 8.4
min function fails on typed integer.
- Fixed bug GH15490: Building of call graph modifies preloaded symbols.
- Fixed bug GH15178: Assertion in tracing JIT on hooks.
- Fixed bug GH15657: Segmentation fault in
dasm_x86.h.
- Added
opcache_jit_blacklist() function.
- Fixed bug GH16009: Segmentation fault with frameless functions and undefined CVs.
- Fixed bug GH16186: Assertion failure in
Zend/zend_operators.c.
- Fixed bug GH16572: Incorrect result with reflection in low-trigger JIT.
- Fixed bug GH16839: Error on building Opcache JIT for Windows ARM64.
-
OpenSSL
- Fixed bug #80269: OpenSSL sets Subject wrong with
extraattribs parameter.
- Implemented request #48520:
openssl_csr_new allows multiple values in DN.
- Introduced new
serial_hex parameter to openssl_csr_sign.
- Added
X509_PURPOSE_OCSP_HELPER and X509_PURPOSE_TIMESTAMP_SIGN constants.
- Bumped minimum required OpenSSL version to 1.1.1.
- Added compile-time option
--with-openssl-legacy-provider to enable legacy provider.
- Added support for Curve25519 + Curve448 based keys.
- Fixed bug GH13343:
openssl_x509_parse should not allow omitted seconds in UTC times.
- Bumped minimum required OpenSSL version to 1.1.0.
- Implemented GH13514:
PASSWORD_ARGON2 from OpenSSL 3.2.
-
Output
- Clear output handler status flags during handler initialization.
- Fixed bug with
url_rewriter.hosts not used by output_add_rewrite_var().
-
PCNTL
- Added
pcntl_setns for Linux.
- Added
pcntl_getcpuaffinity/pcntl_setcpuaffinity.
- Updated
pcntl_get_signal_handler signal ID upper limit to be more in line with platform limits.
- Added
pcntl_getcpu for Linux/FreeBSD/Solaris/Illumos.
- Added
pcntl_getqos_class/pcntl_setqos_class for macOS.
- Added
SIGCKPT/SIGCKPTEXIT constants for DragonFlyBSD.
- Added FreeBSD's
SIGTRAP handling to pcntl_siginfo_to_zval.
- Added POSIX
pcntl_waitid.
- Fixed bug GH16769:
pcntl_sigwaitinfo aborts on signal value as reference.
-
PCRE
- Upgraded bundled
pcre2lib to version 10.43.
- Added
/r modifier.
- Upgraded bundled
pcre2lib to version 10.44.
- Fixed GH16189: Underflow on offset argument.
- Fixed UAF issues with PCRE after request shutdown.
-
PDO
- Fixed
setAttribute and getAttribute.
- Implemented PDO driver-specific subclasses RFC.
- Added support for PDO driver-specific SQL parsers.
- Fixed bug GH14792: Compilation failure on
pdo_* extensions.
mysqlnd supports ER_CLIENT_INTERACTION_TIMEOUT.
- The internal header
php_pdo_int.h is no longer installed; it is not supposed to be used by PDO drivers.
- Fixed bug GH16167: Prevent mixing PDO subclasses with different DSN.
- Fixed bug GH16314:
"Pdo\Mysql object is uninitialized" when opening a persistent connection.
-
PDO_DBLIB
- Fixed
setAttribute and getAttribute.
- Added class
Pdo\DbLib.
-
PDO_Firebird
- Fixed
setAttribute and getAttribute.
- Added transaction isolation level and mode settings to
pdo_firebird.
- Added class
Pdo\Firebird.
- Added
Pdo\Firebird::ATTR_API_VERSION.
- Added
getApiVersion() and removed it from getAttribute().
- Supported Firebird 4.0 datatypes.
- Supported proper formatting of time zone types.
- Fixed GH15604: Always make input parameters nullable.
-
PDO_MYSQL
- Fixed
setAttribute and getAttribute.
- Added class
Pdo\Mysql.
- Added custom SQL parser.
- Fixed GH15949:
PDO_MySQL not properly quoting PDO_PARAM_LOB binary data.
-
PDO_ODBC
-
PDO_PGSQL
- Fixed GH12423: DSN credentials being prioritized over the
user/password PDO constructor arguments.
- Fixed native float support with
pdo_pgsql query results.
- Added class
Pdo\Pgsql.
- Retrieve the memory usage of the query result resource.
- Added
Pdo\Pgsql::setNoticeCallBack method to receive DB notices.
- Added custom SQL parser.
- Fixed GH15986: Double free due to
Pdo\Pgsql::setNoticeCallback().
- Fixed GH12940: Using
PQclosePrepared when available instead of the DEALLOCATE command to free statement resources.
- Removed
PGSQL_ATTR_RESULT_MEMORY_SIZE constant as it is provided by the new PDO subclass as Pdo\Pgsql::ATTR_RESULT_MEMORY_SIZE.
-
PDO_SQLITE
- Added class
Pdo\Sqlite.
- Fixed bug #81227:
PDO::inTransaction reports false when in a transaction.
- Added custom SQL parser.
-
PHPDBG
- Array out of bounds and stack overflow handled for segfault handler on Windows.
- Fixed bug GH16041: Support stack limit in
phpdbg.
-
PGSQL
- Added the possibility to have no conditions for
pg_select.
- Persistent connections support the
PGSQL_CONNECT_FORCE_RENEW flag.
- Added
pg_result_memory_size to get the query result memory usage.
- Added
pg_change_password to alter a user's password.
- Added
pg_put_copy_data/pg_put_copy_end to send COPY commands and signal the end of the COPY.
- Added
pg_socket_poll to poll on the connection.
- Added
pg_jit to get information on server JIT support.
- Added
pg_set_chunked_rows_size to fetch results per chunk.
-pg_convert/pg_insert/pg_update/pg_delete: Regular expressions are now cached.
-
Phar
- Fixed bug GH12532: PharData created from zip has incorrect timestamp.
-
POSIX
- Added POSIX_SC_CHILD_MAX and POSIX_SC_CLK_TCK constants.
- Updated posix_isatty to set the error number on file descriptors.
-
PSpell
-
Random
- Fixed bug GH15094: php_random_default_engine() is not C++ conforming.
- lcg_value() is now deprecated.
-
Readline
- Fixed readline_info, rl_line_buffer_length/rl_len globals on update.
- Fixed bug #51558: Shared readline build fails.
- Fixed UAF with readline_info().
-
Reflection
- Implement GH12908: Show attribute name/class in ReflectionAttribute dump.
- Make
ReflectionGenerator::getFunction() legal after generator termination.
- Added
ReflectionGenerator::isClosed().
- Fixed bug GH15718: Segfault on
ReflectionProperty::get{Hook,Hooks}() on dynamic properties.
- Fixed bug GH15694:
ReflectionProperty::isInitialized() is incorrect for hooked properties.
- Add missing
ReflectionProperty::hasHook[s]() methods.
- Add missing
ReflectionProperty::isFinal() method.
- Fixed bug GH16122: The return value of
ReflectionFunction::getNamespaceName() and ReflectionFunction::inNamespace() for closures is incorrect.
- Fixed bug GH16162: No
ReflectionProperty::IS_VIRTUAL.
- Fixed the name of the second parameter of
ReflectionClass::resetAsLazyGhost().
-
Session
- INI settings
session.sid_length and session.sid_bits_per_character are now deprecated.
- Emit warnings for nonpositive values of
session.gc_divisor and negative values of session.gc_probability.
- Fixed bug GH16590: UAF in
session_encode().
-
SimpleXML
- Fix signature of
simplexml_import_dom().
-
SNMP
- Removed the deprecated
inet_ntoa call support.
-
SOAP
- Add support for clark notation for namespaces in class map.
- Mitigate #51561: SoapServer with an extended class and using sessions lost the
setPersistence().
- Fixed bug #49278:
SoapClient::__getLastResponseHeaders returns NULL if WSDL operation has no output.
- Fixed bug #44383: PHP
DateTime not converted to xsd:datetime.
- Fixed bug GH11941: Soap with session persistence will silently fail when "session" is built as a shared object.
- Passing an int to
SoapServer::addFunction() is now deprecated. If all PHP functions need to be provided, flatten the array returned by get_defined_functions().
- The
SOAP_FUNCTIONS_ALL constant is now deprecated.
- Fixed bug #61525: SOAP functions require at least one space after HTTP header colon.
- Implement request #47317:
SoapServer::__getLastResponse().
-
Sockets
- Removed the deprecated
inet_ntoa call support.
- Added the
SO_EXCLUSIVEADDRUSE windows constant.
- Added the
SOCK_CONN_DGRAM/SOCK_DCCP NetBSD constants.
- Added multicast group support for IPv4 on FreeBSD.
- Added the
TCP_SYNCNT constant for Linux to set the number of attempts to send SYN packets from the client.
- Added the
SO_EXCLBIND constant for exclusive socket binding on illumos/Solaris.
- Updated the
socket_create_listen backlog argument default value to SOMAXCONN.
- Added the
SO_NOSIGPIPE constant to control the generation of SIGPIPE for macOS and FreeBSD.
- Added
SO_LINGER_SEC for macOS, true equivalent of SO_LINGER in other platforms.
- Added
closeonexec on socket created with socket_accept on Unix.
- Added
IP_PORTRANGE* constants for BSD systems to control ephemeral port ranges.
- Added
SOCK_NONBLOCK/SOCK_CLOEXEC constants for socket_create and socket_create_pair to apply O_NONBLOCK/O_CLOEXEC flags to newly created sockets.
- Added
SO_BINDTOIFINDEX to bind a socket to an interface index.
-
Sodium
- Add support for AEGIS128L and AEGIS256.
- Enable AESGCM on aarch64 with the ARM crypto extensions.
-
SPL
- Implement
SeekableIterator for SplObjectStorage.
- The
SplFixedArray::__wakeup() method has been deprecated as it implements __serialize() and __unserialize() which need to be overwritten instead.
- Passing a nonempty string for the
$escape parameter of SplFileObject::setCsvControl(), SplFileObject::fputcsv(), SplFileObject::fgetcsv() is now deprecated.
-
Standard
- Implement GH12188: Indication for the int size in
phpinfo().
- Partly fix GH12143: Incorrect
round() result for 0.49999999999999994.
- Fix GH12252:
round(): Validate the rounding mode.
- Increase the default BCrypt cost to 12.
- Fixed bug GH12592:
strcspn() odd behavior with NUL bytes and empty mask.
- Removed the deprecated
inet_ntoa call support.
- Cast large floats that are within int range to int in
number_format so the precision is not lost.
- Add support for 4 new rounding modes to the
round() function.
debug_zval_dump() now indicates whether an array is packed.
- Fix GH12143: Optimize
round.
- Changed return type of
long2ip to string from string|false.
- Fix GH12143: Extend the maximum precision
round can handle by one digit.
- Added the
http_get_last_response_headers() and http_clear_last_response_headers() that allows retrieving the same content as the magic $http_response_header variable.
- Add
php_base64_encode_ex() API.
- Implemented "Raising zero to the power of a negative number" RFC.
- Added
array_find(), array_find_key(), array_all(), and array_any().
- Change
highlight_string() and print_r() return type to string|true.
- Fix references in
request_parse_body() options array.
- Add
RoundingMode enum.
- Unserializing the uppercase 'S' tag is now deprecated.
- Enables
crc32 auxiliary detection on OpenBSD.
- Passing a nonempty string for the
$escape parameter of fputcsv(), fgetcsv(), str_getcsv() is now deprecated.
- The
str_getcsv() function now throws ValueErrors when the $separator and $enclosure arguments are not one byte long, or if the $escape is not one byte long or the empty string. This aligns the behavior to be identical to that of fputcsv() and fgetcsv().
php_uname() now throws ValueErrors on invalid inputs.
- The
allowed_classes option for unserialize() now throws TypeErrors and ValueErrors if it is not an array of class names.
- Implemented GH15685: Improve
proc_open error reporting on Windows.
- Add support for backed enums in
http_build_query().
- Fixed bug GH15982: Assertion failure with
array_find when references are involved.
- Fixed parameter names of
fpow() to be identical to pow().
-
Streams
- Implemented GH15155: Stream context is lost when custom stream wrapper is being filtered.
-
Tidy
- Failures in the constructor now throw exceptions rather than emitting warnings and having a broken object.
- Add
tidyNode::getNextSibling() and tidyNode::getPreviousSibling().
-
Windows
- Update the icon of the Windows executables, e.g.
php.exe.
- Fixed bug GH16199:
GREP_HEADER() is broken.
-
XML
- Added
XML_OPTION_PARSE_HUGE parser option.
- Fixed bug #81481:
xml_get_current_byte_index limited to 32bit numbers on 64bit builds.
- The
xml_set_object() function has been deprecated.
- Passing noncallable strings to the
xml_set_*_handler() functions is now deprecated.
-
XMLReader
- Declares class constant types.
- Add
XMLReader::fromStream(), XMLReader::fromUri(), XMLReader::fromString().
- Fixed bug GH15123:
var_dump doesn't actually work on XMLReader.
-
XMLWriter
- Add
XMLWriter::toStream(), XMLWriter::toUri(), XMLWriter::toMemory().
-
XSL
- Implement request #64137:
XSLTProcessor::setParameter() should allow both quotes to be used.
- Implemented "Improve callbacks in ext/dom and ext/xsl" RFC.
- Added
XSLTProcessor::$maxTemplateDepth and XSLTProcessor::$maxTemplateVars.
- Fix trampoline leak in xpath callables.
-
Zip
- Added ZipArchive::ER_TRUNCATED_ZIP added in libzip 1.11.
Community Fixes
PHP version 8.3.14 fixes
-
CLI
- Fixed bug GH-16373: Shebang is not skipped for router script in
cli-server started through shebang.
- Fixed bug GHSA-4w77-75f9-2c8w: Heap-Use-After-Free in
sapi_read_post_data Processing in CLI SAPI Interface.
-
COM
- Fixed out of bound writes to
SafeArray data.
-
Core
- Fixed bug GH-16168:
php 8.1 and earlier crash immediately when compiled with Xcode 16 clang on macOS 15.
- Fixed bug GH-16371: Assertion failure in
Zend/zend_weakrefs.c:646.
- Fixed bug GH-16515: Incorrect propagation of
ZEND_ACC_RETURN_REFERENCE for call trampoline.
- Fixed bug GH-16509: Incorrect line number in function redeclaration error.
- Fixed bug GH-16508: Incorrect line number in inheritance errors of delayed early bound classes.
- Fixed bug GH-16648: Use-after-free during array sorting.
-
Curl
- Fixed bug GH-16302:
CurlMultiHandle holds a reference to CurlHandle if curl_multi_add_handle fails.
-
Date
- Fixed bug GH-16454: Unhandled INF in
date_sunset() with tiny $utcOffset.
- Fixed bug GH-14732:
date_sun_info() fails for non-finite values.
-
DBA
- Fixed bug GH-16390:
dba_open() can segfault for "pathless" streams.
-
DOM
- Fixed bug GH-16316:
DOMXPath breaks when not initialized properly.
- Add missing hierarchy checks to
replaceChild.
- Fixed bug GH-16336: Attribute intern document mismanagement.
- Fixed bug GH-16338: Null-dereference in
ext/dom/node.c.
- Fixed bug GH-16473:
dom_import_simplexml stub is wrong.
- Fixed bug GH-16533: Segfault when adding attribute to parent that is not an element.
- Fixed bug GH-16535: UAF when using document as a child.
- Fixed bug GH-16593: Assertion failure in
DOM->replaceChild.
- Fixed bug GH-16595: Another UAF in
DOM -> cloneNode.
-
EXIF
- Fixed bug GH-16409: Segfault in
exif_thumbnail when not dealing with a real file.
-
FFI
- Fixed bug GH-16397: Segmentation fault when comparing
FFI object.
-
Filter
- Fixed bug GH-16523:
FILTER_FLAG_HOSTNAME accepts ending hyphen.
-
FPM
- Fixed bug GH-16628:
FPM logs are getting corrupted with this log statement.
-
GD
- Fixed bug GH-16334:
imageaffine overflow on matrix elements.
- Fixed bug GH-16427: Unchecked
libavif return values.
- Fixed bug GH-16559: UBSan abort in
ext/gd/libgd/gd_interpolation.c:1007.
-
GMP
- Fixed floating point exception bug with
gmp_pow when using large exposant values.
- Fixed bug GH-16411:
gmp_export() can cause overflow.
- Fixed bug GH-16501:
gmp_random_bits() can cause overflow.
- Fixed
gmp_pow() overflow bug with large base/exponents.
- Fixed segfaults and other issues related to operator overloading with
GMP objects.
-
MBstring
- Fixed bug GH-16361:
mb_substr overflow on start/length arguments.
-
Opcache
- Fixed bug GH-16408: Array to string conversion warning emitted in optimizer.
-
OpenSSL
- Fixed bug GH-16357:
openssl may modify member types of certificate arrays.
- Fixed bug GH-16433: Large values for
openssl_csr_sign() $days overflow.
- Fix various memory leaks on error conditions in
openssl_x509_parse().
-
PDO ODBC
- Fixed bug GH-16450:
PDO_ODBC can inject garbage into field values.
-
Phar
- Fixed bug GH-16406: Assertion failure in
ext/phar/phar.c:2808.
-
PHPDBG
- Fixed bug GH-16174: Empty string is an invalid expression for
ev.
-
Reflection
- Fixed bug GH-16601: Memory leak in Reflection constructors.
-
Session
- Fixed bug GH-16385: Unexpected null returned by
session_set_cookie_params.
- Fixed bug GH-16290: Overflow on
cookie_lifetime ini value.
-
SOAP
- Fixed bug GH-16318: Recursive array segfaults soap encoding.
- Fixed bug GH-16429: Segmentation fault access null pointer in
SoapClient.
-
Sockets
- Fixed bug with overflow
socket_recvfrom $length argument.
-
SPL
- Fixed bug GH-16337: Use-after-free in
SplHeap.
- Fixed bug GH-16464: Use-after-free in
SplDoublyLinkedList::offsetSet().
- Fixed bug GH-16479: Use-after-free in
SplObjectStorage::setInfo().
- Fixed bug GH-16478: Use-after-free in
SplFixedArray::unset().
- Fixed bug GH-16588: UAF in
Observer->serialize.
- Fix GH-16477: Segmentation fault when calling
__debugInfo() after failed SplFileObject::__constructor.
- Fixed bug GH-16589: UAF in
SplDoublyLinked->serialize().
- Fixed bug GH-14687: Segfault on
SplObjectIterator instance.
- Fixed bug GH-16604: Memory leaks in SPL constructors.
- Fixed bug GH-16646: UAF in
ArrayObject::unset() and ArrayObject::exchangeArray().
-
Standard
- Fixed bug GH-16293: Failed assertion when throwing in
assert() callback with bail enabled.
-
SysVMsg
- Fixed bug GH-16592:
msg_send() crashes when a type does not properly serialize.
-
SysVShm
- Fixed bug GH-16591: Assertion error in
shm_put_var.
-
XMLReader
- Fixed bug GH-16292: Segmentation fault in
ext/xmlreader/php_xmlreader.c.
-
Zlib
- Fixed bug GH-16326: Memory management is broken for bad dictionaries.
PHP version 8.2.26 fixes
-
CLI
- Fixed bug GH-16373: Shebang is not skipped for router script in
cli-server started through shebang.
- Fixed bug GHSA-4w77-75f9-2c8w: Heap-Use-After-Free in
sapi_read_post_data Processing in CLI SAPI Interface.
-
COM
- Fixed out of bound writes to
SafeArray data.
-
Core
- Fixed bug GH-16168:
php 8.1 and earlier crash immediately when compiled with Xcode 16 clang on macOS 15.
- Fixed bug GH-16371: Assertion failure in
Zend/zend_weakrefs.c:646.
- Fixed bug GH-16515: Incorrect propagation of
ZEND_ACC_RETURN_REFERENCE for call trampoline.
- Fixed bug GH-16509: Incorrect line number in function redeclaration error.
- Fixed bug GH-16508: Incorrect line number in inheritance errors of delayed early bound classes.
- Fixed bug GH-16648: Use-after-free during array sorting.
-
Curl
- Fixed bug GH-16302:
CurlMultiHandle holds a reference to CurlHandle if curl_multi_add_handle fails.
-
Date
- Fixed bug GH-16454: Unhandled INF in
date_sunset() with tiny $utcOffset.
- Fixed bug GH-16037: Assertion failure in ext/date/php_date.c.
- Fixed bug GH-14732:
date_sun_info() fails for non-finite values.
-
DBA
- Fixed bug GH-16390:
dba_open() can segfault for "pathless" streams.
-
DOM
- Fixed bug GH-16316:
DOMXPath breaks when not initialized properly.
- Fixed bug GH-16473:
dom_import_simplexml stub is wrong.
- Fixed bug GH-16533: Segfault when adding attribute to parent that is not an element.
- Fixed bug GH-16535: UAF when using document as a child.
- Fixed bug GH-16593: Assertion failure in
DOM->replaceChild.
- Fixed bug GH-16595: Another UAF in
DOM -> cloneNode.
-
EXIF
- Fixed bug GH-16409: Segfault in
exif_thumbnail when not dealing with a real file.
-
FFI
- Fixed bug GH-16397: Segmentation fault when comparing
FFI object.
-
Filter
- Fixed bug GH-16523:
FILTER_FLAG_HOSTNAME accepts ending hyphen.
-
FPM
- Fixed bug GH-16628:
FPM logs are getting corrupted with this log statement.
-
GD
- Fixed bug GH-16334:
imageaffine overflow on matrix elements.
- Fixed bug GH-16427: Unchecked
libavif return values.
- Fixed bug GH-16559: UBSan abort in
ext/gd/libgd/gd_interpolation.c:1007.
-
GMP
- Fixed floating point exception bug with
gmp_pow when using large exposant values.
- Fixed bug GH-16411:
gmp_export() can cause overflow.
- Fixed bug GH-16501:
gmp_random_bits() can cause overflow.
- Fixed
gmp_pow() overflow bug with large base/exponents.
- Fixed segfaults and other issues related to operator overloading with
GMP objects.
-
MBstring
- Fixed bug GH-16361:
mb_substr overflow on start/length arguments.
-
OpenSSL
- Fixed bug GH-16357:
openssl may modify member types of certificate arrays.
- Fixed bug GH-16433: Large values for
openssl_csr_sign() $days overflow.
- Fix various memory leaks on error conditions in
openssl_x509_parse().
-
PDO ODBC
- Fixed bug GH-16450:
PDO_ODBC can inject garbage into field values.
-
Phar
- Fixed bug GH-16406: Assertion failure in
ext/phar/phar.c:2808.
-
PHPDBG
- Fixed bug GH-16174: Empty string is an invalid expression for
ev.
-
Reflection
- Fixed bug GH-16601: Memory leak in Reflection constructors.
-
Session
- Fixed bug GH-16385: Unexpected null returned by
session_set_cookie_params.
- Fixed bug GH-16290: Overflow on
cookie_lifetime ini value.
-
SOAP
- Fixed bug GH-16429: Segmentation fault access null pointer in
SoapClient.
-
Sockets
- Fixed bug with overflow
socket_recvfrom $length argument.
-
SPL
- Fixed bug GH-16337: Use-after-free in
SplHeap.
- Fixed bug GH-16464: Use-after-free in
SplDoublyLinkedList::offsetSet().
- Fixed bug GH-16479: Use-after-free in
SplObjectStorage::setInfo().
- Fixed bug GH-16478: Use-after-free in
SplFixedArray::unset().
- Fixed bug GH-16588: UAF in
Observer->serialize.
- Fix GH-16477: Segmentation fault when calling
__debugInfo() after failed SplFileObject::__constructor.
- Fixed bug GH-16589: UAF in
SplDoublyLinked->serialize().
- Fixed bug GH-14687: Segfault on
SplObjectIterator instance.
- Fixed bug GH-16604: Memory leaks in SPL constructors.
- Fixed bug GH-16646: UAF in
ArrayObject::unset() and ArrayObject::exchangeArray().
-
Standard
- Fixed bug GH-16293: Failed assertion when throwing in
assert() callback with bail enabled.
-
SysVMsg
- Fixed bug GH-16592:
msg_send() crashes when a type does not properly serialize.
-
SysVShm
- Fixed bug GH-16591: Assertion error in
shm_put_var.
-
XMLReader
- Fixed bug GH-16292: Segmentation fault in
ext/xmlreader/php_xmlreader.c.
-
Zlib
- Fixed bug GH-16326: Memory management is broken for bad dictionaries.
PHP version 8.1.31 fixes
- CLI
- Fixed bug GHSA-4w77-75f9-2c8w: Heap-Use-After-Free in
sapi_read_post_data Processing in CLI SAPI Interface.