[Python-apps-team] Bug#880172: alot: UnicodeEncodeError for search queries with non-ascii characters

Johannes Schauer josch at debian.org
Mon Oct 30 10:14:10 UTC 2017


Package: alot
Version: 0.6-1
Severity: normal
Tags: patch

Hi,

steps to reproduce:

 1. search for a query string containing non-ascii characters

 2. try opening any of the resulting threads

 3. the following will be output in the debug log:

ERROR:ui:Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 651, in _runCallbacks
    current.result = callback(current.result, *args, **kw)
  File "/usr/share/alot/alot/ui.py", line 679, in call_apply
    return defer.maybeDeferred(cmd.apply, self)
  File "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 150, in maybeDeferred
    result = f(*args, **kw)
  File "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 1445, in unwindGenerator
    return _inlineCallbacks(None, gen, Deferred())
--- <exception caught here> ---
  File "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 1299, in _inlineCallbacks
    result = g.send(result)
  File "/usr/share/alot/alot/commands/globals.py", line 77, in apply
    ui.cleanup()
  File "/usr/share/alot/alot/ui.py", line 711, in cleanup
    self._cmd_hist_file, size=size)
  File "/usr/share/alot/alot/ui.py", line 764, in _save_history_to_file
    histfile.write(line)
exceptions.UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in position 11: ordinal not in range(128)


alot will not crash but the result of this exception is, that all
messages in the thread are unfolded and not only those matching the
query terms. Naturally this is undesirable. To fix this problem, the
following patch to alot/db/message.py suffices:

@@ -254,5 +254,5 @@
 
     def matches(self, querystring):
         """tests if this messages is in the resultset for `querystring`"""
-        searchfor = '( {} ) AND id:{}'.format(querystring, self._id)
+        searchfor = u'( {} ) AND id:{}'.format(querystring, self._id)
         return self._dbman.count_messages(searchfor) > 0



Please consider applying it.

Thanks!

cheers, josch



-- System Information:
Debian Release: 9.0
  APT prefers testing
  APT policy: (990, 'testing'), (500, 'unstable-debug'), (500, 'unstable'), (500, 'oldstable'), (1, 'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386, armhf

Kernel: Linux 4.9.0-3-amd64 (SMP w/4 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)

Versions of packages alot depends on:
ii  python               2.7.13-2
ii  python-configobj     5.0.6-2
ii  python-gpg           1.8.0-3+b2
ii  python-gpgme         0.3-1.2
ii  python-magic         1:5.30-1
ii  python-notmuch       0.23.7-3
ii  python-twisted       16.6.0-2
ii  python-twisted-core  16.6.0-2
ii  python-urwid         1.3.1-2+b1
ii  python-urwidtrees    1.0.1.1-1

Versions of packages alot recommends:
ii  links    2.14-2+b1
ii  links2   2.14-2+b1
ii  notmuch  0.23.7-3
ii  w3m      0.5.3-34

Versions of packages alot suggests:
pn  alot-doc  <none>

-- no debconf information

-- debsums errors found:
debsums: changed file /usr/share/alot/alot/db/message.py (from alot package)



More information about the Python-apps-team mailing list