openstax / accounts

OpenStax centralized authentication and accounts service

Home Page:https://accounts.openstax.org

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

invalid byte sequence in UTF-8 in JSON param filtering

jpslav opened this issue · comments

See the application#routing_error (ArgumentError) "invalid byte sequence in UTF-8" exception emails.

Exception info below -- needs investigation.

An ArgumentError occurred in application#routing_error:

  invalid byte sequence in UTF-8
  config/initializers/filter_parameters.rb:36:in `block in <top (required)>'


-------------------------------
Request:
-------------------------------

  ERROR: Failed to generate exception summary:

  ActionView::Template::Error: invalid byte sequence in UTF-8

  /home/ostaccounts/src/accounts-4b54b4f/config/initializers/filter_parameters.rb:36:in `block in <top (required)>'
  /home/ostaccounts/src/accounts-4b54b4f/lib/json_and_string_parameter_filter.rb:46:in `call'
  /home/ostaccounts/src/accounts-4b54b4f/lib/json_and_string_parameter_filter.rb:46:in `block in run'
  /home/ostaccounts/src/accounts-4b54b4f/lib/json_and_string_parameter_filter.rb:45:in `each'
  /home/ostaccounts/src/accounts-4b54b4f/lib/json_and_string_parameter_filter.rb:45:in `run'
  /home/ostaccounts/src/accounts-4b54b4f/config/initializers/filter_parameters.rb:40:in `block in <top (required)>'

Failing line:

value_filters = [Proc.new { |value| value =~ /^[^@]+@[^.]+\..+/ }]

This is just people sending us invalid strings. Need to filter them out. For example:

irb(main):001:0> "hello \255".split(',')
ArgumentError: invalid byte sequence in UTF-8
    from (irb):1:in `split'
    from (irb):1
    from /Users/dante/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/railties-3.2.22/lib/rails/commands/console.rb:47:in `start'
    from /Users/dante/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/railties-3.2.22/lib/rails/commands/console.rb:8:in `start'
    from /Users/dante/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/railties-3.2.22/lib/rails/commands.rb:41:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'

https://robots.thoughtbot.com/fight-back-utf-8-invalid-byte-sequences

Fixed by the Rails team only in Rails 5...