[PATCH] Prevent segmentation fault in notmuch_database_close

Austin Clements amdragon at MIT.EDU
Sat Feb 18 16:56:22 PST 2012


Quoth Justus Winter on Feb 19 at 12:56 am:
> 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>

LGTM.  Nice catch.

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


More information about the notmuch mailing list