From b2327c37b71d914a05c1c5c60624e952158f51cb Mon Sep 17 00:00:00 2001 From: Milan Rossa Date: Wed, 10 Oct 2018 15:43:33 +0200 Subject: [PATCH] firmware: log exceptions in debug mode (no silent unhandled exceptions) --- src/apps/fido_u2f/__init__.py | 4 +++- src/boot.py | 7 ++++--- src/trezor/loop.py | 2 ++ src/trezor/messages/__init__.py | 4 ++++ 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/apps/fido_u2f/__init__.py b/src/apps/fido_u2f/__init__.py index 174c2a6768..fae31981c6 100644 --- a/src/apps/fido_u2f/__init__.py +++ b/src/apps/fido_u2f/__init__.py @@ -416,8 +416,10 @@ class ConfirmContent(ui.Widget): try: namepart = name.lower().replace(" ", "_") icon = res.load("apps/fido_u2f/res/u2f_%s.toif" % namepart) - except Exception: + except Exception as e: icon = res.load("apps/fido_u2f/res/u2f_generic.toif") + if __debug__: + log.exception(__name__, e) else: name = "%s...%s" % ( hexlify(self.app_id[:4]).decode(), diff --git a/src/boot.py b/src/boot.py index ade161059f..89b1427e89 100644 --- a/src/boot.py +++ b/src/boot.py @@ -1,4 +1,4 @@ -from trezor import config, loop, res, ui +from trezor import config, log, loop, res, ui from trezor.pin import pin_to_int, show_pin_timeout from apps.common.request_pin import request_pin @@ -18,8 +18,9 @@ async def bootscreen(): return else: label = "Wrong PIN, enter again" - except: # noqa: E722 - pass + except Exception as e: + if __debug__: + log.exception(__name__, e) async def lockscreen(): diff --git a/src/trezor/loop.py b/src/trezor/loop.py index e0347dee5d..8075afbbd1 100644 --- a/src/trezor/loop.py +++ b/src/trezor/loop.py @@ -261,6 +261,8 @@ class spawn(Syscall): result = await child except Exception as e: self._finish(child, index, e) + if __debug__: + log.exception(__name__, e) else: self._finish(child, index, result) diff --git a/src/trezor/messages/__init__.py b/src/trezor/messages/__init__.py index 6185ea2a91..9e4ecb13ab 100644 --- a/src/trezor/messages/__init__.py +++ b/src/trezor/messages/__init__.py @@ -29,4 +29,8 @@ def get_type(wire_type): # build reverse table of wire types for msg_name in dir(MessageType): + # Modules contain internal variables that may cause exception here. + # No Message begins with underscore so it's safe to skip those. + if (msg_name[0] == '_'): + continue type_to_name[getattr(MessageType, msg_name)] = msg_name