Skip to content

Commit afb0f70

Browse files
committed
Disconnect if bad request/response
1 parent b24d487 commit afb0f70

2 files changed

Lines changed: 10 additions & 6 deletions

File tree

cms/io/rpc.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,7 @@ def process_data(self, data):
351351
try:
352352
message = json.loads(data.decode('utf-8'))
353353
except ValueError:
354+
self.disconnect("Bad request received")
354355
logger.warning("Cannot parse incoming message, discarding.")
355356
return
356357

@@ -367,6 +368,7 @@ def process_incoming_request(self, request):
367368
"""
368369
# Validate the request.
369370
if not {"__id", "__method", "__data"}.issubset(iterkeys(request)):
371+
self.disconnect("Bad request received")
370372
logger.warning("Request is missing some fields, ignoring.")
371373
return
372374

@@ -542,6 +544,7 @@ def process_data(self, data):
542544
try:
543545
message = json.loads(data.decode('utf-8'))
544546
except ValueError:
547+
self.disconnect("Bad response received")
545548
logger.warning("Cannot parse incoming message, discarding.")
546549
return
547550

@@ -558,6 +561,7 @@ def process_incoming_response(self, response):
558561
"""
559562
# Validate the response.
560563
if not {"__id", "__data", "__error"}.issubset(iterkeys(response)):
564+
self.disconnect("Bad response received")
561565
logger.warning("Response is missing some fields, ignoring.")
562566
return
563567

cmstestsuite/unit_tests/io/rpc_test.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -415,17 +415,17 @@ def test_send_invalid_json(self):
415415
sock = gevent.socket.create_connection((self.host, self.port))
416416
sock.sendall(b"foo\r\n")
417417
self.sleep()
418-
self.assertTrue(self.servers[0].connected)
419-
# Verify the server resumes normal operation.
420-
self.test_method_return_int()
418+
# Malformed messages cause the connection to be closed.
419+
self.assertFalse(self.servers[0].connected)
420+
sock.close()
421421

422422
def test_send_incomplete_json(self):
423423
sock = gevent.socket.create_connection((self.host, self.port))
424424
sock.sendall(b'{"__id": "foo"}\r\n')
425425
self.sleep()
426-
self.assertTrue(self.servers[0].connected)
427-
# Verify the server resumes normal operation.
428-
self.test_method_return_int()
426+
# Malformed messages cause the connection to be closed.
427+
self.assertFalse(self.servers[0].connected)
428+
sock.close()
429429

430430

431431
if __name__ == "__main__":

0 commit comments

Comments
 (0)