プロジェクト

全般

プロフィール

Bug(バグ) #2337

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

Hiroshi Kato12年以上前に追加. 12年以上前に更新.

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

100%

3.6 で発生するか:
[QA]バグ通知済:
いいえ
3.8 で発生するか:
Unknown (未調査)

説明

Overview (現象)

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

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

Causes (原因)

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

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

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

Way to fix (修正内容)

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

具体的な修正箇所や修正方針については検討できていない。

Note (補足)

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


関連するチケット

関連している OpenPNE 3 - Bug(バグ) #2106: 部分一致検索を行う箇所でワイルドカード検索ができてしまう Fixed(完了) 2011-05-17
関連している opDiaryPlugin - Bug(バグ) #2600: 管理画面の日記コメントリストで日記ID以外で検索実行した場合結果がヒットしない Accepted(着手) 2011-11-15
関連している opDiaryPlugin - Backport(バックポート) #2804: 部分一致検索を行う箇所でワイルドカード検索ができてしまう Fixed(完了) 2011-08-03

関係しているリビジョン

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

added escape function to like query. (fixes #2337)

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

moved function of DoctrineQuery::andWhere() to opDoctrineQuery::andWhereLike() and Doctrine_Formatter::escapePattern() to opDoctrineQuery::escapePattern(). (fixes #2337)

履歴

#1 Hiroshi Kato12年以上前に更新

#2 Hiroshi Kato12年以上前に更新

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

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

#3 Shingo Yamada12年以上前に更新

  • 360対象RC1 にセット

#4 Hiroshi Kato12年以上前に更新

  • 対象バージョン205 にセット

#5 Hiroshi Kato12年以上前に更新

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

#6 Rimpei Ogawa12年以上前に更新

  • 対象バージョン205 から v1.4.0 に変更

#7 Rimpei Ogawa12年以上前に更新

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

Pull request 取り込みました。

#8 Yuma Sakata12年以上前に更新

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

テストOKです。

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