FIX: Don’t log an error when rendering a 404

Currently, in the list controller, when encountering an unsafe redirect
error, a 404 is rendered. The problem is that it’s done in a way that it
also logs a fatal error (because a `Discourse::NotFound` exception was
raised inside a `rescue_from` block).

This patch addresses that issue by simply rendering a 404 without
raising any error.
This commit is contained in:
Loïc Guitaut 2024-08-07 16:17:35 +02:00 committed by Loïc Guitaut
parent 4c0af24173
commit bf3d8a0a94
2 changed files with 11 additions and 1 deletions

View File

@ -50,7 +50,7 @@ class ListController < ApplicationController
].flatten ].flatten
rescue_from ActionController::Redirecting::UnsafeRedirectError do rescue_from ActionController::Redirecting::UnsafeRedirectError do
raise Discourse::NotFound rescue_discourse_actions(:not_found, 404)
end end
# Create our filters # Create our filters

View File

@ -1227,17 +1227,27 @@ RSpec.describe ListController do
end end
context "when redirect raises an unsafe redirect error" do context "when redirect raises an unsafe redirect error" do
let(:fake_logger) { FakeLogger.new }
before do before do
ListController ListController
.any_instance .any_instance
.stubs(:redirect_to) .stubs(:redirect_to)
.raises(ActionController::Redirecting::UnsafeRedirectError) .raises(ActionController::Redirecting::UnsafeRedirectError)
Rails.logger.broadcast_to(fake_logger)
end end
after { Rails.logger.stop_broadcasting_to(fake_logger) }
it "renders a 404" do it "renders a 404" do
get "/c/hello/world/bye/#{subsubcategory.id}" get "/c/hello/world/bye/#{subsubcategory.id}"
expect(response).to have_http_status :not_found expect(response).to have_http_status :not_found
end end
it "doesnt log an error" do
get "/c/hello/world/bye/#{subsubcategory.id}"
expect(fake_logger.fatals).to be_empty
end
end end
context "when provided slug is gibberish" do context "when provided slug is gibberish" do