今週の PHP 2023-02-11 〜 2023-02-17
PHP のメーリングリストから、気になった情報をピックアップします。
Internal
[VOTE] include cleanup - Externals
否決されました。
話が、include の改善という話からそれてしまって、正しさの押しつけみたいになってしまいました。
PHP が多くの人に使われているため、合議制で決めていこうというプロセス自体は、専横的に素早く改善を求める考えとは相性が悪いです。
コミュニティの難しさを感じる一連のやりとりです。
RFC プロセスとしては否決されたのですが、改善を行おうとする新しい貢献者をどのようにして受け入れるかみたいなところで、まだ話し合いは続くように見えます。
PHP: rfc:saner-array-sum-product
array_sum
, array_product
において、厳密な型チェックを行うようにしましょうという RFC ですが、そろそろ投票が始まりそうです。
気になるのは、あまり議論が活発にならなかったなというところです。RFC 作者も何かを感じているようで、「そろそろ...... 投票はじめちゃうよ?」っていうジャブを打っています。
リリース
今回のリリースは、不具合修正の取り込みのみだったので、各バージョンで同じ修正が取り込まれています。
8.2.3
8.1.16
8.0.28
[RFC] Working With Substrings - Externals
実に面白そうな substring
に関する RFC
https://wiki.php.net/rfc/working_with_substrings
str_splice()
str_realloc()
php_adjust_substr_offset_length()
explode() with substring
str_split() with substring
fread_mem()
fwrite() with substring
hash() with substring
hash_hmac() with substring
この RFC のコアなコンセプトは文字列操作において、コピーオンライトによって生じるパフォーマンス劣化に対応できるようにするというものです。
コピーオンライトは、ユーザーが文字列に対して変更を加える際に、ZendVM 側で行われる処理ですが、特に大きな文字列を処理するときや、1バイトずつ文字列を処理する場合などに、パフォーマンスの劣化が見られるということです。
現状、コメントはある程度の盛り上がりを見せていまして、RFC の内容のブラッシュアップが行われています。
Bugs
Built-in server assumes path with dot is a file · Issue #10578 · php/php-src
ビルトインサーバーにおいて、ドットつきの PATH がファイルだと仮定されてしまうという不具合。
$ curl http://localhost:8000/
$ curl http://localhost:8000/O_o
$ curl http://localhost:8000/O.o
このコード例でいうと、3番目の例がファイルとご判断されます。すでに PR が出ていたのですが、なぜかクローズされてしまっていて不具合が残っていたようです。
https://bugs.php.net/bug.php?id=74061&edit=1
Apache crash on Windows when using a self-referencing anonymous function inside a class with an active mysqli connection · Issue #10599 · php/php-src
自己参照する無名関数を内包するクラスが、アクティブな mysqli 接続を保持していると、Apache がクラッシュするという、謎掛けのようなイシュー。
PHP 7.4 以降で、かつWindows のみの現象ということです。
似たようなイシューが出ていたので、関連があるかと思ったのですが、こちらは使ってなさそうな pthreads
拡張が ON にされているのが原因っぽいので無関係そう
https://github.com/php/php-src/issues/10601
DoS vulnerability when parsing multipart request body · Advisory · php/php-src
PHP に DoS 攻撃の脆弱性の報告。
CVE-2023-0662
要約すると
- リモートから認証されてないユーザーが行える DoS 脆弱性
- デフォルトの本番設定 (php.ini) が影響を受ける
- post_max_size が 0 に設定されていなければ、影響がある
- POST を受け付けるすべてのウェブサイトに影響がある
multipart のリクエストボディのパースで、巨大な body を渡された時に、パースしまくって CPU を消費させられて、他のリクエストを受け付けられなくするような攻撃が可能。と
Misleading error message on popen() when /bin/sh is missing · Issue #8240 · php/php-src
popen()
が分かりづらいメッセージを出すというイシュー。
glibc 側のエラー設定の問題だったということで、glibc側の修正にて Fix
Discussion