notmuch/bindings
Anton Khirnov 1317579079 python/notmuch2: do not destroy messages owned by a query
Any messages retrieved from a query - either directly via
search_messages() or indirectly via thread objects - are owned by that
query. Retrieving the same message (i.e. corresponding to the same
message ID / database object) several times will always yield the same
C object.

The caller is allowed to destroy message objects owned by a query before
the query itself - which can save memory for long-lived queries.
However, that message must then never be retrieved again from that
query.

The python-notmuch2 bindings will currently destroy every message object
in Message._destroy(), which will lead to an invalid free if the same
message is then retrieved again. E.g. the following python program leads
to libtalloc abort()ing:

import notmuch2
db   = notmuch2.Database(mode = notmuch2.Database.MODE.READ_ONLY)
t    = next(db.threads('*'))
msgs = list(zip(t.toplevel(), t.toplevel()))
msgs = list(zip(t.toplevel(), t.toplevel()))

Fix this issue by creating a subclass of Message, which is used for
"standalone" message which have to be freed by the caller. Message class
is then used only for messages descended from a query, which do not need
to be freed by the caller.
2020-06-16 08:02:02 -03:00
..
python version: bump to 0.30~rc1 2020-06-06 08:02:16 -03:00
python-cffi python/notmuch2: do not destroy messages owned by a query 2020-06-16 08:02:02 -03:00
ruby database: add n_d_index_file (deprecates n_d_add_message) 2017-08-23 07:38:37 -03:00
Makefile build: integrate building ruby bindings into notmuch build process 2015-06-12 09:12:28 +02:00
Makefile.local build: optionally build python-cffi bindings 2019-12-03 08:12:30 -04:00