crossbario / crossbario/autobahn-python
Unicode characters in authid result in uncaught exception and connection abort
Open
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 2.5k
- Forks
- 768
- PR merge metrics
- No merged PRs in 30d
Description
Log:
2015-09-09 18:58:07+0200 [Router 3722] connection accepted from peer tcp4:192.168.192.10:9888
2015-09-09 18:58:07+0200 [Router 3722] RX Octets from tcp4:192.168.192.10:9888 : octets = 474554202f20485454502f312e310d0a486f73743a203139322e3136382e3139322e32383a383038300d0a436f6e6e656374696f6e3a20557067726164650d0a507261676d613a206e6f2d63616368650d0a43616368652d436f6e74726f6c3a206e6f2d63616368650d0a557067726164653a20776562736f636b65740d0a4f726967696e3a20687474703a2f2f3139322e3136382e3139322e32383a393939390d0a5365632d576562536f636b65742d56657273696f6e3a2031330d0a557365722d4167656e743a204d6f7a696c6c612f352e30202857696e646f7773204e5420362e313b20574f57363429204170706c655765624b69742f3533372e333620284b48544d4c2c206c696b65204765636b6f29204368726f6d652f34352e302e323435342e3835205361666172692f3533372e33360d0a4163636570742d456e636f64696e673a20677a69702c206465666c6174652c20736463680d0a4163636570742d4c616e67756167653a2064652d44452c64653b713d302e382c656e2d55533b713d302e362c656e3b713d302e340d0a5365632d576562536f636b65742d4b65793a20574975737678354f76673642594a354a4547574e74413d3d0d0a5365632d576562536f636b65742d457874656e73696f6e733a207065726d6573736167652d6465666c6174653b20636c69656e745f6d61785f77696e646f775f626974730d0a5365632d576562536f636b65742d50726f746f636f6c3a2077616d702e322e6a736f6e0d0a0d0a
2015-09-09 18:58:07+0200 [Router 3722] received HTTP request:
2015-09-09 18:58:07+0200 [Router 3722] GET / HTTP/1.1
2015-09-09 18:58:07+0200 [Router 3722] Host: 192.168.192.28:8080
2015-09-09 18:58:07+0200 [Router 3722] Connection: Upgrade
2015-09-09 18:58:07+0200 [Router 3722] Pragma: no-cache
2015-09-09 18:58:07+0200 [Router 3722] Cache-Control: no-cache
2015-09-09 18:58:07+0200 [Router 3722] Upgrade: websocket
2015-09-09 18:58:07+0200 [Router 3722] Origin: http://192.168.192.28:9999
2015-09-09 18:58:07+0200 [Router 3722] Sec-WebSocket-Version: 13
2015-09-09 18:58:07+0200 [Router 3722] User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36
2015-09-09 18:58:07+0200 [Router 3722] Accept-Encoding: gzip, deflate, sdch
2015-09-09 18:58:07+0200 [Router 3722] Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4
2015-09-09 18:58:07+0200 [Router 3722] Sec-WebSocket-Key: WIusvx5Ovg6BYJ5JEGWNtA==
2015-09-09 18:58:07+0200 [Router 3722] Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
2015-09-09 18:58:07+0200 [Router 3722] Sec-WebSocket-Protocol: wamp.2.json
2015-09-09 18:58:07+0200 [Router 3722] received HTTP status line in opening handshake : GET / HTTP/1.1
2015-09-09 18:58:07+0200 [Router 3722] Unable to format event {'log_namespace': 'crossbar.router.protocol.CrossbarWampWebSocketServerFactory', 'log_level': <LogLevel=debug>, 'format': '%(log_legacy)s', 'time': 1441817887.015845, 'log_source': <crossbar.router.protocol.CrossbarWampWebSocketServerFactory object at 0x7fde073fe2d0>, 'log_format': "received HTTP headers in opening handshake : {u'origin': u'http://192.168.192.28:9999', u'upgrade': u'websocket', u'accept-language': u'de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4', u'accept-encoding': u'gzip, deflate, sdch', u'sec-websocket-version': u'13', u'sec-websocket-protocol': u'wamp.2.json', u'connection': u'Upgrade', u'sec-websocket-key': u'WIusvx5Ovg6BYJ5JEGWNtA==', u'user-agent': u'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36', u'host': u'192.168.192.28:8080', u'pragma': u'no-cache', u'cache-control': u'no-cache', u'sec-websocket-extensions': u'permessage-deflate; client_max_window_bits'}", 'system': '-', 'log_logger': <Logger 'crossbar.router.protocol.CrossbarWampWebSocketServerFactory'>, 'message': (), 'log_time': 1441817887.015845}: u"u'origin'"
2015-09-09 18:58:07+0200 [Router 3722] Cookie tracking disabled on WebSocket connection <crossbar.router.protocol.CrossbarWampWebSocketServerProtocol object at 0x7fde07339b90>
2015-09-09 18:58:07+0200 [Router 3722] Unable to format event {'log_namespace': 'crossbar.router.protocol.CrossbarWampWebSocketServerFactory', 'log_level': <LogLevel=debug>, 'format': '%(log_legacy)s', 'time': 1441817887.016054, 'log_source': <crossbar.router.protocol.CrossbarWampWebSocketServerFactory object at 0x7fde073fe2d0>, 'log_format': "parsed WebSocket extension 'permessage-deflate' with params '{'client_max_window_bits': [True]}'", 'system': '-', 'log_logger': <Logger 'crossbar.router.protocol.CrossbarWampWebSocketServerFactory'>, 'message': (), 'log_time': 1441817887.016054}: u"'client_max_window_bits'"
2015-09-09 18:58:07+0200 [Router 3722] client request permessage-compress extension, but we did not accept any offer [[PerMessageDeflateOffer(acceptNoContextTakeover = True, acceptMaxWindowBits = True, requestNoContextTakeover = False, requestMaxWindowBits = 0)]]
2015-09-09 18:58:07+0200 [Router 3722] sending HTTP response:
2015-09-09 18:58:07+0200 [Router 3722] HTTP/1.1 101 Switching Protocols
2015-09-09 18:58:07+0200 [Router 3722] Server: Crossbar/0.10.4
2015-09-09 18:58:07+0200 [Router 3722] X-Powered-By: AutobahnPython/0.10.6
2015-09-09 18:58:07+0200 [Router 3722] Upgrade: WebSocket
2015-09-09 18:58:07+0200 [Router 3722] Connection: Upgrade
2015-09-09 18:58:07+0200 [Router 3722] Sec-WebSocket-Protocol: wamp.2.json
2015-09-09 18:58:07+0200 [Router 3722] Sec-WebSocket-Accept: O+S512Dk6QUWT8ta+V4NzuvPtJI=
2015-09-09 18:58:07+0200 [Router 3722] TX Octets to tcp4:192.168.192.10:9888 : sync = False, octets = 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a2043726f73736261722f302e31302e340d0a582d506f77657265642d42793a204175746f6261686e507974686f6e2f302e31302e360d0a557067726164653a20576562536f636b65740d0a436f6e6e656374696f6e3a20557067726164650d0a5365632d576562536f636b65742d50726f746f636f6c3a2077616d702e322e6a736f6e0d0a5365632d576562536f636b65742d4163636570743a204f2b53353132446b36515557543874612b56344e7a757650744a493d0d0a0d0a
2015-09-09 18:58:07+0200 [Router 3722] RX Octets from tcp4:192.168.192.10:9888 : octets = 81fe023ff339975ea808bb7c9e58fe30d115ec7c8156fb3b801bad25d15af6329f5ce57cc942b5389658e32b815ce47cc942b53d9255fb3b8166fe3a9657e3379550f43f8750f830d103e32c865cbb7c834bf839815ce42d9a4ff2019058fb32ac4bf22d8655e32dd103e32c865cea23df1bf43f9f55f23bd103ec7c955cf62a864bf22dd103ec7c9058fb32964bc837975cf92a9a5ffe3d924dfe319d1bad2a814cf272d149f62a875ce530ac5bf62d965dc82c965efe2d874bf62a9a56f97cc94de52b9615b52d9b58e53b9766e53b9450e42a8158e3379c57b564874be23bdf1be72c9c5ee53b804afe289666f43f9f55c82c964ae232874ab564874be23bdf1be53b9450e42a8158e3379c57c82c964ff83d924dfe319d1bad2a814cf2238e15b52e865bfb378051f22cd103ec7c955cf62a864bf22dd103ec7c834cf5329a4aff3b8166fe3a9657e3379550f43f8750f830d103e32c865cbb7c804cf52d904bfe3c964bc83c9f58f4358451fe2a9666fb37804dfe30941bad2a814cf272d149e23c9f50e436964bc83b8b5afb2b8050f830d103e32c865cea23df1be42b914af42c9a5bf22cd103ec7c955cf62a864bf22dd103ec7c834cf5329a4aff3b8166fe3a9657e3379550f43f8750f830d103e32c865cbb7c8358e32a964bf9019158e43b9766e42b914af42c9a49e3379c57b564874be23bdf1be42b914af42c9a49e3379c57c82c964ff83d924dfe319d1bad2a814cf2238e44bb7c924ce3369e5ce3369c5de47cc962b5299254e73d8158b503df1bf62b8751fe3ad103b52e308554fad144ca
2015-09-09 18:58:07+0200 [Router 3722] Unable to format event {'log_namespace': 'crossbar.router.protocol.CrossbarWampWebSocketServerFactory', 'log_level': <LogLevel=debug>, 'format': '%(log_legacy)s', 'time': 1441817887.017671, 'log_source': <crossbar.router.protocol.CrossbarWampWebSocketServerFactory object at 0x7fde073fe2d0>, 'log_format': 'RX Frame from tcp4:192.168.192.10:9888 : fin = True, rsv = 0, opcode = 1, mask = f339975e, length = 575, payload = [1,"main",{"roles":{"caller":{"features":{"caller_identification":true,"progressive_call_results":true}},"callee":{"features":{"caller_identification":true,"pattern_based_registration":true,"shared_registration":true,"progressive_call_results":true,"registration_revocation":true}},"publisher":{"features":{"publisher_identification":true,"subscriber_blackwhite_listing":true,"publisher_exclusion":true}},"subscriber":{"features":{"publisher_identification":true,"pattern_based_subscription":true,"subscription_revocation":true}}},"authmethods":["wampcra"],"authid":"p\xc3\xbc\xc3\xa4"}]', 'system': '-', 'log_logger': <Logger 'crossbar.router.protocol.CrossbarWampWebSocketServerFactory'>, 'message': (), 'log_time': 1441817887.017671}: u'"roles"'
2015-09-09 18:58:07+0200 [Router 3722] Traceback (most recent call last):
2015-09-09 18:58:07+0200 [Router 3722] File "/usr/local/lib/python2.7/dist-packages/autobahn/wamp/websocket.py", line 95, in onMessage
2015-09-09 18:58:07+0200 [Router 3722] print("RX {0}".format(msg))
2015-09-09 18:58:07+0200 [Router 3722] File "/usr/local/lib/python2.7/dist-packages/autobahn/wamp/message.py", line 343, in __str__
2015-09-09 18:58:07+0200 [Router 3722] return "WAMP HELLO Message (realm = {0}, roles = {1}, authmethods = {2}, authid = {3})".format(self.realm, self.roles, self.authmethods, self.authid)
2015-09-09 18:58:07+0200 [Router 3722] UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-2: ordinal not in range(128)
2015-09-09 18:58:07+0200 [Router 3722] Failing WAMP-over-WebSocket transport: code = 1011, reason = 'WAMP Internal Error ('ascii' codec can't encode characters in position 1-2: ordinal not in range(128))'
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start at autobahn/wamp/message.py, especially the str method named in the traceback, and follow its call from autobahn/wamp/websocket.py onMessage. Reproduce a WAMP HELLO with a non-ASCII authid and verify that formatting no longer raises UnicodeEncodeError or aborts the WebSocket transport.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- api, backend
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100