Skip to content
This repository was archived by the owner on Jan 13, 2021. It is now read-only.

Commit adc6418

Browse files
committed
Throw connection error when the frame size setting is out of range
1 parent b62fa4f commit adc6418

File tree

1 file changed

+7
-1
lines changed

1 file changed

+7
-1
lines changed

hyper/http20/connection.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -457,14 +457,17 @@ def _update_settings(self, frame):
457457

458458
if SettingsFrame.SETTINGS_MAX_FRAME_SIZE in frame.settings:
459459
new_size = frame.settings[SettingsFrame.SETTINGS_MAX_FRAME_SIZE]
460-
if new_size > FRAME_MAX_LEN and new_size < FRAME_MAX_ALLOWED_LEN:
460+
if FRAME_MAX_LEN <= new_size <= FRAME_MAX_ALLOWED_LEN:
461461
self._settings[SettingsFrame.SETTINGS_MAX_FRAME_SIZE] = new_size
462462
else:
463463
log.warning(
464464
"Frame size %d is outside of allowed range",
465465
new_size)
466466
# Tear the connection down with error code PROTOCOL_ERROR
467467
self.close(1)
468+
error_string = ("Advertised frame size %d is outside of range" %
469+
(new_size))
470+
raise ConnectionError(error_string)
468471

469472
def _new_stream(self, stream_id=None, local_closed=False):
470473
"""
@@ -507,6 +510,9 @@ def _send_cb(self, frame, tolerate_peer_gone=False):
507510

508511
data = frame.serialize()
509512

513+
if frame.body_len > FRAME_MAX_LEN: # pragma: no cover
514+
raise ValueError("Frame size %d is too large" % frame.body_len)
515+
510516
log.info(
511517
"Sending frame %s on stream %d",
512518
frame.__class__.__name__,

0 commit comments

Comments
 (0)