notmuch_database_add_message: Sanity check the file as the first thing
authorCarl Worth <cworth@cworth.org>
Wed, 28 Oct 2009 20:35:10 +0000 (13:35 -0700)
committerCarl Worth <cworth@cworth.org>
Wed, 28 Oct 2009 20:35:10 +0000 (13:35 -0700)
This avoids us wasting a bunch of time doing an expensive SHA-1 over a large
file only to discover later that it doesn't even *look* like an email message.

database.cc

index f01ffa4b3f186a8945f1981798f46c7c9a09cb28..d7cd26c7656d2fd6fb85464d8c1c582d96ee11af 100644 (file)
@@ -881,7 +881,25 @@ notmuch_database_add_message (notmuch_database_t *notmuch,
                                           (char *) NULL);
 
     try {
                                           (char *) NULL);
 
     try {
-       /* The first order of business is to find/create a message ID. */
+       /* Before we do any real work, (especially before doing a
+        * potential SHA-1 computation on the entire file's contents),
+        * let's make sure that what we're looking at looks like an
+        * actual email message.
+        */
+       from = notmuch_message_file_get_header (message_file, "from");
+       subject = notmuch_message_file_get_header (message_file, "subject");
+       to = notmuch_message_file_get_header (message_file, "to");
+
+       if (from == NULL &&
+           subject == NULL &&
+           to == NULL)
+       {
+           ret = NOTMUCH_STATUS_FILE_NOT_EMAIL;
+           goto DONE;
+       }
+
+       /* Now that we're sure it's mail, the first order of business
+        * is to find a message ID (or else create one ourselves). */
 
        header = notmuch_message_file_get_header (message_file, "message-id");
        if (header) {
 
        header = notmuch_message_file_get_header (message_file, "message-id");
        if (header) {
@@ -938,18 +956,6 @@ notmuch_database_add_message (notmuch_database_t *notmuch,
        date = notmuch_message_file_get_header (message_file, "date");
        _notmuch_message_set_date (message, date);
 
        date = notmuch_message_file_get_header (message_file, "date");
        _notmuch_message_set_date (message, date);
 
-       from = notmuch_message_file_get_header (message_file, "from");
-       subject = notmuch_message_file_get_header (message_file, "subject");
-       to = notmuch_message_file_get_header (message_file, "to");
-
-       if (from == NULL &&
-           subject == NULL &&
-           to == NULL)
-       {
-           ret = NOTMUCH_STATUS_FILE_NOT_EMAIL;
-           goto DONE;
-       }
-
        _notmuch_message_index_file (message, filename);
 
        _notmuch_message_sync (message);
        _notmuch_message_index_file (message, filename);
 
        _notmuch_message_sync (message);