プロジェクト

全般

プロフィール

Backport(バックポート) #2108

部分一致検索を行う箇所でワイルドカード検索ができてしまう

Minoru Takaiほぼ13年前に追加. 12年以上前に更新.

ステータス:
Fixed(完了)
優先度:
Normal(通常)
担当者:
対象バージョン:
開始日:
2011-05-17
期日:
進捗率:

100%


説明

Overview (現象)

メンバー画面の「メンバー検索」や「コミュニティ検索」、あるいは管理画面の「メンバー管理」などでは、ニックネームやキーワード等で部分一致検索が行える。ここで、アンダースコア("_")やパーセント("%")を含めて検索すると、文字としてではなくメタ文字(ワイルドカード)として検索が行なわれてしまう。

これは仕様と考えれば問題ではないと言えるが、この動作は意図した仕様ではなく、不具合として扱うべきであると考えられる。

Causes (原因)

LIKE検索を行っている箇所では

$query->addWhere('name LIKE ?', '%'.$value.'%');

のように(部分一致)検索文字列として入力された値を直接渡しているためメタ文字がそのままメタ文字として扱われてしまっている。

Way to fix (修正内容)

LIKE検索は関数化されていない(LIKEメソッドがあるわけではない)ため、LIKE文を用いている箇所全てで入力文字列中のメタ文字をエスケープするか、最終的にSQLが生成される時点でエスケープを施すという対応が考えられる。

opDoctrineQuery クラスに LIKE 検索用のメソッドを作成し、それを各所で使用するように書き換える。このチケットではコアのみを扱う。

なお、このチケットで「意図しないワイルドカード検索ができてしまう問題」を解消するのは MySQL を使っている場合とする(仮に他のDBで問題が解消されていなくても MySQL でさえ解消されていれば良いものとする)。

Note (補足)

バックスラッシュを含む文字列での検索についての挙動も気になる。例えば "foo\bar" というニックネームのメンバーがいる場合、メンバー検索で "foo" と検索すればヒットするが、 "foo\" と検索してもヒットせず、 "foo\\" と検索するとヒットするような動作を確認している。


関連するチケット

関連している OpenPNE 3 - Bug(バグ) #2106: 部分一致検索を行う箇所でワイルドカード検索ができてしまう Fixed(完了) 2011-05-17
関連している OpenPNE 3 - Backport(バックポート) #2109: 部分一致検索を行う箇所でワイルドカード検索ができてしまう Fixed(完了) 2011-05-17 2011-10-06

関係しているリビジョン

リビジョン eb3383af (差分)
Hiroshi Kato12年以上前に追加

overridden the constructor method in Doctrine_Formatter.
added escape function to like query. (fixes #2108, BP from #2106)

リビジョン 133a648b (差分)
Hiroshi Kato12年以上前に追加

Revert "overridden the constructor method in Doctrine_Formatter.
added escape function to like query. (fixes #2108, BP from #2106)"

This reverts commit b3ac7f2ea6761311afa7c267605c40d2eef78c18.

リビジョン 86c35c07 (差分)
Hiroshi Kato12年以上前に追加

added function for 'where like' query in opDoctrineQuery class. (fixes #2108, BP from #2106)

Conflicts:

lib/util/opDoctrineQuery.class.php

リビジョン af2ea8e2 (差分)
Hiroshi Kato12年以上前に追加

added function whereLike() to like query.(fixes #2108, BP from #2106)

リビジョン 6592d9b1 (差分)
Hiroshi Kato12年以上前に追加

fixed for code review.(fixes #2108, BP from #2106) * changed class constants value in opDoctrineQuery. * fixed for coding standard. * fixed for exact match.

履歴

#1 Minoru Takaiほぼ13年前に更新

  • 対象バージョンOpenPNE3.6beta11 にセット

3.6 向けとします。

#2 Kousuke Ebiharaほぼ13年前に更新

  • 対象バージョンOpenPNE3.6beta11 から OpenPNE3.6beta12 に変更

親チケットが「テスト待ち」「完了」でないものをすべて beta12 以降での対応とします。

#3 Shingo Yamada12年以上前に更新

  • 対象バージョンOpenPNE3.6beta12 から OpenPNE3.6beta13 に変更

#4 Maki Takahashi12年以上前に更新

  • ステータスNew(新規) から Accepted(着手) に変更

#5 Hiroshi Kato12年以上前に更新

  • ステータスAccepted(着手) から Pending Review(レビュー待ち) に変更
  • 進捗率0 から 50 に変更

更新履歴 eb3383af9e8fdef853037086e4750698e7075d7f で適用されました。

#6 Maki Takahashi12年以上前に更新

  • 担当者Maki Takahashi にセット

#7 Minoru Takai12年以上前に更新

  • ステータスPending Review(レビュー待ち) から Rejected(差し戻し) に変更

親チケットを差し戻したため、こちらのチケットも差し戻しにしておきます。 http://redmine.openpne.jp/issues/2106#note-10

#8 Maki Takahashi12年以上前に更新

  • ステータスRejected(差し戻し) から Accepted(着手) に変更

#9 Hiroshi Kato12年以上前に更新

  • ステータスAccepted(着手) から Pending Review(レビュー待ち) に変更

更新履歴 af2ea8e2afb2e242e9d63880d4d8dcc6c995d7a6 で適用されました。

#10 Hiroshi Kato12年以上前に更新

更新履歴 86c35c07518227b17684447d6e1d4b2a5be225ed で適用されました。

#11 Hiroshi Kato12年以上前に更新

更新履歴 133a648b365337f662e8d8a9502b6a7be2b48f52 で適用されました。

#12 Yuma Sakata12年以上前に更新

テスト実施のため、こちらのコミットログ 133a648b365337f662e8d8a9502b6a7be2b48f52 を release-3.6beta13 ブランチに取り入れてください。
以上、よろしくお願いします。

#13 Minoru Takai12年以上前に更新

  • 説明 を更新 (diff)

#14 Minoru Takai12年以上前に更新

  • ステータスPending Review(レビュー待ち) から Rejected(差し戻し) に変更

親チケットを http://redmine.openpne.jp/issues/2106#note-16 で差し戻したため、こちらも差し戻しにしておきます。

#15 Hiroshi Kato12年以上前に更新

  • ステータスRejected(差し戻し) から Pending Review(レビュー待ち) に変更

更新履歴 6592d9b1e7e192a794c88397ff6ac37d0561b56e で適用されました。

#16 Minoru Takai12年以上前に更新

  • ステータスPending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
  • 進捗率50 から 70 に変更

stable-3.6.x 向けの修正としてレビューしました。 master ブランチと同一の修正が施されていることを確認しました。本件に関連するコードについて master と 3.6.x では異なる箇所がなく、修正箇所についても同一でよいと認識しているので note-15 のコミットを以てレビュー OK とします。

#17 Yuma Sakata12年以上前に更新

  • ステータスPending Testing(テスト待ち) から Fixed(完了) に変更
  • 進捗率70 から 100 に変更

テストOKです。

他の形式にエクスポート: Atom PDF