ユーザー名の大文字が作曲者の到達可能なメンションチェックを破損させる

Private Topics Plugin - #109 by thoka の調査中に、大文字を含むユーザー名で制限付きカテゴリ内でのメンションが報告されないという事実に気づきました。

@SomeUser とメンションすると、エディターは /composer/mentions.json?names[]=SomeUser&topic_id=10728 を要求します。結果では、ユーザー名が小文字で返され、user_reasons が設定されていません。

小文字のユーザー名でクエリを実行すると、"user_reasons": {"someuser":"category"} が返されます。

コンポーザーでユーザー名を小文字で入力すると、権限が不十分なユーザーに対する警告が表示されます。

エディターが提供する自動補完を使用すると、入力された小文字のユーザー名が大文字の名前に置き換えられるため、警告が報告されなくなります。

「いいね!」 2

良い発見ですね @thoka

問題はここにあります

users{"username_lower" => User オブジェクト } を返します。

ただし、name が小文字化されていない場合、users[name] は存在しません。

修正:

if user = users[name.downcase]
...
elsif group = groups[name.downcase]
...

あるいはより良い方法として、メソッドの冒頭ですべての名前を小文字化することです。ここには多くの問題があります。groups.where("lower(name) IN (?)", @names.map(&:downcase)) を適切に処理していますが、visible_group_ids_for_allowed_checktopic_allowed_group_idsmentionable_group_idsmembers_visible_group_ids といった関数はすべて where(name: @names) を使用しており、これも大文字小文字の区別に関する問題を引き起こしています。

「いいね!」 3