php8.5
← All releases
PHP 8.4 Thursday, 24 September 2026

PHP 8.4.26

54 changes across 22 components.

BCMath

  • Fixed out-of-bounds read in bc_is_zero_for_scale() when scale exceeds n_scale.

Core

  • Fixed out-of-bounds reads during automatic UTF-16/32 encoding detection.
  • Fixed bug GH-15375 (Nested "yield from" skips items after a valid() or next() call on the inner generator).
  • Fixed bug GH-23232 (lone namespace separator asks the autoloader for an empty class name).
  • Fixed bug GH-23301 (Nested "yield from" yields a value twice when the middle generator delegates again).

CLI

  • Fixed bug GH-23425 (sapi_cli_server_send_headers() does not check the return value of php_cli_server_client_send_through()).

DOM

  • Fixed NamedNodeMap::getNamedItemNS() with an empty URI not matching the null namespace in spec-following mode.
  • Fixed a use-after-free when cloning a DOMNameSpaceNode after DOMDocument::xinclude().
  • Fixed bug GH-23331 (UAF when node_list_unlink() skips attribute children that still have a live wrapper).
  • Fixed a use-after-free when Dom\Element::setAttributeNS() replaces the value of an attribute whose child still has a live wrapper.

GD

  • Fixed imageaffinematrixget() and imageaffinematrixconcat() reporting the wrong argument in error messages.
  • Fixed bug GH-23457 (imagebmp() is extremely slow when writing to a file).

FPM

  • Fixed bug GH-19320 (FPM UID and GID overflow).

Hash

  • Fixed a buffer overflow in hash_pbkdf2() with a large output length.

Intl

  • Fixed grapheme_strpos() and grapheme_strrpos() with an empty needle returning UTF-16 offsets instead of grapheme offsets.
  • Fixed a memory leak when dumping IntlCalendar instances.
  • Fixed a memory leak when iterating IntlBreakIterator::getPartsIterator() results.
  • Fixed a double-free when IntlGregorianCalendar construction fails after the ICU constructor adopts the TimeZone.
  • Fixed bug GH-23094 (NumberFormatter parsing offsets use UTF-16 positions for UTF-8 strings).
  • Fixed Locale::parseLocale() reading past a trailing '-' or '_'.
  • Fixed grapheme_str_split() treating UBRK_DONE as a byte index.
  • Fixed a leak in Locale::getKeywords() when a keyword value cannot be read.
  • Fixed a use-after-free when IntlRuleBasedBreakIterator is constructed from compiled rules.

MBString

  • Fixed mb_ereg_replace() emitting a NUL or out-of-bounds bytes in the replacement when a \k<name> backref has no closing delimiter.

ODBC

  • Fixed odbc_field_len(), odbc_field_scale() and odbc_field_type() returning uninitialized memory when SQLColAttribute fails.

Opcache

  • Fixed a crash when the huge page SHM remap discarded mappings outside the reserved address range.
  • Fixed opcache.protect_memory race under ZTS.
  • Fixed bug GH-23288 (Crash on restart when opcache.interned_strings_buffer is overridden in an individual FPM pool).
  • Fixed a tracing JIT crash when compiling a side trace for a method of a class that could not be stored in the inheritance cache.

PDO

  • Fixed a leak when a persistent connection failed a liveness check with no other live PDO handle.

PDO_ODBC

  • Fixed bug GH-23444 (ODBC_ATTR_ASSUME_UTF8 corrupts Unicode data outside Windows).

PDO_PGSQL

  • Fixed PDO::CURSOR_SCROLL statements closing a cursor that does not exist.

PDO Sqlite

  • Fixed bug GH-20214 (PDO::FETCH_DEFAULT unexpected behavior with PDOStatement::setFetchMode).

Phar

  • Fixed bug GH-23418 (Use-after-free when looking up mounted directories).
  • Fixed bug GH-23477 (Memory leak on duplicate native Phar manifest entries).

SNMP

  • Fixed bug GH-23453 (SNMP::setSecurity() frees a non-malloced address with a context engine ID longer than 32 bytes).

SOAP

  • Fixed bug GH-23447 (Segfault when a class passed to SoapServer::setClass() fails to initialize).
  • Fixed WSDL cache corruption when a soap:header defines headerfaults.
  • Fixed stack overflow when parsing a WSDL with self-referential schema groups or attributeGroups.

Standard

  • Fixed a segfault when a stream filter callback unsets StreamBucket::$data before re-attaching the bucket.
  • Fixed an out-of-bounds read when following a redirect response with an empty Location header.
  • Fixed a memory leak in array_merge_recursive() when the recursive merge of an object converted to an array fails.
  • Fixed read buffer compaction in php_stream_filter_flush().
  • Fixed bug GH-22410 (Incorrect float behavior with large numbers).
  • Fixed GH-23338 (fsockopen()/pfsockopen() ValueError reported wrong argument number for $timeout).
  • Fixed bug GH-23576 (Next index for array returned from array_keys() is wrong).

SimpleXML

  • Fixed writing to a dimension of the object returned by attributes() not creating the attribute.
  • Fixed child elements of the element returned by SimpleXMLElement::addChild() not being accessible by property name when namespaces are involved.

Zip

  • Fixed bug GH-23276 (ZipArchive subclass storing its own stream cannot be garbage collected).
  • Fixed ZipArchive::extractTo() and ZipArchive::getFrom*() reporting success on corrupted entries.
  • Fixed ZipArchive::getNameIndex() truncating the entry index to int.
  • Fixed fstat() on a zip:// stream reporting success when the archive cannot be opened.

SAPI

  • Fixed fuzzer targets failing to build in isolation.
  • Fixed returns uninitialized value on LiteSpeed lsapi SAPI (Go Kudo)