ext/date truncates error messages with null bytes
まだ誰も着手していません。
- 主要言語
- C
- スター
- 40.4k
- フォーク
- 8.2k
- 平均マージ
- 2日 13時間
- マージ済み PR(30日)
- 96
説明
date_throw_uninitialized_error() (C function):
<?php
$o = new class extends DateTime {
public function __construct() {}
};
var_dump(get_class($o));
$o->format("");
OnUpdate_date_timezone ini handler:
<?php
ini_set("date.timezone", "foo\0bar");
php_date_initialize() (C function):
<?php
new DateTimeImmutable("foo\0bar");
php_date_modify() (C function):
<?php
$now = new DateTime();
$now->modify("foo\0bar");
date_interval_initialize() (C function):
<?php
new DateInterval("foo\0bar");
php_date_interval_initialize_from_hash() (C function):
<?php
var_dump(unserialize("O:12:\"DateInterval\":2:{s:11:\"from_string\";b:1;s:11:\"date_string\";s:7:\"foo\0bar\";}"));
date_interval_create_from_date_string() (C function):
<?php
date_interval_create_from_date_string("foo\0bar");
DateInterval::createFromDateString():
<?php
DateInterval::createFromDateString("foo\0bar");
date_period_initialize() (C function):
<?php
DatePeriod::createFromISO8601String("foo\0bar");
date_period_initialize() (C function):
<?php
DatePeriod::createFromISO8601String("foo\0bar");
date_default_timezone_set():
<?php
date_default_timezone_set("foo\0bar");
date_period_unset_property() (C function):
<?php
$o = new class() extends DatePeriod {
public function __construct() {}
};
unset($o->start);
Tested with 3v4l
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
ext/date の実装で、指定された C 関数から開始し、提供された PHP スニペットを使って列挙された null バイトのケースを再現します。各エラーメッセージがどのように構築されるかを追跡し、その後、影響を受けるパスのカバレッジを追加して、生成されたメッセージが関連する入力を保持していることを確認します。date 拡張機能のテストを実行して、列挙されたすべてのエントリポイントを確認します。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- c, php
- 領域
- backend
- issue の種類
- バグ
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 静か
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 55/100