Render 412 for invalid UTF-8 parameters
Renders 412 error page when invalid UTF-8 is passed as parameters in controllers.
This commit is contained in:
parent
7dd8d37984
commit
1fcc7f9ba2
|
@ -10,6 +10,7 @@ class ApplicationController < ActionController::Base
|
|||
include WorkhorseHelper
|
||||
include EnforcesTwoFactorAuthentication
|
||||
include WithPerformanceBar
|
||||
include InvalidUTF8ErrorHandler
|
||||
|
||||
before_action :authenticate_sessionless_user!
|
||||
before_action :authenticate_user!
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
module InvalidUTF8ErrorHandler
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
included do
|
||||
rescue_from ArgumentError, with: :handle_invalid_utf8
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def handle_invalid_utf8(error)
|
||||
if error.message == "invalid byte sequence in UTF-8"
|
||||
render_412
|
||||
else
|
||||
raise(error)
|
||||
end
|
||||
end
|
||||
|
||||
def render_412
|
||||
respond_to do |format|
|
||||
format.html { render "errors/precondition_failed", layout: "errors", status: 412 }
|
||||
format.js { render json: { error: 'Invalid UTF-8' }, status: :precondition_failed, content_type: 'application/json' }
|
||||
format.any { head :precondition_failed }
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,8 @@
|
|||
- content_for(:title, 'Encoding Error')
|
||||
%img{ :alt => "GitLab Logo", :src => image_path('logo.svg') }
|
||||
%h1
|
||||
412
|
||||
.container
|
||||
%h3 Precondition failed
|
||||
%hr
|
||||
%p Page can't be loaded because of invalid parameters.
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Render 412 when invalid UTF-8 parameters are passed to controller
|
||||
merge_request:
|
||||
author:
|
||||
type: other
|
|
@ -694,4 +694,38 @@ describe ApplicationController do
|
|||
expect(response).to have_gitlab_http_status(403)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when invalid UTF-8 parameters are received' do
|
||||
controller(described_class) do
|
||||
def index
|
||||
params[:text].split(' ')
|
||||
|
||||
render json: :ok
|
||||
end
|
||||
end
|
||||
|
||||
before do
|
||||
sign_in user
|
||||
end
|
||||
|
||||
context 'html' do
|
||||
it 'renders 412' do
|
||||
get :index, text: "hi \255"
|
||||
|
||||
expect(response).to have_gitlab_http_status(412)
|
||||
expect(response).to render_template :precondition_failed
|
||||
end
|
||||
end
|
||||
|
||||
context 'js' do
|
||||
it 'renders 412' do
|
||||
get :index, text: "hi \255", format: :js
|
||||
|
||||
json_response = JSON.parse(response.body)
|
||||
|
||||
expect(response).to have_gitlab_http_status(412)
|
||||
expect(json_response['error']).to eq('Invalid UTF-8')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue