aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2014-09-17 17:54:58 -0400
committerJesse Luehrs <doy@tozt.net>2014-09-17 17:54:58 -0400
commit94d22e8b687d1f3896ee93d003331993a116db1b (patch)
tree89f17eea456dee9ae94179a39975b629626226b9
parentab3b176bb73779b78a3a1e4ccd2b68f6abf3d543 (diff)
downloadpython-termcast-server-94d22e8b687d1f3896ee93d003331993a116db1b.tar.gz
python-termcast-server-94d22e8b687d1f3896ee93d003331993a116db1b.zip
handle utf8 decoding errors properly
-rw-r--r--ssh.py4
-rw-r--r--termcast.py16
2 files changed, 14 insertions, 6 deletions
diff --git a/ssh.py b/ssh.py
index 2e290bb..08a5bfb 100644
--- a/ssh.py
+++ b/ssh.py
@@ -85,7 +85,7 @@ class Connection(object):
self._display_streamer_screen(streamers)
- c = self.chan.recv(1).decode('utf-8')
+ c = self.chan.recv(1).decode('utf-8', 'ignore')
if c in keymap:
self.chan.send("\033[2J\033[H")
return keymap[c]
@@ -115,7 +115,7 @@ class Connection(object):
row = 4
for streamer in streamers:
key = streamer["key"]
- name = streamer["name"].decode('utf-8')
+ name = streamer["name"].decode('utf-8', 'replace')
rows = streamer["rows"]
cols = streamer["cols"]
viewers = streamer["viewers"]
diff --git a/termcast.py b/termcast.py
index 25963ef..e94da82 100644
--- a/termcast.py
+++ b/termcast.py
@@ -29,8 +29,12 @@ class Handler(object):
m = extra_data_re.search(self.buf)
if m is None:
break
- extra_data_json = m.group(1)
- extra_data = json.loads(extra_data_json.decode('utf-8'))
+ try:
+ extra_data_json = m.group(1).decode('utf-8')
+ extra_data = json.loads(extra_data_json)
+ except Exception as e:
+ print("failed to parse metadata: %s" % e, file=sys.stderr)
+ pass
self.buf = self.buf[:m.start(0)] + self.buf[m.end(0):]
if "geometry" in extra_data:
self.rows = extra_data["geometry"][1]
@@ -124,8 +128,12 @@ class Connection(object):
extra_data = {}
m = extra_data_re.match(buf)
if m is not None:
- extra_data_json = m.group(1)
- extra_data = json.loads(extra_data_json.decode('utf-8'))
+ try:
+ extra_data_json = m.group(1).decode('utf-8')
+ extra_data = json.loads(extra_data_json)
+ except Exception as e:
+ print("failed to parse metadata: %s" % e, file=sys.stderr)
+ pass
buf = buf[len(m.group(0)):]
if "geometry" in extra_data: