Lazy object reset with object destructor can lead to use-after-free
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
調査の方向性
Start by reading Zend/zend_lazy_objects.c around zend_object_make_lazy at line 338, then compare the resetAsLazyGhost() and resetAsLazyProxy() paths with the related re-entrant destruction issue #22399. Reproduce with the supplied PHP snippet under AddressSanitizer; done means both reset methods avoid the heap-use-after-free.
索引モデルが issue の本文から書いたものです。
説明
Description
Originally reported by @cnwangjihe.
The re-entrant property destruction issue reported in #22399 also affects ReflectionClass::resetAsLazyGhost() and ReflectionClass::resetAsLazyProxy().
The following code:
<?php
class Target {
public ?Trigger $trigger = null;
}
class Trigger {
public function __construct(private object $target) {}
public function __destruct() {
unset($this->target->trigger);
}
}
$reflection = new ReflectionClass(Target::class);
$target = new Target();
$target->trigger = new Trigger($target);
$reflection->resetAsLazyGhost($target, static function (): void {});
Resulted in this output:
ERROR: AddressSanitizer: heap-use-after-free
zend_object_make_lazy Zend/zend_lazy_objects.c:338
But I expected this output instead:
PHP Version
PHP 8.4+
Operating System
No response
- 主要言語
- C
- スター
- 40.7k
- フォーク
- 8.3k
- 平均マージ
- 2日 16時間
- マージ済み PR(30日)
- 151
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートなし
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
php/php-src のほかの issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
メンテナーはふだん 1 日以内に返信
-
Case-insensitive substr_compare, ksort, krsort are still locale-dependent対応中かも @lazerg が 3 日前に担当しました。 オープンBug Extension: standard Status: Verified
難易度 2/5 1〜3時間 初心者へのやさしさ 73/100
php/php-src#24552 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
master: part of the mbstring bailout fix got lost in a merge対応中かも @lazerg が 3 日前に担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
メンテナーはふだん 1 日以内に返信
-
Bug Status: Needs Triage
難易度 2/5 1〜3時間 初心者へのやさしさ 64/100
メンテナーはふだん 1 日以内に返信
-
quoted_printable_encode() produces lines longer than 76 characters for bytes 0xF5 to 0xFF対応中かも このイシューにリンクされたプルリクエストがオープン中、またはマージ済みです。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
メンテナーはふだん 1 日以内に返信
似ている issue
-
priority:medium type:chore
難易度 1/5 1〜3時間 初心者へのやさしさ 84/100
crazy-goat/php-fpm-ng#1041 ·
メンテナーはふだん 1 日以内に返信
-
Test failure on FreeBSD: #26 unexpected system_clock source対応中かも このイシューにリンクされたプルリクエストがオープン中、またはマージ済みです。 オープンlow priority rt_lib tests
難易度 2/5 1〜3時間 初心者へのやさしさ 67/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 85/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 85/100