unofficial mirror of notmuch@notmuchmail.org
 help / color / mirror / code / Atom feed
* [PATCH] crypto: gracefully handle gmime errors
@ 2017-08-31 13:31 Jan Malakhovski
  2017-08-31 13:44 ` Jan Malakhovski
                   ` (2 more replies)
  0 siblings, 3 replies; 27+ messages in thread
From: Jan Malakhovski @ 2017-08-31 13:31 UTC (permalink / raw)
  To: notmuch

Before: dies by SIGSEGV when gmime produces an error.
After: doesn't print NULL mime nodes.
---
 mime-node.c    |  5 +++++
 notmuch-show.c | 18 +++++++++++++-----
 2 files changed, 18 insertions(+), 5 deletions(-)

diff --git a/mime-node.c b/mime-node.c
index 24d73afa..f27aeb9a 100644
--- a/mime-node.c
+++ b/mime-node.c
@@ -317,7 +317,10 @@ mime_node_child (mime_node_t *parent, int child)
 	INTERNAL_ERROR ("Unexpected GMimeObject type: %s",
 			g_type_name (G_OBJECT_TYPE (parent->part)));
     }
+
     node = _mime_node_create (parent, sub);
+    if (!node)
+	return NULL;
 
     if (child == parent->next_child && parent->next_part_num != -1) {
 	/* We're traversing in depth-first order.  Record the child's
@@ -354,6 +357,8 @@ _mime_node_seek_dfs_walk (mime_node_t *node, int *n)
     *n -= 1;
     for (i = 0; i < node->nchildren; i++) {
 	mime_node_t *child = mime_node_child (node, i);
+	if (!child)
+	    return NULL;
 	mime_node_t *ret = _mime_node_seek_dfs_walk (child, n);
 	if (ret)
 	    return ret;
diff --git a/notmuch-show.c b/notmuch-show.c
index cdcc2a98..2c591e37 100644
--- a/notmuch-show.c
+++ b/notmuch-show.c
@@ -567,8 +567,11 @@ format_part_text (const void *ctx, sprinter_t *sp, mime_node_t *node,
 	}
     }
 
-    for (i = 0; i < node->nchildren; i++)
-	format_part_text (ctx, sp, mime_node_child (node, i), indent, params);
+    for (i = 0; i < node->nchildren; i++) {
+	mime_node_t * child = mime_node_child (node, i);
+	if (child)
+	    format_part_text (ctx, sp, child, indent, params);
+    }
 
     if (GMIME_IS_MESSAGE (node->part))
 	g_mime_stream_printf (stream, "\fbody}\n");
@@ -619,7 +622,9 @@ format_part_sprinter (const void *ctx, sprinter_t *sp, mime_node_t *node,
 	if (output_body) {
 	    sp->map_key (sp, "body");
 	    sp->begin_list (sp);
-	    format_part_sprinter (ctx, sp, mime_node_child (node, 0), TRUE, include_html);
+	    mime_node_t * child = mime_node_child (node, 0);
+	    if (child)
+		format_part_sprinter (ctx, sp, child, TRUE, include_html);
 	    sp->end (sp);
 	}
 	sp->end (sp);
@@ -720,8 +725,11 @@ format_part_sprinter (const void *ctx, sprinter_t *sp, mime_node_t *node,
 	nclose = 3;
     }
 
-    for (i = 0; i < node->nchildren; i++)
-	format_part_sprinter (ctx, sp, mime_node_child (node, i), TRUE, include_html);
+    for (i = 0; i < node->nchildren; i++) {
+	mime_node_t * child = mime_node_child (node, i);
+	if (child)
+	    format_part_sprinter (ctx, sp, child, TRUE, include_html);
+    }
 
     /* Close content structures */
     for (i = 0; i < nclose; i++)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 27+ messages in thread

end of thread, other threads:[~2017-11-10  1:05 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-08-31 13:31 [PATCH] crypto: gracefully handle gmime errors Jan Malakhovski
2017-08-31 13:44 ` Jan Malakhovski
2017-09-01  0:10   ` [PATCH] cli: propagate NULL from _mime_node_create, handle it in callers David Bremner
2017-09-01 20:32     ` Jan Malakhovski
2017-08-31 14:22 ` [PATCH] crypto: gracefully handle gmime errors David Bremner
2017-08-31 14:30   ` David Bremner
2017-08-15 17:37     ` bug: notmuch show --decrypt leads to SIGSEGV Matt Armstrong
2017-08-15 18:11       ` David Bremner
2017-08-15 19:10         ` Matt Armstrong
2017-08-15 23:12           ` David Bremner
2017-08-16 16:41             ` Matt Armstrong
2017-08-20 13:43               ` David Bremner
2017-08-31 15:17       ` [PATCH] crypto: gracefully handle gmime errors Jan Malakhovski
2017-08-31 18:33         ` David Bremner
2017-08-31 22:27         ` David Bremner
2017-08-31 23:20           ` Matt Armstrong
2017-08-31 23:59           ` Jan Malakhovski
2017-11-10  1:05       ` bug: notmuch show --decrypt leads to SIGSEGV David Bremner
2017-08-31 14:34 ` [BUG] gmime-3.0.1 (was: [PATCH] crypto: gracefully handle gmime errors) Jan Malakhovski
2017-09-05 10:54   ` David Bremner
2017-09-05 12:55     ` Jan Malakhovski
2017-09-05 13:38       ` David Bremner
2017-09-05 14:26         ` Jan Malakhovski
2017-09-05 15:26           ` David Bremner
2017-09-05 20:23             ` Jan Malakhovski
2017-09-05 14:04       ` Servilio Afre Puentes
2017-09-05 14:27         ` Jan Malakhovski

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).