てきとうなさいと べぇたばん

PHPカンファレンス 2022で登壇してきました & mb_strposのバグを踏んだ

TOP > てきとうにこらむ > ゲーム作りとプログラミング日記 > PHPカンファレンス 2022で登壇してきました & mb_strposのバグを踏んだ

スライドのまとめから。沼に沈みましょう

PHPカンファレンス 2022で登壇してきました

PHPカンファレンス2022に登壇してきました。トークのスライドは以下になります。

https://speakerdeck.com/youkidearitai/zhi-tuteikumbstring-shi-dai-nowen-zi-hua-ke

今回もオンラインで

最近だともうそろそろオフラインでも大丈夫そうかもということで、PHPカンファレンスもハイブリッドでしたね。ぼくは残念ながらいろいろな理由でオンラインとなりました。

特にmbstringという、RFCで話をせずにMajor overhaul of mbstringというプルリクエストのみという話だったため、情報交換がほしいところだったので惜しいことをしてしまいました…今度こそよろしくおねがいします。

まさかの廣川さんに拾ってもらう

PHPの今とこれから2022 PHP Conference Japan 2022

ビビってしまったのですが、mbstringのコントリビューターでもある廣川さんにもPHP 8.2の話をしているにも関わらずPHP 8.1のmbstringのSJISの修正の件が触れられ、更には「くわしくはてきめんさんのスライドへ」とまで名指しで紹介されるということまでありました。それほどMajor overhaul of mbstringの影響範囲が大きすぎる&誰もわかっていなかったということなんですが(わかってたら2021の8.1の新機能で話してたはず)、いや、まさか…っていう感じです。とんでもないことをしてしまったなあ

このことはPHP重鎮の廣川類氏によるコラム「PHPの最新状況:PHP 8.2採用の機能が決まる」(第25回)にもあったので、もしかするとこの件触れるかって思って見てましたがガッツリ触れてましたね…

実はブログどころではなかった

mb_substitute_character の影響範囲について

あのですね、連休中に mb_strcut がどうして mb_substitute_character の影響を受けないの?っていう話をトーク中でもしてたと思うんですが、mb_substitute_character の影響範囲を調べていました。そうすると、どうやら mb_substitute_character の影響範囲はマニュアルを超えていたことがわかりました。

  • mb_convert_case
  • mb_strtoupper
  • mb_strtolower
  • mb_stripos

3v4lでも試してみてください: https://3v4l.org/EfRD5

mb_strposmb_stripos が実は

mb_substitute_character のことを調べているうちに、ソースを読んでいくと「mb_strposって不正な文字バイトをぶっこんだらなんかおかしいことにならないか?」ってなってしまい、調べたらバグってました。バグの指摘をしたら「それは文字エンコーディングが違うから」という理由で一回closeされ、「お願いだ、これを読んでくれ」って感じでイリーガルなバイト列を生成して ? がマッチするケースを作成してReOpenしてもらうという事件があってハラハラものでした。

mb_strpos matches illegal character when needle is '?' #9613

ちなみに、これをライブ配信してたわ。

みんなでmbstringの沼に沈もうぜ!

バグ報告をPHPカンファレンスの翌日にやっていたせいで、ブログどころではありませんでした。とりあえずmbstringの沼に沈みませんか?