Bug(バグ) #2338
[PATCH][etc] 部分一致検索を行う箇所でワイルドカード検索ができてしまう
100%
説明
Overview (現象)¶
メンバー画面の「メンバー検索」や「コミュニティ検索」、あるいは管理画面の「メンバー管理」などでは、ニックネームやキーワード等で部分一致検索が行える。ここで、アンダースコア("_")やパーセント("%")を含めて検索すると、文字としてではなくメタ文字(ワイルドカード)として検索が行なわれてしまう。
これは仕様と考えれば問題ではないと言えるが、この動作は意図した仕様ではなく、不具合として扱うべきであると考えられる。
Causes (原因)¶
LIKE検索を行っている箇所では
$query->addWhere('name LIKE ?', '%'.$value.'%');
のように(部分一致)検索文字列として入力された値を直接渡しているためメタ文字がそのままメタ文字として扱われてしまっている。
Way to fix (修正内容)¶
LIKE検索は関数化されていない(LIKEメソッドがあるわけではない)ため、LIKE文を用いている箇所全てで入力文字列中のメタ文字をエスケープするか、最終的にSQLが生成される時点でエスケープを施すという対応が考えられる。
具体的な修正箇所や修正方針については検討できていない。
Note (補足)¶
バックスラッシュを含む文字列での検索についての挙動も気になる。例えば "foo\bar" というニックネームのメンバーがいる場合、メンバー検索で "foo" と検索すればヒットするが、 "foo\" と検索してもヒットせず、 "foo\\" と検索するとヒットするような動作を確認している。
関連するチケット
関係しているリビジョン
added escape function to like query. (fixes #2338)
moved function of DoctrineQuery::andWhere() to opDoctrineQuery::andWhereLike(). (fixes #2338)
added escape function to like query. (fixes #2338)
This patch uses opDoctrineQuery::andWhereLike() method that was
added in OpenPNE-3.6beta13.
added escape function to like query. (fixes #2338)
This patch uses opDoctrineQuery::andWhereLike() method that was
added in OpenPNE-3.6beta13.
(cherry picked from commit 52c33a2c7f2de4cac903c89e651afaa12dfdeae7)
履歴
#1 Hiroshi Kato が12年以上前に更新
- ステータス を New(新規) から Pending Review(レビュー待ち) に変更
- 進捗率 を 0 から 50 に変更
更新履歴 54727a89355a499a59089cf141bb1463d861e27d で適用されました。
#2 Hiroshi Kato が12年以上前に更新
pull request 出しました。
https://github.com/openpne-ospt/opOpenSocialPlugin/pull/23
#3 Shingo Yamada が12年以上前に更新
- 360対象 を RC1 にセット
#4 Shingo Yamada が12年以上前に更新
- 対象バージョン を 1.3.3 にセット
#5 Hiroshi Kato が12年以上前に更新
更新履歴 4d1dce437b38157c2bab17b29b2e69309a0919f2 で適用されました。
#6 Shogo Kawahara が12年以上前に更新
- 題名 を 部分一致検索を行う箇所でワイルドカード検索ができてしまう から [PATCH][etc] 部分一致検索を行う箇所でワイルドカード検索ができてしまう に変更
#7 Hiroshi Kato が12年以上前に更新
更新履歴 52c33a2c7f2de4cac903c89e651afaa12dfdeae7 で適用されました。
#8 Youichi Kimura が12年以上前に更新
- ステータス を Pending Review(レビュー待ち) から Fixed(完了) に変更
- 進捗率 を 50 から 100 に変更