-
Notifications
You must be signed in to change notification settings - Fork 98
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
strlen($val) をどうするか #999
Comments
美しくないですが 以下で Resolution になってます |
PHP の言語仕様上、$_REQUEST 等の要素に配列が入り得るので、そこの考慮は必要だと考えます。 EC-CUBE では
|
EC-CUBE本体側では、配列を受け取る可能性はほとんど排除されていると思っていましたが、よくよく考えると独自カスタマイズやプラグイン等を組み合わせた場合に排除しきれないですね... おそらく、PHP9 で現在の Warning は Fatal に格上げされるので、 |
あと、悪意を持って配列を流されたケースも気になります。後続の処理との不整合で最悪脆弱性となる懸念も無くはないかなと。 確かに PHP 9 を考慮すると、エラー制御演算子ではダメそうですね。そうなると消去法でベースは Null 合体演算子で、あとは PHP 7.4 での配列パターンをケアするか否かでしょうか。 ただ、PHP 9 を踏まえると、未定義変数に関しては Fatal の挙動が望ましい気がしてきました。 配列の未定義要素は微妙ですね。ざっくり grep すると、EC-CUBE のリポジトリ内で strlen(), mb_strlen() を配列要素に使っているのは、81 箇所ありそうです。 配列要素の場合のみ Null 合体演算子を使うなども考えられそうです。 ただ、画一的に使うのが良いのかは悩ましいですね。PHP 9 を踏まえると、strlen() 固有の問題では無くなり、strlen() 以外では null を想定している場合もありそうですし。 |
#996 で、
strlen($val)
は除外となったものの、気になる部分なので、備忘録を兼ねて。strlen($val)
は、挙動としては妥当なことが多いと思います。ただ、未定義な変数・要素の警告が、Warning に格上げされていることもあり、黙殺も難しくなっている認識です。一方で、対象箇所も多いので、都度
isset($val)
するなども冗長で避けたいです。あと、PHP 7.4 では、配列などが入った場合の挙動も気になります。
思いつく折衷案として・・・
PHP 7.4 に関して目を瞑れば、既存の処理のまま
strlen(@$val)
で良い気もしてきました。何れにしても、今どきのエラー制御演算子のコストは、ちょっと気になります。
The text was updated successfully, but these errors were encountered: