[PATCH] Prevent segmentation fault in notmuch_database_close

Justus Winter 4winter at informatik.uni-hamburg.de
Sat Feb 18 15:56:57 PST 2012


Previously opening a notmuch database in read write mode that has been
locked resulted in the notmuch_database_open function executing
notmuch_database_close as a cleanup function. notmuch_database_close
failed to check whether the xapian database has in fact been created.

Add a check whether the xapian database object has actually been
created before trying to call its flush method.

Signed-off-by: Justus Winter <4winter at informatik.uni-hamburg.de>
---
 lib/database.cc |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/lib/database.cc b/lib/database.cc
index c928d02..5efa85e 100644
--- a/lib/database.cc
+++ b/lib/database.cc
@@ -716,7 +716,8 @@ void
 notmuch_database_close (notmuch_database_t *notmuch)
 {
     try {
-	if (notmuch->mode == NOTMUCH_DATABASE_MODE_READ_WRITE)
+	if (notmuch->xapian_db != NULL &&
+	    notmuch->mode == NOTMUCH_DATABASE_MODE_READ_WRITE)
 	    (static_cast <Xapian::WritableDatabase *> (notmuch->xapian_db))->flush ();
     } catch (const Xapian::Error &error) {
 	if (! notmuch->exception_reported) {
-- 
1.7.9



More information about the notmuch mailing list