FIX: Complete protection for potentially illegal reviewables on post deletion (#37536)

This is a follow-up to fd04f690.

The original commit only protected potentially illegal reviewables from
being auto-approved in one code path (direct post deletion). However,
when deleting a post through a reviewable action with
`notify_users_after_responses_deleted_on_flagged_post` enabled, the code
would still call `#ignore` on any flagged reply posts without checking
`#potentially_illegal?`.
This commit is contained in:
Loïc Guitaut
2026-02-05 09:42:52 +01:00
committed by GitHub
parent 6db95a02c7
commit 02b3407b5a
2 changed files with 42 additions and 16 deletions
+29 -16
View File
@@ -238,22 +238,7 @@ class PostDestroyer
DB.after_commit do
Topic.reset_highest(@post.topic_id)
if @opts[:reviewable]
notify_deletion(
@opts[:reviewable],
{ notify_responders: @opts[:notify_responders], parent_post: @opts[:parent_post] },
)
if @post.reviewable_flag &&
SiteSetting.notify_users_after_responses_deleted_on_flagged_post
ignore(@post.reviewable_flag)
end
elsif reviewable = @post.reviewable_flag
if @opts[:defer_flags]
ignore(reviewable)
else
agree(reviewable) unless reviewable.potentially_illegal?
end
end
handle_reviewable_after_deletion
end
end
@@ -403,6 +388,34 @@ class PostDestroyer
reviewable.transition_to(:ignored, @user)
end
def handle_reviewable_after_deletion
if @opts[:reviewable]
handle_explicit_reviewable
elsif @post.reviewable_flag
handle_post_reviewable_flag
end
end
def handle_explicit_reviewable
notify_deletion(
@opts[:reviewable],
{ notify_responders: @opts[:notify_responders], parent_post: @opts[:parent_post] },
)
return unless @post.reviewable_flag
return unless SiteSetting.notify_users_after_responses_deleted_on_flagged_post
return if @post.reviewable_flag.potentially_illegal?
ignore(@post.reviewable_flag)
end
def handle_post_reviewable_flag
return ignore(@post.reviewable_flag) if @opts[:defer_flags]
return if @post.reviewable_flag.potentially_illegal?
agree(@post.reviewable_flag)
end
def notify_deletion(reviewable, options = {})
return if @post.user.blank?
+13
View File
@@ -1097,6 +1097,19 @@ RSpec.describe PostDestroyer do
}
expect(Jobs::SendSystemMessage.jobs).to be_empty
end
context "when deleting a reply with a reviewable option and notify_users_after_responses_deleted_on_flagged_post enabled" do
let(:parent_reviewable) { flag_result.reviewable }
let(:reply_reviewable) { second_post.reviewable_flag }
before { SiteSetting.notify_users_after_responses_deleted_on_flagged_post = true }
it "does not ignore a potentially illegal flag on the reply" do
expect {
PostDestroyer.new(moderator, second_post, reviewable: parent_reviewable).destroy
}.not_to change { reply_reviewable.reload.pending? }
end
end
end
context "when custom flags" do