]> git.ipfire.org Git - thirdparty/tornado.git/commitdiff
fix websocket handshake failure causes an exception 2157/head
authorJungkook Park <pjknkda@gmail.com>
Thu, 21 Sep 2017 17:14:51 +0000 (02:14 +0900)
committerJungkook Park <pjknkda@gmail.com>
Fri, 22 Sep 2017 04:44:17 +0000 (13:44 +0900)
tornado/test/websocket_test.py
tornado/websocket.py

index 5a2a6577c36cec9c00ea507d9825ac549c7edeae..54734d815590d96e00364e9b8c23fcfc00b2715a 100644 (file)
@@ -193,6 +193,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 d5a7fa89f2251c5f2563c8778b352e9e1cfb75be..c6804ca0aecb074d71c710ee3f38414ae7610060 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",