lib/rack/multipart/parser.rb in rack-1.5.3 vs lib/rack/multipart/parser.rb in rack-1.5.4
- old
+ new
@@ -1,9 +1,11 @@
require 'rack/utils'
module Rack
module Multipart
+ class MultipartLimitError < Errno::EMFILE; end
+
class Parser
BUFSIZE = 16384
def initialize(env)
@env = env
@@ -12,10 +14,16 @@
def parse
return nil unless setup_parse
fast_forward_to_first_boundary
+ opened_files = 0
loop do
+ if Utils.multipart_part_limit > 0
+ raise MultipartLimitError, '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)