[notmuch] [PATCH] fix notmuch-new bug when database path ends with a trailing /

Bart Trojanowski bart at jukie.net
Sun Nov 22 08:19:31 PST 2009


I configured my database.path with a trailing /, and after running notmuch
new every notmuch search would fail with error messages like this:

  Error opening /inbox/cur/1258565257.000211.mbox:2,S: No such file or directory

The actual bug was in the filename normalization for storage in the
database.  The database.path was removed from the full filename, but if
the database.path from the config file contained a trailing /, the
relative file name would retain an extra leading /... which made it look
like an absolute path after it was read out from the DB.

Signed-off-by: Bart Trojanowski <bart at jukie.net>
---
 lib/message.cc |   10 +++++++---
 1 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/lib/message.cc b/lib/message.cc
index 017c47b..1e325e2 100644
--- a/lib/message.cc
+++ b/lib/message.cc
@@ -411,10 +411,14 @@ _notmuch_message_set_filename (notmuch_message_t *message,
     db_path = notmuch_database_get_path (message->notmuch);
     db_path_len = strlen (db_path);
 
-    if (*s == '/' && strncmp (s, db_path, db_path_len) == 0
-	&& strlen (s) > db_path_len)
+    if (*s == '/' && strlen (s) > db_path_len
+	&& strncmp (s, db_path, db_path_len) == 0)
     {
-	s += db_path_len + 1;
+	s += db_path_len;
+	while (*s == '/') s++;
+
+	if (!*s)
+		INTERNAL_ERROR ("Message filename was same as db prefix.");
     }
 
     message->doc.set_data (s);
-- 
1.6.4.4.2.gc2f148



More information about the notmuch mailing list