From 96da24f279e10945be8e87fd63c54b63c331d119 Mon Sep 17 00:00:00 2001 From: John W Higgins Date: Wed, 15 Jul 2020 08:20:31 -0700 Subject: [ruby/webrick] Make readpartial limit chunk to appropriate size https://github.com/ruby/webrick/commit/e693f501bd --- lib/webrick/httprequest.rb | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'lib') diff --git a/lib/webrick/httprequest.rb b/lib/webrick/httprequest.rb index 87dc879175..c781797092 100644 --- a/lib/webrick/httprequest.rb +++ b/lib/webrick/httprequest.rb @@ -9,6 +9,7 @@ # # $IPR: httprequest.rb,v 1.64 2003/07/13 17:18:22 gotoyuzo Exp $ +require 'fiber' require 'uri' require_relative 'httpversion' require_relative 'httpstatus' @@ -273,13 +274,17 @@ module WEBrick self end - # for IO.copy_stream. Note: we may return a larger string than +size+ - # here; but IO.copy_stream does not care. + # for IO.copy_stream. def readpartial(size, buf = ''.b) # :nodoc res = @body_tmp.shift or raise EOFError, 'end of file reached' + if res.length > size + @body_tmp.unshift(res[size..-1]) + res = res[0..size - 1] + end buf.replace(res) res.clear - @body_rd.resume # get more chunks + # get more chunks - check alive? because we can take a partial chunk + @body_rd.resume if @body_rd.alive? buf end -- cgit v1.2.3