From d5b4d950245605b84c56ce991fa3c59a073a70e5 Mon Sep 17 00:00:00 2001 From: Jameson Graef Rollins Date: Sat, 28 May 2011 14:52:00 -0700 Subject: [PATCH] show: Avoid inadvertently closing stdout GMime has a nasty habit of taking ownership by default of any FILE* handed to it va g_mime_stream_file_new. Specifically it will close the FILE* when the stream is destroyed---even though GMime didn't open the file itself. To avoid this bad behavior, we have to carefully set_owner(FALSE) after calling g_mime_stream_file_new. In the format_part_content_text function, since commit d92146d3a6809f8ad940302af49cd99a0820665e we've been calling g_mime_stream_file_new unconditionally, but only calling g_mime_stream_file_set_owner(FALSE) conditionally. This led to the FILE* being closed early when notmuch show output was redirected to a file. Fixing this fixes the test-suite cases that broke with the previous commit, (which added redirected "notmuch show" calls to the test suite to expose this bug). Edited-by: Carl Worth with a new commit message to explain the bug and fix. --- notmuch-show.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/notmuch-show.c b/notmuch-show.c index 3ac29597..9267d022 100644 --- a/notmuch-show.c +++ b/notmuch-show.c @@ -456,7 +456,6 @@ format_part_content_text (GMimeObject *part) { GMimeContentDisposition *disposition = g_mime_object_get_content_disposition (part); GMimeContentType *content_type = g_mime_object_get_content_type (GMIME_OBJECT (part)); - GMimeStream *stream_stdout = g_mime_stream_file_new (stdout); printf (", Content-type: %s\n", g_mime_content_type_to_string (content_type)); @@ -471,6 +470,7 @@ format_part_content_text (GMimeObject *part) if (g_mime_content_type_is_type (content_type, "text", "*") && !g_mime_content_type_is_type (content_type, "text", "html")) { + GMimeStream *stream_stdout = g_mime_stream_file_new (stdout); g_mime_stream_file_set_owner (GMIME_STREAM_FILE (stream_stdout), FALSE); show_text_part_content (part, stream_stdout); g_object_unref(stream_stdout); -- 2.43.0