** Fix for bug #544651
authorMilan Crha <mcrha@redhat.com>
Fri, 25 Jul 2008 09:57:25 +0000 (09:57 +0000)
committerMilan Crha <mcrha@src.gnome.org>
Fri, 25 Jul 2008 09:57:25 +0000 (09:57 +0000)
2008-07-25  Milan Crha  <mcrha@redhat.com>

** Fix for bug #544651

* camel-folder-summary.c: (EXTRACT_FIRST_STRING), (EXTRACT_STRING):
Properly update string position after read (thanks to srag).
* camel-folder-summary.c: (EXTRACT_DIGIT):
Prevent moving beyond string limit.
* camel-folder-summary.c: (camel_read_mir_callback):
Do not access NULL.
* camel-folder-summary.c: (my_list_append):
Interpret and update given list pointer properly.

svn path=/trunk/; revision=9192

camel/ChangeLog
camel/camel-folder-summary.c

index f28e92f..a41451f 100644 (file)
@@ -1,5 +1,18 @@
 2008-07-25  Milan Crha  <mcrha@redhat.com>
 
+       ** Fix for bug #544651
+
+       * camel-folder-summary.c: (EXTRACT_FIRST_STRING), (EXTRACT_STRING):
+       Properly update string position after read (thanks to srag).
+       * camel-folder-summary.c: (EXTRACT_DIGIT):
+       Prevent moving beyond string limit.
+       * camel-folder-summary.c: (camel_read_mir_callback):
+       Do not access NULL.
+       * camel-folder-summary.c: (my_list_append):
+       Interpret and update given list pointer properly.
+
+2008-07-25  Milan Crha  <mcrha@redhat.com>
+
        ** Fix for bug #544031
 
        * camel-vee-folder.c: (vee_folder_remove_folder):
index 71b7006..7242b57 100644 (file)
@@ -88,10 +88,10 @@ extern int strdup_count, malloc_count, free_count;
 
 #define META_SUMMARY_SUFFIX_LEN 5 /* strlen("-meta") */
 
-#define EXTRACT_FIRST_STRING(val) len=strtoul (part, &part, 10); part++; val=g_strndup (part, len);
-#define EXTRACT_STRING(val) part++; len=strtoul (part, &part, 10); part++; val=g_strndup (part, len);
+#define EXTRACT_FIRST_STRING(val) len=strtoul (part, &part, 10); if (*part) part++; val=g_strndup (part, len); part+=len;
+#define EXTRACT_STRING(val) if (*part) part++; len=strtoul (part, &part, 10); if (*part) part++; val=g_strndup (part, len); part+=len;
 #define EXTRACT_FIRST_DIGIT(val) val=strtoul (part, &part, 10);
-#define EXTRACT_DIGIT(val) part++; val=strtoul (part, &part, 10);
+#define EXTRACT_DIGIT(val) if (*part) part++; val=strtoul (part, &part, 10);
 
 /* trivial lists, just because ... */
 struct _node {
@@ -937,6 +937,11 @@ camel_read_mir_callback (void * ref, int ncol, char ** cols, char ** name)
                                info = NULL;
                        } 
                        mir->cinfo = tmp;
+
+                       if (!info) {
+                               camel_db_camel_mir_free (mir);
+                               return -1;
+                       }
                }
 
                if (data->double_ref)
@@ -2265,10 +2270,16 @@ camel_folder_summary_decode_token(FILE *in, char **str)
 static struct _node *
 my_list_append(struct _node **list, struct _node *n)
 {
-       struct _node *ln = (struct _node *)list;
+       struct _node *ln = *list;
+       n->next = NULL;
+
+       if (!ln) {
+               *list = n;
+               return n;
+       }
+
        while (ln->next)
                ln = ln->next;
-       n->next = NULL;
        ln->next = n;
        return n;
 }