Skip to content

Commit b3a55f0

Browse files
committed
Better error handling.
1 parent d55fa5e commit b3a55f0

File tree

3 files changed

+8
-4
lines changed

3 files changed

+8
-4
lines changed

lib/protocol/http2/connection.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,7 @@ def receive_data(frame)
343343
if stream = @streams[frame.stream_id]
344344
stream.receive_data(frame)
345345
else
346-
raise ProtocolError, "Cannot receive data for idle stream #{frame.stream_id}"
346+
raise ProtocolError, "Cannot receive data for stream id #{frame.stream_id}"
347347
end
348348
end
349349

lib/protocol/http2/frame.rb

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ def self.parse_header(buffer)
161161
end
162162

163163
def read_header(stream)
164-
if buffer = stream.read(9)
164+
if buffer = stream.read(9) and buffer.bytesize == 9
165165
@length, @type, @flags, @stream_id = Frame.parse_header(buffer)
166166
# puts "read_header: #{@length} #{@type} #{@flags} #{@stream_id}"
167167
else
@@ -170,7 +170,11 @@ def read_header(stream)
170170
end
171171

172172
def read_payload(stream)
173-
@payload = stream.read(@length)
173+
if payload = stream.read(@length) and payload.bytesize == @length
174+
@payload = payload
175+
else
176+
raise EOFError, "Could not read frame payload!"
177+
end
174178
end
175179

176180
def read(stream, maximum_frame_size = MAXIMUM_ALLOWED_FRAME_SIZE)

spec/protocol/http2/stream_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@
125125

126126
expect do
127127
server.read_frame
128-
end.to raise_error(Protocol::HTTP2::ProtocolError, /Cannot receive data for idle stream/)
128+
end.to raise_error(Protocol::HTTP2::ProtocolError, /Cannot receive data/)
129129
end
130130

131131
it "cannot receive stream reset" do

0 commit comments

Comments
 (0)