diff options
author | John W Higgins <wishdev@gmail.com> | 2020-07-15 08:20:31 -0700 |
---|---|---|
committer | Hiroshi SHIBATA <hsbt@ruby-lang.org> | 2020-09-24 21:22:20 +0900 |
commit | 96da24f279e10945be8e87fd63c54b63c331d119 (patch) | |
tree | f5f80515c1904143e2d772eaf3b920dd55780004 /lib/webrick | |
parent | 46ba416a1fa0973b56146077a654d68779c2497b (diff) | |
download | ruby-96da24f279e10945be8e87fd63c54b63c331d119.tar.gz |
[ruby/webrick] Make readpartial limit chunk to appropriate size
https://github.com/ruby/webrick/commit/e693f501bd
Diffstat (limited to 'lib/webrick')
-rw-r--r-- | lib/webrick/httprequest.rb | 11 |
1 files changed, 8 insertions, 3 deletions
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 |