Skip to content

Commit

Permalink
Avoid 2nd degree polynomial regexp for sanitizing content type
Browse files Browse the repository at this point in the history
This can lead ot ReDos on Ruby 3.1 and older.
  • Loading branch information
byroot authored and whitequark committed Dec 6, 2023
1 parent 7dcc1e0 commit d8eae48
Showing 1 changed file with 7 additions and 3 deletions.
10 changes: 7 additions & 3 deletions lib/rack/utf8_sanitizer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -118,9 +118,13 @@ def sanitize_rack_input(env)
# https://github.com/rack/rack/blob/master/lib/rack/request.rb#L42
# Logic borrowed from Rack::Request#media_type,#media_type_params,#content_charset
# Ignoring charset in content type.
content_type = env['CONTENT_TYPE']
content_type &&= content_type.split(/\s*[;,]\s*/, 2).first
content_type &&= content_type.downcase
if content_type = env['CONTENT_TYPE']
content_type = content_type.split(/[;,]/, 2).first
if content_type
content_type.strip!
content_type.downcase!
end
end
return unless @sanitizable_content_types.any? {|type| content_type == type }
uri_encoded = URI_ENCODED_CONTENT_TYPES.any? {|type| content_type == type}

Expand Down

0 comments on commit d8eae48

Please sign in to comment.