diff options
-rw-r--r-- | mail/changes/bug_4830_convert-unicode-to-str-when-raising | 1 | ||||
-rw-r--r-- | mail/src/leap/mail/imap/account.py | 32 | ||||
-rw-r--r-- | mail/src/leap/mail/imap/parser.py | 5 |
3 files changed, 32 insertions, 6 deletions
diff --git a/mail/changes/bug_4830_convert-unicode-to-str-when-raising b/mail/changes/bug_4830_convert-unicode-to-str-when-raising new file mode 100644 index 0000000..86d9b1c --- /dev/null +++ b/mail/changes/bug_4830_convert-unicode-to-str-when-raising @@ -0,0 +1 @@ + o Convert unicode to str when raising exceptions in IMAP server (#4830). diff --git a/mail/src/leap/mail/imap/account.py b/mail/src/leap/mail/imap/account.py index 8caafef..215564e 100644 --- a/mail/src/leap/mail/imap/account.py +++ b/mail/src/leap/mail/imap/account.py @@ -36,6 +36,23 @@ from leap.soledad.client import Soledad ####################################### +def _unicode_as_str(text): + """ + Return some representation of C{text} as a str. + + This is here mainly because Twisted's exception methods are not able to + print unicode text. + + :param text: The text to convert. + :type text: unicode + + :return: A representation of C{text} as str. + :rtype: str + """ + # XXX is there a better str representation for unicode? + return repr(text) + + class SoledadBackedAccount(WithMsgFields, IndexedDB, MBoxParser): """ An implementation of IAccount and INamespacePresenteer @@ -129,7 +146,8 @@ class SoledadBackedAccount(WithMsgFields, IndexedDB, MBoxParser): name = self._parse_mailbox_name(name) if name not in self.mailboxes: - raise imap4.MailboxException("No such mailbox") + raise imap4.MailboxException("No such mailbox: %s" % + _unicode_as_str(name)) return SoledadMailbox(name, soledad=self._soledad) @@ -155,7 +173,7 @@ class SoledadBackedAccount(WithMsgFields, IndexedDB, MBoxParser): name = self._parse_mailbox_name(name) if name in self.mailboxes: - raise imap4.MailboxCollision, name + raise imap4.MailboxCollision, _unicode_as_str(name) if not creation_ts: # by default, we pass an int value @@ -241,7 +259,8 @@ class SoledadBackedAccount(WithMsgFields, IndexedDB, MBoxParser): name = self._parse_mailbox_name(name) if not name in self.mailboxes: - raise imap4.MailboxException("No such mailbox") + raise imap4.MailboxException("No such mailbox: %s" % + _unicode_as_str(name)) mbox = self.getMailbox(name) @@ -280,14 +299,14 @@ class SoledadBackedAccount(WithMsgFields, IndexedDB, MBoxParser): newname = self._parse_mailbox_name(newname) if oldname not in self.mailboxes: - raise imap4.NoSuchMailbox, oldname + raise imap4.NoSuchMailbox, _unicode_as_str(oldname) inferiors = self._inferiorNames(oldname) inferiors = [(o, o.replace(oldname, newname, 1)) for o in inferiors] for (old, new) in inferiors: if new in self.mailboxes: - raise imap4.MailboxCollision, new + raise imap4.MailboxCollision, _unicode_as_str(new) for (old, new) in inferiors: mbox = self._get_mailbox_by_name(old) @@ -368,7 +387,8 @@ class SoledadBackedAccount(WithMsgFields, IndexedDB, MBoxParser): """ name = self._parse_mailbox_name(name) if name not in self.subscriptions: - raise imap4.MailboxException, "Not currently subscribed to " + name + raise imap4.MailboxException, \ + "Not currently subscribed to %s" % _unicode_as_str(name) self._set_subscription(name, False) def listMailboxes(self, ref, wildcard): diff --git a/mail/src/leap/mail/imap/parser.py b/mail/src/leap/mail/imap/parser.py index 306dcf0..6a9ace9 100644 --- a/mail/src/leap/mail/imap/parser.py +++ b/mail/src/leap/mail/imap/parser.py @@ -102,6 +102,11 @@ class MBoxParser(object): def _parse_mailbox_name(self, name): """ + Return a normalized representation of the mailbox C{name}. + + This method ensures that an eventual initial 'inbox' part of a + mailbox name is made uppercase. + :param name: the name of the mailbox :type name: unicode |