From 8cd6f4d94503a568501b6e24bb785a8e002720c9 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sun, 8 Nov 2009 01:57:14 -0800 Subject: rev_thread_spawn/revactor: fix TeeInput for short reads Explicitly requested short reads may cause too much data to be returned, which would be bad and potentially break the application. We need to ensure proper IO#readpartial-like semantics in both of these models. --- lib/rainbows/revactor/tee_input.rb | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'lib/rainbows/revactor') diff --git a/lib/rainbows/revactor/tee_input.rb b/lib/rainbows/revactor/tee_input.rb index 92effb4..b8042ad 100644 --- a/lib/rainbows/revactor/tee_input.rb +++ b/lib/rainbows/revactor/tee_input.rb @@ -24,6 +24,11 @@ module Rainbows begin if parser.filter_body(dst, buf << socket.read).nil? @tmp.write(dst) + diff = dst.size - length + if diff > 0 + dst.replace(dst[0,length]) + @tmp.seek(-diff, IO::SEEK_CUR) + end return dst end rescue EOFError -- cgit v1.2.3-24-ge0c7