lib/httpx/transcoder/chunker.rb in httpx-0.3.1 vs lib/httpx/transcoder/chunker.rb in httpx-0.4.0

- old
+ new

@@ -16,10 +16,11 @@ @raw = body end def each return enum_for(__method__) unless block_given? + @raw.each do |chunk| yield "#{chunk.bytesize.to_s(16)}#{CRLF}#{chunk}#{CRLF}" end yield "0#{CRLF}#{CRLF}" end @@ -55,10 +56,11 @@ loop do case @state when :length index = @buffer.index(CRLF) return unless index && index.positive? + # Read hex-length hexlen = @buffer.slice!(0, index) hexlen[/\h/] || raise(Error, "wrong chunk size line: #{hexlen}") @chunk_length = hexlen.hex # check if is last chunk @@ -67,14 +69,16 @@ when :crlf crlf_size = @finished && !@trailers ? 4 : 2 # consume CRLF return if @buffer.bytesize < crlf_size raise Error, "wrong chunked encoding format" unless @buffer.start_with?(CRLF * (crlf_size / 2)) + @buffer.slice!(0, crlf_size) if @chunk_length.nil? nextstate(:length) else return if @finished + nextstate(:data) end when :data @chunk_buffer << (slice = @buffer.slice!(0, @chunk_length)) @chunk_length -= slice.bytesize