summaryrefslogtreecommitdiff
path: root/app/controllers
diff options
context:
space:
mode:
authorStan Hu <stanhu@gmail.com>2018-09-25 16:35:10 +0000
committerStan Hu <stanhu@gmail.com>2018-09-25 16:35:10 +0000
commit0920342094ae07d7225b42cf23cf9637076d2b25 (patch)
treeb42ce963207738b88566a578dc0f3e7b9d2bf3bd /app/controllers
parent45b365b0e5abdb86ff6ac23b00578d5398134af9 (diff)
parent1fcc7f9ba23a5ca02773e080ccb66f37435150ff (diff)
downloadgitlab-ce-0920342094ae07d7225b42cf23cf9637076d2b25.tar.gz
Merge branch 'fa-handle_invalid_utf8_errors' into 'master'
Render 412 when invalid UTF-8 is passed as parameter See merge request gitlab-org/gitlab-ce!21774
Diffstat (limited to 'app/controllers')
-rw-r--r--app/controllers/application_controller.rb1
-rw-r--r--app/controllers/concerns/invalid_utf8_error_handler.rb25
2 files changed, 26 insertions, 0 deletions
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 838527aaa41..fb2808edf47 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -12,6 +12,7 @@ class ApplicationController < ActionController::Base
include WorkhorseHelper
include EnforcesTwoFactorAuthentication
include WithPerformanceBar
+ include InvalidUTF8ErrorHandler
before_action :authenticate_sessionless_user!
before_action :authenticate_user!
diff --git a/app/controllers/concerns/invalid_utf8_error_handler.rb b/app/controllers/concerns/invalid_utf8_error_handler.rb
new file mode 100644
index 00000000000..a7ea0d00a43
--- /dev/null
+++ b/app/controllers/concerns/invalid_utf8_error_handler.rb
@@ -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