Skip to content

[pull] master from php:master#1084

Merged
pull[bot] merged 8 commits into
turkdevops:masterfrom
php:master
Jul 13, 2026
Merged

[pull] master from php:master#1084
pull[bot] merged 8 commits into
turkdevops:masterfrom
php:master

Conversation

@pull

@pull pull Bot commented Jul 13, 2026

Copy link
Copy Markdown

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

devnexen and others added 8 commits July 12, 2026 23:32
…dom access.

The loop never advanced past the current match, so a cold item($n) with
$n >= 1, or a backwards seek, returned the first match. Fixed by mirroring
dom_map_get_elements_item(): advance to the next match once per remaining index.

close GH-22701
* PHP-8.5:
  ext/dom: getElementsByClassName() item() returns wrong element on random access.
array_multisort() snapshotted each input array's buckets without holding a
reference, then ran a comparator that under SORT_STRING invokes
Stringable::__toString(); a callback that unset or reassigned the array freed
its backing store and elements mid-sort, a use-after-free read in the
comparator and a write-back through the freed table during the restructure.
Hold a reference on each input HashTable for the duration of the sort and
restructure the cached tables, mirroring zend_array_sort_ex() (GH-16648).
HT_ALLOW_COW_VIOLATION allows the in-place repack under the held reference.

Fixes GH-22678
Closes GH-22680
* PHP-8.4:
  Fix GH-22678: array_multisort() use-after-free on mutating comparator
* PHP-8.5:
  Fix GH-22678: array_multisort() use-after-free on mutating comparator
A user stream wrapper passed to a blocking or non-blocking FTP transfer can
re-enter the engine from its stream_read/stream_write handler while the
engine still holds the freed ftpbuf_t/databuf_t on the C stack, so the
transfer resumes on freed memory. Guard every operation that opens a data
connection with an in_use flag: ftp_close() throws while it is set, and the
transfer and listing functions refuse to run. The non-blocking checks sit
at the userland entry, before the wrapper mutates ftp->direction/stream, so
a rejected re-entrant call cannot corrupt the outer transfer; the nb cleanup
clears ftp->stream before closing the stream so a stream_close() that calls
ftp_close() cannot double-close it.

Closes GH-22400
* PHP-8.4:
  Fix use-after-free on re-entrant ftp_close() during a transfer
* PHP-8.5:
  Fix use-after-free on re-entrant ftp_close() during a transfer
@pull pull Bot locked and limited conversation to collaborators Jul 13, 2026
@pull pull Bot added the ⤵️ pull label Jul 13, 2026
@pull pull Bot merged commit 95a4724 into turkdevops:master Jul 13, 2026
1 check was pending
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants