😸

今週の PHP 2024-03-30 〜 2024-04-05

2024/04/07に公開

PHP のメーリングリストから、気になった情報をピックアップします。

Internal

Consider removing autogenerated files from tarballs - Externals

日本でも話題になっていたXZ Utilsの脆弱性についてです。ご存じでない方は下記のまとめをどうぞお

XZ Utilsの脆弱性 CVE-2024-3094 についてまとめてみた - piyolog

PHPのビルドプロセス内にXZ Utilsを経由した自動生成コードが含まれるのは危険であるという、もっともな懸念です。

対抗策としてビルドプロセス上位側で生成物への署名を行なって検証できるようにしようという話が出ています。サプライチェーンアタックというやつは、とにかく影響範囲が大きいものだと感じました。

PHP: rfc:integer-rounding

全会一致で否決されました。INTにできたらINTにするといった挙動はやはり暗黙的でわかりにくいので、可決は無理だろうなと思ってました。

[RFC][Concept] Data classes (a.k.a. structs) - Externals

データクラスという新しいRFCのアイデアについての投稿です。
オブジェクトの透過性とか、継承のときの挙動とか、オブジェクトがオブジェクトを保持した時の話とか、シリアライズしたらどうする??などのいわゆるDTO的なクラスに関するRFCアイデアの壁打ちのようなスレッドです。

readonlyクラスでファイナルアンサーかと思ってたのですが、まだまだ色々あるんだなと思いました。

[VOTE] PHP 8.4 Release Managers - Externals

PHP8.4のリリースマネージャーの投票開始です!投票期間は2023年4月2日15:00:00 UTCから2023年4月16日15:00:00 UTCです。

5名の中から2名が選ばれるます。選ばれた2名は3.5年の間リリースマネージャーとして責任を果たすことが期待されています。延長サポートのRFCが通ると4.5年です。

Requiring GPG Commit Signing - Externals

表題の通り、GPGでサインされたコミットを要求するようにしようというお便り。反応はさまざまですが、つい最近 XZ Utilsの脆弱性の話などもあったので、セキュリティに敏感になっているのかもしれません。でも、件の脆弱性はGPGサインでは防げないような。

GithubのコミットをGPGサイン有りに制限するとかって出来るのかな??ちょっと調べた感じではわかりませんでした。

PHP: rfc:mb_trim_change_characters

mb_trim, mb_rtrim, mb_ltrim の不具合修正に関するRFCです。今までにinternalsを読んできた感覚だとバグフィックスはRFCを要求しないような気もします。実際Timさんもそうした論調ですが、てきめんさんは実装内容に関する話し合いをしたいという思いがあるようです。

PHP: rfc:raising_zero_to_power_of_negative_number

0に対して負の数の乗数を指定した場合の挙動をDivisionByZeroErrorにしましょうというRFCです。IEE754の仕様に合わせるものです。投票が始まりましたが、可決されそうな雰囲気です。

PHP: rfc:class-naming-acronyms

クラス名はパスカルケースにしようね。メソッド名はキャメルケースにしようねという提案RFC
既存のクラスは影響を受けず、8.4以降に影響を持つという話です。

まあ、たとえば htmlspecialcharsとかあるしね。

こういう共通ルールはぜひ可決されてほしいです。

RFC idea: using the void type to control maximum arity of user-defined functions - Externals

既存影響が大きそうな「非可変引数関数に対して余分な引数を渡すことを非推奨にするかどうか」という話し合いスレッドです。

既存はユーザー定義関数が引数を受け取るかどうかにかかわらず実行できます。

https://3v4l.org/0CkdP

引数が少ない場合はエラーになりますが、多い場合は実行できてしまいます。 void というキーワードを使うことで多く指定した場合にワーニング出すようにというのが提案です。

議論としては、賛否ありという感じです。個人的には見た目がアレだなと思いました。

    function foo (void) {}
    foo(42); // warning: foo() expects exactly 0 arguments, 1 given

    function bar ($a, $b, void) {}
    bar(1, 2, 3); // warning: bar() expects exactly 2 arguments, 3 given

    function baz ($a, $b=null, void) {}
    baz(1, 2, 3); // warning: baz() expects at most 2 arguments, 3 given

Discussion