このガイドは、バグを修正することにより、PHPのコアに貢献する方法を説明しています。 CとPHPのバージョンの基本的な理解を仮定して、ワークフローに焦点を当てます。 新機能の提出物は、この記事の範囲外です。
重要な概念:
バグ#71635を修正しましょう(終了日が設定されていない場合はのセグフォールト)。
検証:DatePeriod::getEndDate()
3V4L(複数のPHPバージョンにわたってツールテストコード)を使用してバグが再現可能であるかどうかをすばやく確認します。これにより、影響を受けるバージョンを識別するのに役立ちます
fork、クローンを作成し、最新リリースに更新します。最も低い影響を受けた、
php/php-src
ビルドとリプロード:php-5.6
PHPを構築してスクリプトを実行します(例:git checkout -b fix-dateperiod-segfault upstream/php-5.6
segfault.php
テストの作成:<?php $period = new DatePeriod(new DateTimeImmutable("now"), new DateInterval("P2Y4DT6H8M"), 2); var_dump($period->getEndDate()); ?>
sapi/cli/php -n segfault.php
bug71635.phpt
ext/date/tests/
--TEST-- Bug #71635 (segfault in DatePeriod::getEndDate() when no end date has been set) --FILE-- <?php date_default_timezone_set('UTC'); $period = new DatePeriod(new DateTimeImmutable("now"), new DateInterval("P2Y4DT6H8M"), 2); var_dump($period->getEndDate()); ?> --EXPECT-- NULL
make test TESTS=ext/date/tests/bug71635.phpt
コード修正:コードを変更して、nullポインターを処理します。 たとえば、参照前にチェックを追加します
テストとコミット:テストを再実行(make test
)。 成功したら、変更をコミットします
pr:の提出。php/php-src
。
結論:
PHPコアバグの修正は、基本的なCの知識のみを必要とする貴重な貢献です。 実用的なプログラミングエクスペリエンスを提供し、PHPの改善に役立ちます。 何千ものオープンバグレポートがあるため、参加する十分な機会があります。
よくある質問(FAQ):(これらは簡潔さのために要約されています)
以上がPHPへの貢献:PHPコアでバグを修正する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。