diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2015-08-28 17:06:26 -0700 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2015-08-28 17:16:55 -0700 |
commit | da3f2e00e0ad37a43aba760cf5c3df068cb99239 (patch) | |
tree | 3dd91747f4f3f3c58ffae3a2568982d735e0ec9b | |
parent | a1585b1131e7e492f2c7df6a94b5d5796975e4ed (diff) | |
download | rack-da3f2e00e0ad37a43aba760cf5c3df068cb99239.tar.gz |
move parser loop away from io
-rw-r--r-- | lib/rack/multipart/parser.rb | 40 |
1 files changed, 23 insertions, 17 deletions
diff --git a/lib/rack/multipart/parser.rb b/lib/rack/multipart/parser.rb index ce79d89f..d8d06b55 100644 --- a/lib/rack/multipart/parser.rb +++ b/lib/rack/multipart/parser.rb @@ -173,30 +173,19 @@ module Rack @collector = Collector.new tempfile end - def read_data - content = @io.read(@bufsize) + def on_read content handle_empty_content!(content) @buf << content + + run_parser end def parse - read_data - + on_read @io.read(@bufsize) loop do - case @state - when :FAST_FORWARD - next unless handle_fast_forward == :want_read - when :CONSUME_TOKEN - next unless handle_consume_token == :want_read - when :MIME_HEAD - next unless handle_mime_head == :want_read - when :MIME_BODY - next unless handle_mime_body == :want_read - when :DONE - break - end + break if @state == :DONE - read_data + on_read @io.read(@bufsize) end @collector.each do |part| @@ -213,6 +202,23 @@ module Rack private + def run_parser + loop do + case @state + when :FAST_FORWARD + break if handle_fast_forward == :want_read + when :CONSUME_TOKEN + break if handle_consume_token == :want_read + when :MIME_HEAD + break if handle_mime_head == :want_read + when :MIME_BODY + break if handle_mime_body == :want_read + when :DONE + break + end + end + end + def handle_fast_forward if consume_boundary @state = :MIME_HEAD |