Bug(バグ) #2336
完了部分一致検索を行う箇所でワイルドカード検索ができてしまう
100%
説明
Overview (現象)¶
メンバー画面の「メンバー検索」や「コミュニティ検索」、あるいは管理画面の「メンバー管理」などでは、ニックネームやキーワード等で部分一致検索が行える。ここで、アンダースコア("_")やパーセント("%")を含めて検索すると、文字としてではなくメタ文字(ワイルドカード)として検索が行なわれてしまう。
これは仕様と考えれば問題ではないと言えるが、この動作は意図した仕様ではなく、不具合として扱うべきであると考えられる。
Causes (原因)¶
LIKE検索を行っている箇所では
$query->addWhere('name LIKE ?', '%'.$value.'%');
のように(部分一致)検索文字列として入力された値を直接渡しているためメタ文字がそのままメタ文字として扱われてしまっている。
Way to fix (修正内容)¶
LIKE検索は関数化されていない(LIKEメソッドがあるわけではない)ため、LIKE文を用いている箇所全てで入力文字列中のメタ文字をエスケープするか、最終的にSQLが生成される時点でエスケープを施すという対応が考えられる。
具体的な修正箇所や修正方針については検討できていない。
Note (補足)¶
バックスラッシュを含む文字列での検索についての挙動も気になる。例えば "foo\bar" というニックネームのメンバーがいる場合、メンバー検索で "foo" と検索すればヒットするが、 "foo\" と検索してもヒットせず、 "foo\\" と検索するとヒットするような動作を確認している。
Hiroshi Kato さんが13年以上前に更新
- ステータス を New(新規) から Pending Review(レビュー待ち) に変更
- 進捗率 を 0 から 50 に変更
pull request出しました。
https://github.com/tejimaya/opCommunityTopicPlugin/pull/2
Kousuke Ebihara さんが約13年前に更新
- ステータス を Pending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
- 進捗率 を 50 から 70 に変更
Yuma Sakata さんが約13年前に更新
- ステータス を Pending Testing(テスト待ち) から Rejected(差し戻し) に変更
- 進捗率 を 70 から 50 に変更
テスト実施しましたが、修正が必要な点がありましたので確認お願いします。
管理画面でアンダースコアを含むコミュニティトピックの検索確認¶
- 試験手順
1. アンダースコアを含むコミュニティトピック、含まないコミュニティトピック(例:a_123、ab123、x_123、xb123)を作成する
2. コミュニティトピックリストページ(/pc_backend.php/communityTopic/topicList)にアクセスする
3. 手順1で作成したアンダースコアを含むコミュニティトピック(例:a_123)を検索する
- 試験結果
a_123、ab123が検索結果にヒットする。
- 修正方針
a_123のみ検索結果にヒットするように修正お願いします。
- 備考
- frontendは問題ありませんでした。
- コミュニティイベントでも同様のバグがありますので、修正お願いします。
Hiroshi Kato さんが約13年前に更新
pull request 出しました。
https://github.com/tejimaya/opCommunityTopicPlugin/pull/4
Kousuke Ebihara さんが約13年前に更新
- ステータス を Pending Review(レビュー待ち) から Rejected(差し戻し) に変更
add%sColumnQuery を使用するアプローチ、つまり LIKE に関する考慮が必要な name と body に対応する addNameColumnQuery および addBodyColumnQuery を定義して条件を追加するアプローチは採れないでしょうか。
(プルリクエストしていただいたコードにコメントをいくつかしていますが、このアプローチに変更すればあらかた解決すると思ったので途中で指摘をやめています)
Hiroshi Kato さんが約13年前に更新
- ステータス を Rejected(差し戻し) から Pending Review(レビュー待ち) に変更
add%sColumnQuery を使用するアプローチに変更しました。
Kousuke Ebihara さんが約13年前に更新
- ステータス を Pending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
- 進捗率 を 50 から 70 に変更
Yuma Sakata さんが約13年前に更新
- ステータス を Pending Testing(テスト待ち) から Rejected(差し戻し) に変更
- 進捗率 を 70 から 50 に変更
管理画面でアンダースコア、パーセントを含むコミュニティトピックを検索したのですが、他のコミュニティトピックも検索にヒットするので修正お願いします。
コミュニティイベントでも同様のバグがありますので、修正お願いします。