🙌

今週の PHP 2023-02-11 〜 2023-02-17

2023/02/27に公開

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

Internal

[VOTE] include cleanup - Externals

PHP: rfc:include_cleanup

否決されました。
話が、include の改善という話からそれてしまって、正しさの押しつけみたいになってしまいました。
PHP が多くの人に使われているため、合議制で決めていこうというプロセス自体は、専横的に素早く改善を求める考えとは相性が悪いです。

コミュニティの難しさを感じる一連のやりとりです。

RFC プロセスとしては否決されたのですが、改善を行おうとする新しい貢献者をどのようにして受け入れるかみたいなところで、まだ話し合いは続くように見えます。

PHP: rfc:saner-array-sum-product

array_sum, array_product において、厳密な型チェックを行うようにしましょうという RFC ですが、そろそろ投票が始まりそうです。

気になるのは、あまり議論が活発にならなかったなというところです。RFC 作者も何かを感じているようで、「そろそろ...... 投票はじめちゃうよ?」っていうジャブを打っています。

リリース

今回のリリースは、不具合修正の取り込みのみだったので、各バージョンで同じ修正が取り込まれています。

8.2.3

https://www.php.net/ChangeLog-8.php#8.2.3

8.1.16

https://www.php.net/ChangeLog-8.php#8.1.16

8.0.28

https://www.php.net/ChangeLog-8.php#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

https://sourceware.org/bugzilla/show_bug.cgi?id=29016

Discussion