I think the function remove_cte in db/utils.py should catch this exception instead of killing alot as a result of it:
Traceback (most recent call last):
File "/usr/bin/alot", line 11, in <module>
load_entry_point('alot==0.9.1', 'console_scripts', 'alot')()
File "/usr/share/alot/alot/__main__.py", line 137, in main
UI(dbman, cmdstring)
File "/usr/share/alot/alot/ui.py", line 146, in __init__
self.mainloop.run()
File "/usr/lib/python3/dist-packages/urwid/main_loop.py", line 287, in run
self._run()
File "/usr/lib/python3/dist-packages/urwid/main_loop.py", line 385, in _run
self.event_loop.run()
File "/usr/lib/python3/dist-packages/urwid/main_loop.py", line 1346, in run
reraise(*exc_info)
File "/usr/lib/python3/dist-packages/urwid/compat.py", line 58, in reraise
raise value
File "/usr/lib/python3/dist-packages/urwid/main_loop.py", line 1360, in wrapper
rval = f(*args,**kargs)
File "/usr/lib/python3/dist-packages/urwid/main_loop.py", line 1319, in _twisted_idle_callback
callback()
File "/usr/lib/python3/dist-packages/urwid/main_loop.py", line 574, in entering_idle
self.draw_screen()
File "/usr/lib/python3/dist-packages/urwid/main_loop.py", line 588, in draw_screen
canvas = self._topmost_widget.render(self.screen_size, focus=True)
File "/usr/lib/python3/dist-packages/urwid/widget.py", line 145, in cached_render
canv = fn(self, size, focus=focus)
File "/usr/lib/python3/dist-packages/urwid/decoration.py", line 226, in render
canv = self._original_widget.render(size, focus=focus)
File "/usr/lib/python3/dist-packages/urwid/widget.py", line 145, in cached_render
canv = fn(self, size, focus=focus)
File "/usr/lib/python3/dist-packages/urwid/container.py", line 1089, in render
body = self.body.render((maxcol, maxrow-ftrim-htrim),
File "/usr/share/alot/alot/buffers/buffer.py", line 19, in render
return self.body.render(size, focus)
File "/usr/lib/python3/dist-packages/urwid/widget.py", line 145, in cached_render
canv = fn(self, size, focus=focus)
File "/usr/lib/python3/dist-packages/urwid/listbox.py", line 439, in render
middle, top, bottom = self.calculate_visible(
File "/usr/lib/python3/dist-packages/urwid/listbox.py", line 385, in calculate_visible
next, pos = self._body.get_next( pos )
File "/usr/share/alot/alot/walker.py", line 46, in get_next
return self._get_at_pos(start_from + self.direction)
File "/usr/share/alot/alot/walker.py", line 72, in _get_at_pos
widget = self._get_next_item()
File "/usr/share/alot/alot/walker.py", line 85, in _get_next_item
next_widget = self.containerclass(next_obj, **self.kwargs)
File "/usr/share/alot/alot/widgets/search.py", line 26, in __init__
self.rebuild()
File "/usr/share/alot/alot/widgets/search.py", line 60, in rebuild
width, part = build_text_part(partname, self.thread,
File "/usr/share/alot/alot/widgets/search.py", line 145, in build_text_part
content = prepare_string(name, thread, maxw)
File "/usr/share/alot/alot/widgets/search.py", line 213, in prepare_string
s = content(thread)
File "/usr/share/alot/alot/widgets/search.py", line 188, in prepare_content_string
lastcontent = ' '.join(m.get_body_text() for m in msgs)
File "/usr/share/alot/alot/widgets/search.py", line 188, in <genexpr>
lastcontent = ' '.join(m.get_body_text() for m in msgs)
File "/usr/share/alot/alot/db/message.py", line 280, in get_body_text
return extract_body_part(self.mime_part)
File "/usr/share/alot/alot/db/utils.py", line 497, in extract_body_part
rendered_payload = render_part(
File "/usr/share/alot/alot/db/utils.py", line 345, in render_part
raw_payload = remove_cte(part)
File "/usr/share/alot/alot/db/utils.py", line 440, in remove_cte
bp = base64.b64decode(payload)
File "/usr/lib/python3.9/base64.py", line 87, in b64decode
return binascii.a2b_base64(s)
binascii.Error: Invalid base64-encoded string: number of data characters (939501) cannot be 1 more than a multiple of 4
I think the function
remove_cte
indb/utils.py
should catch this exception instead of killing alot as a result of it: