From 94d22e8b687d1f3896ee93d003331993a116db1b Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Wed, 17 Sep 2014 17:54:58 -0400 Subject: handle utf8 decoding errors properly --- ssh.py | 4 ++-- termcast.py | 16 ++++++++++++---- 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: -- cgit v1.2.3-54-g00ecf