を見てTrust Formプラグインのソース見たのですが、以下をサポートに投稿しようとしたら、うまくいっていないようなので、ここでメモっておきます。
ソースのいろいろなところで利用されているコード
foreach ( $this->name[0] as $key => $name ) {
if ( preg_match('/['.$name.']/i', $body) ) {
}
}
の部分など preg_matchを扱う場合において、データ($name)のチェックが足りないような気がします。
1. データなしの場合
preg_match('/[]/i', $body) の検索になってしまって、Warning: preg_match(): Compilation failed: missing terminating ] for character class at offset 2 in .....
のようなエラーがでます。
- [解決済み] Trustformフォーム送信後のWarningについて (WordPress.org)
で出てるエラーと同じですね。
2. 正規表現における「/」のエスケープ問題
- preg_match error in trust-form.php 送信完了画面でpreg_matchエラー?が表示されます(Trust Formサポート in WordPress.org)
のような問題がおこるかなぁと思います。
対処方法
以上の2つの対応については、
foreach ( $this->name[0] as $key => $name ) {
if ( !empty($name) && preg_match('/['. preg_quote($name).']/i', $body) ) {
}
}
あたりになるかと思います。
もう少しコードをわかりやすく分解すると
foreach ( $this->name[0] as $key => $name ) {
if(!empty($name)){
$name = preg_quote($name);
if ( && preg_match('/['. $name .']/i', $body) ) {
}
}
}
ということになります。
$nameが空じゃなく、$nameの / などpregに影響を及ぼす文字はエスケープするというのを、それぞれいれこむという感じです。
2015年6月7日 @kimipooh
とか書いてたら、開発者本人からプルリク〜ってお言葉が @_@!!
返信削除人生2度目のプルリクで、、、コード書くよりプルリク使い方わからなーい、、と悶える時間のほうが数倍かかってしまいました。なんとかプルリクしましたが,,,,,
プルリクを承認していただいたので次のバージョンでフィックスされるかなーと思います〜
返信削除https://github.com/horike37/Trust-Form/pulls