summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn W Higgins <wishdev@gmail.com>2020-07-15 08:20:31 -0700
committerHiroshi SHIBATA <hsbt@ruby-lang.org>2020-09-24 21:22:20 +0900
commit96da24f279e10945be8e87fd63c54b63c331d119 (patch)
treef5f80515c1904143e2d772eaf3b920dd55780004
parent46ba416a1fa0973b56146077a654d68779c2497b (diff)
[ruby/webrick] Make readpartial limit chunk to appropriate size
https://github.com/ruby/webrick/commit/e693f501bd
-rw-r--r--lib/webrick/httprequest.rb11
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