From 0400945ac4c3b31dd476e2f8727f75d895a09378 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Fri, 16 Oct 2015 18:26:34 +0200 Subject: [PATCH] Raise exception when a stylesheet is unparsable. --- qutebrowser/utils/log.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/qutebrowser/utils/log.py b/qutebrowser/utils/log.py index 69e5ad757..2a87cab4c 100644 --- a/qutebrowser/utils/log.py +++ b/qutebrowser/utils/log.py @@ -133,6 +133,11 @@ sessions = logging.getLogger('sessions') ram_handler = None +class CriticalQtWarning(Exception): + + """Exception raised when there's a critical Qt warning.""" + + def init_log(args): """Init loggers based on the argparse namespace passed.""" level = 'VDEBUG' if args.debug else args.loglevel.upper() @@ -301,7 +306,17 @@ def qt_message_handler(msg_type, context, msg): 'with: -9805', # noqa ] - if any(msg.strip().startswith(pattern) for pattern in suppressed_msgs): + # Messages which will trigger an exception immediately + critical_msgs = [ + 'Could not parse stylesheet of object', + ] + + if any(msg.strip().startswith(pattern) for pattern in critical_msgs): + # For some reason, the stack gets lost when raising here... + logger = logging.getLogger('misc') + logger.error("Got critical Qt warning!", stack_info=True) + raise CriticalQtWarning(msg) + elif any(msg.strip().startswith(pattern) for pattern in suppressed_msgs): level = logging.DEBUG else: level = qt_to_logging[msg_type]