Misultin doesn't close websocket connection on unmasked frame
majek opened this issue · comments
I'm using a python websocket client: WebSocket-for-Python
. Actually, I'm using quite an old version:
./venv/bin/pip install git+git://github.com/majek/WebSocket-for-Python.git
With this client, the program hangs instead of quitting (utils.py)
from utils import WebSocket8Client
ws = WebSocket8Client("http://localhost:8000/")
ws.close() # program hangs here
Upon further investigation I was able to isolate the issue. The problem is that misultin is not closing a connection when receiving an unmasked frame (see: http://tools.ietf.org/html/rfc6455):
"The server MUST close the connection upon receiving a frame that is not masked"
Apparently misultin is not closing a connection when receiving frame \x88\x00
(unmasked fin frame). On the other hand, a proper close frame with masking, like \x88\x80\xaa\xaa\xaa\xaa
seems to be understood by misultin (and the connection is clsoed).
Steps to reproduce: https://gist.github.com/1781022
- ./misultin_ws_close_bug.erl
- run
node client-raw.js
with sending [\x88, \x00] and see it hanging forever. - run
node client-raw.js
with sending [\x88, \x80, \xaa, \xaa, \xaa, \xaa] and see it closing the connection quickly