X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=mime-node.c;h=ff6805bf020998e33c45ce5657cf93f79b5a647b;hp=d4996a33db685917b91e2f0704e8ac5a19a4d771;hb=02112728433cb08ea2501d937a2ca3cb73a0d85b;hpb=60ddce8a161772583e8d223498997ee866d04ede diff --git a/mime-node.c b/mime-node.c index d4996a33..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) @@ -201,7 +221,7 @@ node_verify (mime_node_t *node, GMimeObject *part) node->verify_attempted = true; node->sig_list = g_mime_multipart_signed_verify ( - GMIME_MULTIPART_SIGNED (part), GMIME_ENCRYPT_NONE, &err); + GMIME_MULTIPART_SIGNED (part), GMIME_VERIFY_NONE, &err); if (node->sig_list) set_signature_list_destructor (node); @@ -227,19 +247,21 @@ node_decrypt_and_verify (mime_node_t *node, GMimeObject *part) GMimeMultipartEncrypted *encrypteddata = GMIME_MULTIPART_ENCRYPTED (part); notmuch_message_t *message = NULL; - if (! node->decrypted_child) { + if (! node->unwrapped_child) { for (mime_node_t *parent = node; parent; parent = parent->parent) if (parent->envelope_file) { message = parent->envelope_file; break; } - node->decrypted_child = _notmuch_crypto_decrypt (&node->decrypt_attempted, + node->unwrapped_child = _notmuch_crypto_decrypt (&node->decrypt_attempted, node->ctx->crypto->decrypt, message, encrypteddata, &decrypt_result, &err); + if (node->unwrapped_child) + set_unwrapped_child_destructor (node); } - if (! node->decrypted_child) { + if (! node->unwrapped_child) { fprintf (stderr, "Failed to decrypt part: %s\n", err ? err->message : "no error explanation given"); goto DONE; @@ -380,8 +402,8 @@ mime_node_child (mime_node_t *parent, int child) return NULL; if (GMIME_IS_MULTIPART (parent->part)) { - if (child == GMIME_MULTIPART_ENCRYPTED_CONTENT && parent->decrypted_child) - sub = parent->decrypted_child; + if (child == GMIME_MULTIPART_ENCRYPTED_CONTENT && parent->unwrapped_child) + sub = parent->unwrapped_child; else sub = g_mime_multipart_get_part ( GMIME_MULTIPART (parent->part), child);