On Thu, Mar 19 2020, Daniel Kahn Gillmor wrote: > Avoid a memory leak in the notmuch command line. > > gmime_multipart_encrypted_decrypt returns a GMimeObject marked by > GMime as "transfer full", so we are supposed to clean up after it. > > When parsing a message, notmuch would leak one GMimeObject part per > multipart/encrypted MIME layer. We clean it up by analogy with > cleaning up the signature list associated with a MIME node. > > Signed-off-by: Daniel Kahn Gillmor <dkg@fifthhorseman.net> Looks good to me. Tomi > --- > mime-node.c | 22 ++++++++++++++++++++++ > 1 file changed, 22 insertions(+) > > diff --git a/mime-node.c b/mime-node.c > index 2a823dfd..ff6805bf 100644 > --- a/mime-node.c > +++ b/mime-node.c > @@ -192,6 +192,26 @@ set_signature_list_destructor (mime_node_t *node) > } > } > > +/* Unwrapped MIME part destructor */ > +static int > +_unwrapped_child_free (GMimeObject **proxy) > +{ > + g_object_unref (*proxy); > + return 0; > +} > + > +/* Set up unwrapped MIME part destructor */ > +static void > +set_unwrapped_child_destructor (mime_node_t *node) > +{ > + GMimeObject **proxy = talloc (node, GMimeObject *); > + > + if (proxy) { > + *proxy = node->unwrapped_child; > + talloc_set_destructor (proxy, _unwrapped_child_free); > + } > +} > + > /* Verify a signed mime node */ > static void > node_verify (mime_node_t *node, GMimeObject *part) > @@ -238,6 +258,8 @@ node_decrypt_and_verify (mime_node_t *node, GMimeObject *part) > node->ctx->crypto->decrypt, > message, > encrypteddata, &decrypt_result, &err); > + if (node->unwrapped_child) > + set_unwrapped_child_destructor (node); > } > if (! node->unwrapped_child) { > fprintf (stderr, "Failed to decrypt part: %s\n", > -- > 2.25.1 _______________________________________________ notmuch mailing list notmuch@notmuchmail.org https://notmuchmail.org/mailman/listinfo/notmuch