Project

General

Profile

Bug(バグ) #2336

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

Added by Hiroshi Kato over 11 years ago. Updated about 11 years ago.

Status:
Fixed(完了)
Priority:
Normal(通常)
Assignee:
Target version:
Start date:
2011-08-03
Due date:
% Done:

100%

3.6 で発生するか:
[QA]バグ通知済:
No
3.8 で発生するか:
Unknown (未調査)
opCommunityTopicPlugin 絞込条件:

Description

Overview (現象)

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

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

Causes (原因)

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

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

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

Way to fix (修正内容)

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

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

Note (補足)

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


Related issues

Related to OpenPNE 3 - Bug(バグ) #2106: 部分一致検索を行う箇所でワイルドカード検索ができてしまう Fixed(完了) 2011-05-17
Related to opCommunityTopicPlugin - Backport(バックポート) #2393: 部分一致検索を行う箇所でワイルドカード検索ができてしまう Fixed(完了) 2011-08-03

History

#1 Updated by Hiroshi Kato over 11 years ago

  • Status changed from New(新規) to Pending Review(レビュー待ち)
  • % Done changed from 0 to 50

#2 Updated by Shingo Yamada over 11 years ago

  • 360対象 set to RC1

#3 Updated by Shingo Yamada over 11 years ago

  • Target version set to 1.0.2

#4 Updated by Kousuke Ebihara about 11 years ago

  • Status changed from Pending Review(レビュー待ち) to Pending Testing(テスト待ち)
  • % Done changed from 50 to 70

master に取り込みました。ありがとうございます。問題ないと思います。

なお、 OpenPNE 3.4 でバンドルされている 0.9.x 系にも同様の変更をおこなう必要がありそうです。この変更はコア側に使用するメソッド群が定義されていないと効力はありませんが、その場合でもきちんと動作するようにコーディングされています。コアの安定版で #2106 が修正されるかどうかはわかりませんが、その可能性があることも考えてこの変更は入れておいた方がいいでしょう。ということで #2393 にバックポートチケットを作成しました。

#5 Updated by Yuma Sakata about 11 years ago

  • Status changed from Pending Testing(テスト待ち) to Rejected(差し戻し)
  • % Done changed from 70 to 50

テスト実施しましたが、修正が必要な点がありましたので確認お願いします。

管理画面でアンダースコアを含むコミュニティトピックの検索確認

  • 試験手順
    1. アンダースコアを含むコミュニティトピック、含まないコミュニティトピック(例:a_123、ab123、x_123、xb123)を作成する
    2. コミュニティトピックリストページ(/pc_backend.php/communityTopic/topicList)にアクセスする
    3. 手順1で作成したアンダースコアを含むコミュニティトピック(例:a_123)を検索する
  • 試験結果
    a_123、ab123が検索結果にヒットする。
  • 修正方針
    a_123のみ検索結果にヒットするように修正お願いします。
  • 備考
    • frontendは問題ありませんでした。
    • コミュニティイベントでも同様のバグがありますので、修正お願いします。

#7 Updated by Hiroshi Kato about 11 years ago

  • Status changed from Rejected(差し戻し) to Pending Review(レビュー待ち)

#8 Updated by Kousuke Ebihara about 11 years ago

  • Status changed from Pending Review(レビュー待ち) to Rejected(差し戻し)

add%sColumnQuery を使用するアプローチ、つまり LIKE に関する考慮が必要な name と body に対応する addNameColumnQuery および addBodyColumnQuery を定義して条件を追加するアプローチは採れないでしょうか。

(プルリクエストしていただいたコードにコメントをいくつかしていますが、このアプローチに変更すればあらかた解決すると思ったので途中で指摘をやめています)

#9 Updated by Hiroshi Kato about 11 years ago

  • Status changed from Rejected(差し戻し) to Pending Review(レビュー待ち)

add%sColumnQuery を使用するアプローチに変更しました。

#10 Updated by Kousuke Ebihara about 11 years ago

  • Status changed from Pending Review(レビュー待ち) to Pending Testing(テスト待ち)
  • % Done changed from 50 to 70

#11 Updated by Yuma Sakata about 11 years ago

  • Status changed from Pending Testing(テスト待ち) to Rejected(差し戻し)
  • % Done changed from 70 to 50

管理画面でアンダースコア、パーセントを含むコミュニティトピックを検索したのですが、他のコミュニティトピックも検索にヒットするので修正お願いします。
コミュニティイベントでも同様のバグがありますので、修正お願いします。

#12 Updated by Yuma Sakata about 11 years ago

  • Status changed from Rejected(差し戻し) to Fixed(完了)
  • % Done changed from 50 to 100

テストOKです。

Also available in: Atom PDF