]> git.notmuchmail.org Git - notmuch/blobdiff - notmuch-index-message.cc
Avoid segfault on message with no subject.
[notmuch] / notmuch-index-message.cc
index 4585a3b98905d03d44252f7a88d55b2c06f76f23..5c73825ba2f48e3d7964994d497e104c1a6464a0 100644 (file)
@@ -54,6 +54,7 @@
 #include <string.h>
 #include <errno.h>
 #include <time.h>
+#include <sys/time.h>
 
 #include <iostream>
 
@@ -204,6 +205,9 @@ gen_terms_address_names (Xapian::TermGenerator term_gen,
     int i;
     InternetAddress *address;
 
+    if (addresses == NULL)
+       return;
+
     for (i = 0; i < internet_address_list_length (addresses); i++) {
        address = internet_address_list_get_address (addresses, i);
        gen_terms_address_name (term_gen, address, address_type);
@@ -234,6 +238,9 @@ add_terms_address_addrs (Xapian::Document doc,
     int i;
     InternetAddress *address;
 
+    if (addresses == NULL)
+       return;
+
     for (i = 0; i < internet_address_list_length (addresses); i++) {
        address = internet_address_list_get_address (addresses, i);
        add_term_address_addr (doc, address, address_type);
@@ -246,6 +253,9 @@ skip_re_in_subject (const char *subject)
 {
     const char *s = subject;
 
+    if (subject == NULL)
+       return NULL;
+
     while (*s) {
        while (*s && isspace (*s))
            s++;
@@ -497,7 +507,8 @@ gen_terms_part (Xapian::TermGenerator term_gen,
     stream = g_mime_stream_mem_new_with_byte_array (byte_array);
     g_mime_stream_mem_set_owner (GMIME_STREAM_MEM (stream), FALSE);
     wrapper = g_mime_part_get_content_object (GMIME_PART (part));
-    g_mime_data_wrapper_write_to_stream (wrapper, stream);
+    if (wrapper)
+       g_mime_data_wrapper_write_to_stream (wrapper, stream);
 
     g_object_unref (stream);
 
@@ -670,6 +681,8 @@ main (int argc, char **argv)
     GIOChannel *channel;
     GIOStatus gio_status;
     GError *error = NULL;
+    int count;
+    struct timeval tv_start, tv_now;
 
     if (argc < 2) {
        usage (argv[0]);
@@ -691,6 +704,10 @@ main (int argc, char **argv)
 
        channel = g_io_channel_unix_new (fileno (stdin));
 
+       count = 0;
+
+       gettimeofday (&tv_start, NULL);
+
        while (1) {
            gio_status = g_io_channel_read_line (channel, &filename,
                                                 NULL, NULL, &error);
@@ -706,6 +723,14 @@ main (int argc, char **argv)
            index_file (db, term_gen, filename);
 
            g_free (filename);
+
+           count++;
+           if (count % 250 == 0) {
+               gettimeofday (&tv_now, NULL);
+               printf ("Indexed %d messages (%g messages/second)\n",
+                       count, count / ((tv_now.tv_sec - tv_start.tv_sec) +
+                                       (tv_now.tv_usec - tv_start.tv_usec) / 1e6));
+           }
        }
 
     } catch (const Xapian::Error &error) {