[PATCH v2 3/3] lib: call g_mime_init() from notmuch_database_open()
David Bremner
david at tethera.net
Sat Dec 31 19:22:49 PST 2011
From: Kazuo Teramoto <kaz.rag at gmail.com>
As reported in
id:"CAEbOPGyuHnz4BPtDutnTPUHcP3eYcRCRkXhYoJR43RUMw671+g at mail.gmail.com"
sometimes gmime tries to access a NULL pointer, e.g. g_mime_iconv_open()
tries to access iconv_cache that is NULL if g_mime_init() is not called.
This causes notmuch to segfault when calling gmime functions.
Calling g_mime_init() initializes iconv_cache and others variables needed
by gmime, making sure they are initialized when notmuch calls gmime
functions.
Test marked fix by db.
---
lib/database.cc | 9 +++++++++
test/python | 1 -
2 files changed, 9 insertions(+), 1 deletions(-)
diff --git a/lib/database.cc b/lib/database.cc
index d11dfaf..8103bd9 100644
--- a/lib/database.cc
+++ b/lib/database.cc
@@ -28,6 +28,8 @@
#include <glib.h> /* g_free, GPtrArray, GHashTable */
#include <glib-object.h> /* g_type_init */
+#include <gmime/gmime.h> /* g_mime_init */
+
using namespace std;
#define ARRAY_SIZE(arr) (sizeof (arr) / sizeof (arr[0]))
@@ -585,6 +587,7 @@ notmuch_database_open (const char *path,
struct stat st;
int err;
unsigned int i, version;
+ static int initialized = 0;
if (asprintf (¬much_path, "%s/%s", path, ".notmuch") == -1) {
notmuch_path = NULL;
@@ -608,6 +611,12 @@ notmuch_database_open (const char *path,
/* Initialize the GLib type system and threads */
g_type_init ();
+ /* Initialize gmime */
+ if (! initialized) {
+ g_mime_init (0);
+ initialized = 1;
+ }
+
notmuch = talloc (NULL, notmuch_database_t);
notmuch->exception_reported = FALSE;
notmuch->path = talloc_strdup (notmuch, path);
diff --git a/test/python b/test/python
index 0b56db3..c3aa726 100755
--- a/test/python
+++ b/test/python
@@ -5,7 +5,6 @@ test_description="python bindings"
add_email_corpus
test_begin_subtest "compare thread ids"
-test_subtest_known_broken
test_python <<EOF
import notmuch
db = notmuch.Database(mode=notmuch.Database.MODE.READ_WRITE)
--
1.7.7.3
More information about the notmuch
mailing list