diff --git a/zerver/lib/actions.py b/zerver/lib/actions.py index 854ebd3279..033b1cc20f 100644 --- a/zerver/lib/actions.py +++ b/zerver/lib/actions.py @@ -9,6 +9,7 @@ from django.utils.translation import ugettext as _ from django.conf import settings from django.core import validators from django.contrib.sessions.models import Session +from zerver.lib.bugdown import BugdownRenderingException from zerver.lib.cache import flush_user_profile from zerver.lib.context_managers import lockfile from zerver.models import Realm, RealmEmoji, Stream, UserProfile, UserActivity, \ @@ -1064,7 +1065,9 @@ def check_message(sender, client, message_type_name, message_to, message.pub_date = timezone.now() message.sending_client = client - if not message.maybe_render_content(realm.domain): + try: + message.maybe_render_content(realm.domain) + except BugdownRenderingException: raise JsonableError(_("Unable to render message")) if client.name == "zephyr_mirror": diff --git a/zerver/lib/bugdown/__init__.py b/zerver/lib/bugdown/__init__.py index 1affd0df51..166e896f66 100644 --- a/zerver/lib/bugdown/__init__.py +++ b/zerver/lib/bugdown/__init__.py @@ -57,6 +57,9 @@ if False: # mypy requires the Optional to be inside Union ElementStringNone = Union[Element, Optional[text_type]] +class BugdownRenderingException(Exception): + pass + def unescape(s): # type: (text_type) -> (text_type) if six.PY2: @@ -1177,7 +1180,7 @@ def do_convert(md, realm_domain=None, message=None): mail.mail_admins(subject, "Failed message: %s\n\n%s\n\n" % ( cleaned, traceback.format_exc()), fail_silently=False) - return None + raise BugdownRenderingException() finally: current_message = None db_data = None diff --git a/zerver/tests/test_bugdown.py b/zerver/tests/test_bugdown.py index f296a03026..9a5935a8f9 100644 --- a/zerver/tests/test_bugdown.py +++ b/zerver/tests/test_bugdown.py @@ -570,8 +570,8 @@ class BugdownErrorTests(ZulipTestCase): def test_bugdown_error_handling(self): # type: () -> None with self.simulated_markdown_failure(): - rendered_message = bugdown.convert('', 'zulip.com') - self.assertEqual(rendered_message, None) + with self.assertRaises(bugdown.BugdownRenderingException): + bugdown.convert('', 'zulip.com') def test_send_message_errors(self): # type: () -> None