このバグは Skip review media groups(メディアグループのレビューをスキップ)設定に関するものです。
モバイル端末から画像を投稿すると、画像のアップロードは成功し、投稿本文には画像の参照が正しく含まれます(例:
)。
しかし、その後の POST /posts リクエストには以下が含まれています:
“image_sizes”: {}
サーバー側のメディアレビューチェックは、manager.args[:image_sizes].present? の場合のみ実行されます:
if manager.args[:image_sizes].present? &&
!user.in_any_groups?(SiteSetting.skip_review_media_groups_map)
return :contains_media
end
Ruby では空のハッシュは present? とみなされないため、投稿はメディアを含むものとして認識されず、レビューに回されません。そのため、skip_review_media_groups のチェックは決して実行されません。
HAR(HTTP Archive)の証拠:
- POST /uploads が成功(2xx)。
- POST /posts ペイロードには、raw フィールドに画像の Markdown が含まれている。
- 同じペイロードには “image_sizes”: {} が含まれている。
- 投稿はレビュー待ちキューに追加されなかった。
Web コンポーザーは、エディターのプレビュー DOM 内の画像から image_sizes を構築します。これにより、メディアレビューはクライアントが提供するプレビューメタデータに依存することになり、モバイルクライアントやプレビュー画像が読み込まれていない場合などにデータが欠落する可能性があります。
期待される動作:アップロードまたは埋め込まれた画像を含む投稿は、クライアントが画像のサイズを送信するかどうかに関係なく、メディアレビューの対象となるべきです。
提案される修正:
-
投稿コンテンツからのサーバー側メディア検出 — クライアントが提供する image_sizes フィールドにのみ依存するのではなく、サーバー上で raw または cooked の投稿コンテンツ(またはアップロード参照)を検査することで、投稿がメディアを含んでいるかどうかを判断します。
-
アップロードされたすべてのメディアファイルのレビュー(1より優れている) — 投稿内に出現するメディアファイルのみをレビューするのではなく、ユーザーがアップロードした すべての メディアファイルを直接レビューします。これにより、投稿レベルのメタデータへの依存を完全に排除し、使用されるクライアントやエンドポイントに関係なく、アップロードされたメディアがレビューキューをバイパスしないことを保証します。