unofficial mirror of notmuch@notmuchmail.org
 help / color / mirror / code / Atom feed
From: Floris Bruynooghe <flub@devork.be>
To: David Bremner <david@tethera.net>,
	David Bremner <david@tethera.net>,
	notmuch@notmuchmail.org
Subject: Re: [PATCH 2/2] python-cffi: returned OwnedMessage objects from Message.replies
Date: Sat, 08 Jan 2022 19:59:39 +0100	[thread overview]
Message-ID: <87a6g6aw9w.fsf@powell.devork.be> (raw)
In-Reply-To: <20220108140316.3022887-2-david@tethera.net>

On Sat 08 Jan 2022 at 10:03 -0400, David Bremner wrote:

> If we return regular Message objects, python will try to destroy them,
> and the underlying notmuch object, causing e.g. the crash [1].
>
> [1]: id:87sfu6utxg.fsf@tethera.net
> ---
>  bindings/python-cffi/notmuch2/_message.py | 4 ++--
>  test/T392-python-cffi-notmuch.sh          | 2 --
>  2 files changed, 2 insertions(+), 4 deletions(-)
>
> diff --git a/bindings/python-cffi/notmuch2/_message.py b/bindings/python-cffi/notmuch2/_message.py
> index a460d8c1..aa1cb875 100644
> --- a/bindings/python-cffi/notmuch2/_message.py
> +++ b/bindings/python-cffi/notmuch2/_message.py
> @@ -371,14 +371,14 @@ class Message(base.NotmuchObject):
>          This method will only work if the message was created from a
>          thread.  Otherwise it will yield no results.
>  
> -        :returns: An iterator yielding :class:`Message` instances.
> +        :returns: An iterator yielding :class:`OwnedMessage` instances.
>          :rtype: MessageIter
>          """
>          # The notmuch_messages_valid call accepts NULL and this will
>          # become an empty iterator, raising StopIteration immediately.
>          # Hence no return value checking here.
>          msgs_p = capi.lib.notmuch_message_get_replies(self._msg_p)
> -        return MessageIter(self, msgs_p, db=self._db)
> +        return MessageIter(self, msgs_p, db=self._db, msg_cls=OwnedMessage)
>  
>      def __hash__(self):
>          return hash(self.messageid)
> diff --git a/test/T392-python-cffi-notmuch.sh b/test/T392-python-cffi-notmuch.sh
> index 50012c55..15c8fc6b 100755
> --- a/test/T392-python-cffi-notmuch.sh
> +++ b/test/T392-python-cffi-notmuch.sh
> @@ -24,13 +24,11 @@ show_msgs(thread, 0)
>  EOF
>  
>  test_begin_subtest "recursive traversal of replies (no crash)"
> -test_subtest_known_broken
>  test_python < recurse.py
>  error=$?
>  test_expect_equal "${error}" 0
>  
>  test_begin_subtest "recursive traversal of replies (output)"
> -test_subtest_known_broken
>  test_python < recurse.py
>  tail -n 10 < OUTPUT > OUTPUT.sample
>  cat <<EOF > EXPECTED

oh, nice debugging!  And yes, this seems like the right fix, glad the
mechanism was at least already in place.

With respect to the docs, they seem clear enough.  Probably I missed
this or I simply didn't realise that the replies iter is basically a
thread owning it.

Only thing I'd do different is write a pytest test for this as well, but
than I wouldn't have written the notmuch tests. So I don't think this
matters that much.

Cheers,
Floris

  reply	other threads:[~2022-01-08 18:59 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-01-02 13:51 use after free in python notmuch2 bindings David Bremner
2022-01-07 13:06 ` David Bremner
2022-01-08 14:03   ` [PATCH 1/2] test: add known broken tests for recursive traversal of replies David Bremner
2022-01-08 14:03     ` [PATCH 2/2] python-cffi: returned OwnedMessage objects from Message.replies David Bremner
2022-01-08 18:59       ` Floris Bruynooghe [this message]
2022-01-09 13:26         ` David Bremner
2022-01-11 22:02           ` Floris Bruynooghe
2022-01-12  0:55             ` David Bremner
2022-01-09 13:27     ` [PATCH 1/2] test: add known broken tests for recursive traversal of replies David Bremner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://notmuchmail.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87a6g6aw9w.fsf@powell.devork.be \
    --to=flub@devork.be \
    --cc=david@tethera.net \
    --cc=notmuch@notmuchmail.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://yhetil.org/notmuch.git/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).