evolution-data-server r9192 - trunk/camel



Author: mcrha
Date: Fri Jul 25 09:57:25 2008
New Revision: 9192
URL: http://svn.gnome.org/viewvc/evolution-data-server?rev=9192&view=rev

Log:
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.



Modified:
   trunk/camel/ChangeLog
   trunk/camel/camel-folder-summary.c

Modified: trunk/camel/camel-folder-summary.c
==============================================================================
--- trunk/camel/camel-folder-summary.c	(original)
+++ trunk/camel/camel-folder-summary.c	Fri Jul 25 09:57:25 2008
@@ -88,10 +88,10 @@
 
 #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 @@
 				info = NULL;
 			} 
 			mir->cinfo = tmp;
+
+			if (!info) {
+				camel_db_camel_mir_free (mir);
+				return -1;
+			}
 		}
 
 		if (data->double_ref)
@@ -2265,10 +2270,16 @@
 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;
 }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]