]> git.ipfire.org Git - thirdparty/tornado.git/commitdiff
fix websocket handshake failure causes an exception
authorJungkook Park <pjknkda@gmail.com>
Thu, 21 Sep 2017 17:14:51 +0000 (02:14 +0900)
committerBen Darnell <ben@bendarnell.com>
Fri, 5 Jan 2018 03:11:19 +0000 (22:11 -0500)
tornado/test/websocket_test.py
tornado/websocket.py

index d47a74e651e86ab8ecd8ab76d6936c23edd06e05..95a5ecd4ceabd19cd7aa4489f6b2b0207a6fedb8 100644 (file)
@@ -189,6 +189,13 @@ class WebSocketTest(WebSocketBaseTestCase):
         response = self.fetch('/echo')
         self.assertEqual(response.code, 400)
 
+    def test_missing_websocket_key(self):
+        response = self.fetch('/echo',
+                              headers={'Connection': 'Upgrade',
+                                       'Upgrade': 'WebSocket',
+                                       'Sec-WebSocket-Version': '13'})
+        self.assertEqual(response.code, 400)
+
     def test_bad_websocket_version(self):
         response = self.fetch('/echo',
                               headers={'Connection': 'Upgrade',
index 69437ee4e3d9cc335b0eb1b785a3565fff14ab70..0e9d339f592f60338daaf0cc46497206fbea3c2b 100644 (file)
@@ -616,6 +616,14 @@ class WebSocketProtocol13(WebSocketProtocol):
     def accept_connection(self):
         try:
             self._handle_websocket_headers()
+        except ValueError:
+            self.handler.set_status(400)
+            log_msg = "Missing/Invalid WebSocket headers"
+            self.handler.finish(log_msg)
+            gen_log.debug(log_msg)
+            return
+
+        try:
             self._accept_connection()
         except ValueError:
             gen_log.debug("Malformed WebSocket request received",