الأحرف الكبيرة في اسم المستخدم تكسر فحص الذكر القابل للوصول في المحرر

أثناء التحقيق في https://meta.discourse.org/t/private-topics-plugin/268646/109، اكتشفت أن الإشارة إلى مستخدم في فئة مقيدة لا يتم الإبلاغ عنها عندما يحتوي اسم المستخدم على أحرف كبيرة.

عند الإشارة إلى @SomeUser، يطلب المحرر
/composer/mentions.json?names[]=SomeUser&topic_id=10728
في النتيجة، يُعاد اسم المستخدم بحروف صغيرة، دون تعيين user_reasons.

الاستعلام عن اسم المستخدم بحروف صغيرة يُرجع "user_reasons": {"someuser":"category"}.

إذا استخدمت أحرفًا صغيرة لأسماء المستخدمين في المحرر، فسيتم عرض تحذيرات للأشخاص الذين لا يملكون الصلاحيات الكافية.

إذا استخدمت الإكمال التلقائي الذي يوفره المحرر، فسيتم استبدال أسماء المستخدمين المكتوبة بحروف صغيرة بأسماء بحروف كبيرة، وبالتالي لن يتم الإبلاغ عنها.

3 إعجابات

اكتشاف رائع @thoka!

المشكلة هنا

users تُرجع {"username_lower" => كائن مستخدم }

ومع ذلك، إذا لم يتم تحويل 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_check، وtopic_allowed_group_ids، وmentionable_group_ids، وmembers_visible_group_ids تستخدم جميعها where(name: @names)، مما يُدخل مشكلات تتعلق بحساسية الأحرف أيضًا.

3 إعجابات

الإصلاح الصحيح هو

لكنه تغيير كبير جدًا لأكون مرتاحًا لدمجه في هذه المرحلة :grimacing:

بدلاً من ذلك، سأقوم بإصلاح كل “نقطة نهاية” على حدة لتبسيط المراجعة وتقليل المخاطر.

إليك الخطوة الأولى

7 إعجابات

منذ إعادة بناء Discourse للـ 188 التزام من 645cb014c0 إلى 102c93e2ea، لاحظت تراجعًا جديدًا داخل محرر Markdown.

هذه النافذة المنبثقة لا تعني شيئًا، لكنها تظهر في كل مرة أحاول فيها استدعاء وكيلي المخصص @Forum_Research_Assis.

أستطيع تكرار هذه المشكلة بشكل متسق كما هو موضح في فيديو التكرار:

أعتقد أن هذا الالتزام نفسه يفتقر إلى المنطق لتجاوز الحالة عندما يذكر المستخدم وكيلًا ذكيًا.

أنا مستعد لبدء طلب سحب آخر عندما تكون جاهزًا، رغم أنني أملك بالفعل طلب سحب مفتوحًا على حسابي الوحيد على GitHub.

إعجاب واحد (1)

يبدو أن «الإصلاح» الذي قمت به كشف عن هذه المشكلة لوكلاء الذكاء الاصطناعي :thinking:

3 إعجابات