From b8669546e0073b7d7ebd46d9f4c369bf891f6d43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kim=20Silkeb=C3=A6kken?= Date: Sat, 10 Sep 2011 21:45:48 +0200 Subject: [PATCH 1/3] Fix byte/string conversion for Python 3. --- websocket.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/websocket.py b/websocket.py index e906b7e..984043f 100644 --- a/websocket.py +++ b/websocket.py @@ -312,7 +312,7 @@ Sec-WebSocket-Accept: %s\r offset=full_len - (f['length'] % 4), count=(f['length'] % 4)) c = numpy.bitwise_xor(data, mask).tostring() - f['payload'] = b + c + f['payload'] = b + s2b(c) else: print("Unmasked frame: %s" % repr(buf)) f['payload'] = buf[(f['hlen'] + has_mask * 4):full_len] @@ -635,7 +635,7 @@ Sec-WebSocket-Accept: %s\r # Generate the hash value for the accept header accept = b64encode(sha1(s2b(key + self.GUID)).digest()) - response = self.server_handshake_hybi % accept + response = self.server_handshake_hybi % b2s(accept) if self.base64: response += "Sec-WebSocket-Protocol: base64\r\n" else: From 602b55c60a0fdc10e61e64173bfabedb2c0f4e41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kim=20Silkeb=C3=A6kken?= Date: Sat, 10 Sep 2011 22:02:53 +0200 Subject: [PATCH 2/3] Make s2b/b2s fail silently if the type is wrong. These functions throw TypeError exceptions if the parameters are already encoded/decoded. This can be avoided by type checking before attempting to encode/decode the parameters. --- websocket.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/websocket.py b/websocket.py index 984043f..ec69ba6 100644 --- a/websocket.py +++ b/websocket.py @@ -26,8 +26,8 @@ if sys.hexversion > 0x3000000: from io import StringIO from http.server import SimpleHTTPRequestHandler from urllib.parse import urlsplit - b2s = lambda buf: buf.decode('latin_1') - s2b = lambda s: s.encode('latin_1') + b2s = lambda buf: buf.decode('latin_1') if isinstance(buf, bytes) else buf + s2b = lambda s: s.encode('latin_1') if isinstance(s, str) else s else: # python 2.X from cStringIO import StringIO From 56ab9c70b577a7de655786b3ea89f551503c02dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kim=20Silkeb=C3=A6kken?= Date: Sat, 10 Sep 2011 22:07:56 +0200 Subject: [PATCH 3/3] Ensure that the payload parts in decode_hybi consist of bytes. --- websocket.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/websocket.py b/websocket.py index ec69ba6..72874e9 100644 --- a/websocket.py +++ b/websocket.py @@ -312,7 +312,7 @@ Sec-WebSocket-Accept: %s\r offset=full_len - (f['length'] % 4), count=(f['length'] % 4)) c = numpy.bitwise_xor(data, mask).tostring() - f['payload'] = b + s2b(c) + f['payload'] = s2b(b) + s2b(c) else: print("Unmasked frame: %s" % repr(buf)) f['payload'] = buf[(f['hlen'] + has_mask * 4):full_len]