Fuzzer `php-fuzz-execute` crashes at `zend_lazy_object_init`
オープン
まだ誰も着手していません。
Bug
Category: Engine
Status: Verified
- 主要言語
- C
- スター
- 40.4k
- フォーク
- 8.2k
- 平均マージ
- 2日 13時間
- マージ済み PR(30日)
- 96
説明
Description
The following code:
<?php
class Test {
public function __isset($x) { $GLOBALS["obj"] = 24; return true; }
public function a($x) { }
}
$obj = new Test;
var_dump($obj->$name ?? 12);
?>
Resulted in this crashing call stack by the fuzzing driver php-fuzz-execute:
#6 __GI___assert_fail (assertion=0xdec74d "info", file=0xe24f2e "/src/php-src/Zend/zend_lazy_objects.c", line=110, function=0xe2576a "zend_lazy_object_info *zend_lazy_object_get_info(zend_object *)") at ./assert/assert.c:103
#7 zend_lazy_object_init () at Zend/zend_lazy_objects.c:513
#8 zend_std_read_property () at Zend/zend_object_handlers.c:954
#9 ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER () at Zend/zend_vm_execute.h:52811
#10 fuzzer_execute_ex () at sapi/fuzzer/fuzzer-execute-common.h:59
#11 zend_execute () at Zend/zend_vm_execute.h:64385
#12 fuzzer_do_request_from_buffer () at sapi/fuzzer/fuzzer-sapi.c:274
#13 LLVMFuzzerTestOneInput () at sapi/fuzzer/fuzzer-execute.c:27
PHP Version
dbabbe180b157eeaac5002276667f1f56f0b4def 2025-06-10 22:35:56+0200
Operating System
Linux
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
まず、提供されたスクリプトを php-fuzz-execute ドライバーで再現します。Zend/zend_lazy_objects.c の zend_lazy_object_init 周辺を読み、Zend/zend_object_handlers.c を通じてプロパティアクセスを追跡し、その後 sapi/fuzzer/fuzzer-execute-common.h と sapi/fuzzer/fuzzer-sapi.c の fuzzer エントリーポイントを確認します。reproducer が assertion を引き起こさなくなり、適切なテスト場所が特定された場合に回帰テストのカバレッジが追加されていれば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- c, php
- 領域
- backend, testing-qa
- issue の種類
- バグ
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 35/100