aboutsummaryrefslogtreecommitdiff
path: root/database.cc
diff options
context:
space:
mode:
authorCarl Worth <cworth@cworth.org>2009-10-28 13:35:10 -0700
committerCarl Worth <cworth@cworth.org>2009-10-28 13:35:10 -0700
commitcfa228a3d4b300df3551e811028508d3de5cd81c (patch)
tree4810965636edcd1af440f62d59630c73cdf737ad /database.cc
parent81861514c9a86350d24322c1de80b284bd2c1033 (diff)
notmuch_database_add_message: Sanity check the file as the first thing
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.
Diffstat (limited to 'database.cc')
-rw-r--r--database.cc32
1 files changed, 19 insertions, 13 deletions
diff --git a/database.cc b/database.cc
index f01ffa4..d7cd26c 100644
--- a/database.cc
+++ b/database.cc
@@ -881,7 +881,25 @@ notmuch_database_add_message (notmuch_database_t *notmuch,
(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) {
@@ -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);
- 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);