mirror of
https://github.com/discourse/discourse.git
synced 2025-05-25 09:42:46 +08:00
FIX: do not log if an invalid mime type is passed to app
Previously our custom exception handler was unable to handle situations where an invalid mime type was sent, resulting in a warning log This ensures we pretend a request is HTML for the purpose of rendering the error page if an invalid mime type from a scanner is shipped to the app
This commit is contained in:
@ -29,7 +29,15 @@ module Middleware
|
|||||||
begin
|
begin
|
||||||
fake_controller = ApplicationController.new
|
fake_controller = ApplicationController.new
|
||||||
fake_controller.response = response
|
fake_controller.response = response
|
||||||
fake_controller.request = ActionDispatch::Request.new(env)
|
fake_controller.request = request = ActionDispatch::Request.new(env)
|
||||||
|
|
||||||
|
begin
|
||||||
|
request.format
|
||||||
|
rescue Mime::Type::InvalidMimeType
|
||||||
|
# got to do something here, we can not ship invalid format
|
||||||
|
# to the exception handler cause it will explode
|
||||||
|
request.format = "html"
|
||||||
|
end
|
||||||
|
|
||||||
if ApplicationController.rescue_with_handler(exception, object: fake_controller)
|
if ApplicationController.rescue_with_handler(exception, object: fake_controller)
|
||||||
body = response.body
|
body = response.body
|
||||||
|
@ -0,0 +1,35 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require "rails_helper"
|
||||||
|
|
||||||
|
describe Middleware::DiscoursePublicExceptions do
|
||||||
|
before do
|
||||||
|
@orig_logger = Rails.logger
|
||||||
|
Rails.logger = @fake_logger = FakeLogger.new
|
||||||
|
end
|
||||||
|
|
||||||
|
after do
|
||||||
|
Rails.logger = @orig_logger
|
||||||
|
end
|
||||||
|
|
||||||
|
def env(opts = {})
|
||||||
|
{
|
||||||
|
"HTTP_HOST" => "http://test.com",
|
||||||
|
"REQUEST_URI" => "/path?bla=1",
|
||||||
|
"REQUEST_METHOD" => "GET",
|
||||||
|
"rack.input" => ""
|
||||||
|
}.merge(opts)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should not log for invalid mime type requests" do
|
||||||
|
ex = Middleware::DiscoursePublicExceptions.new("/test")
|
||||||
|
|
||||||
|
ex.call(env(
|
||||||
|
"HTTP_ACCEPT" => "../broken../",
|
||||||
|
"action_dispatch.exception" => ActionController::RoutingError.new("abc")
|
||||||
|
))
|
||||||
|
|
||||||
|
expect(@fake_logger.warnings.length).to eq(0)
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
Reference in New Issue
Block a user