class Rack::Multipart::Parser

def get_filename(head)

def get_filename(head)
  filename = nil
  case head
  when RFC2183
    params = Hash[*head.scan(DISPPARM).flat_map(&:compact)]
    if filename = params['filename*']
      encoding, _, filename = filename.split("'", 3)
    elsif filename = params['filename']
      filename = $1 if filename =~ /^"(.*)"$/
    end
  when BROKEN
    filename = $1
    filename = $1 if filename =~ /^"(.*)"$/
  end
  return unless filename
  if filename.scan(/%.?.?/).all? { |s| /%[0-9a-fA-F]{2}/.match?(s) }
    filename = Utils.unescape_path(filename)
  end
  filename.scrub!
  if filename !~ /\\[^\\"]/
    filename = filename.gsub(/\\(.)/, '\1')
  end
  if encoding
    filename.force_encoding ::Encoding.find(encoding)
  end
  filename
end