    # File lib/rack/multipart/parser.rb, line 52
          def parse
            fast_forward_to_first_boundary

            opened_files = 0
            loop do
              if Utils.multipart_part_limit > 0
                raise MultipartPartLimitError, 'Maximum file multiparts in content reached' if opened_files >= Utils.multipart_part_limit
                opened_files += 1
              end

              head, filename, content_type, name, body =
                get_current_head_and_filename_and_content_type_and_name_and_body

              # Save the rest.
              if i = @buf.index(rx)
                body << @buf.slice!(0, i)
                @buf.slice!(0, @boundary_size+2)

                @content_length = -1  if $1 == "--"
              end

              get_data(filename, body, content_type, name, head) do |data|
                tag_multipart_encoding(filename, content_type, name, data)

                Utils.normalize_params(@params, name, data)
              end

              # break if we're at the end of a buffer, but not if it is the end of a field
              break if (@buf.empty? && $1 != EOL) || @content_length == -1
            end

            @io.rewind

            @params.to_params_hash
          end