fix(#828): drain oversized broker frames safely

closes #828
This commit is contained in:
ms-lead-reviewer
2026-07-17 20:50:00 -05:00
parent deb11df783
commit 57770e3443

View File

@@ -358,7 +358,16 @@ def read_frame(connection: socket.socket, deadline: float) -> dict[str, object]:
if not chunk: if not chunk:
break break
data.extend(chunk) data.extend(chunk)
if len(data) > MAX_FRAME or not data.endswith(b"\n") or data.count(b"\n") != 1: if len(data) > MAX_FRAME:
while True:
remaining = deadline - time.monotonic()
if remaining <= 0:
raise BrokerFailure("MALFORMED_REQUEST")
connection.settimeout(remaining)
if not connection.recv(4096):
break
raise BrokerFailure("MALFORMED_REQUEST")
if not data.endswith(b"\n") or data.count(b"\n") != 1:
raise BrokerFailure("MALFORMED_REQUEST") raise BrokerFailure("MALFORMED_REQUEST")
try: try:
value = json.loads(data) value = json.loads(data)