evolution-data-server r9171 - in trunk/camel: . providers/imap providers/local



Author: mcrha
Date: Wed Jul 23 14:50:53 2008
New Revision: 9171
URL: http://svn.gnome.org/viewvc/evolution-data-server?rev=9171&view=rev

Log:
2008-07-23  Milan Crha  <mcrha redhat com>

	** Fix for bug #543943

	* camel/camel-store.c: (construct):
	* camel/camel-folder.c: (camel_folder_construct):
	* camel/camel-vee-folder.c: (summary_header_to_db):
	* camel/camel.c: (camel_init):
	* camel/camel-db.c: (cdb_sql_exec), (camel_db_count_message_info),
	(camel_db_select):
	* camel/camel-folder-summary.c: (camel_folder_summary_migrate_infos),
	(message_info_from_uid), (camel_folder_summary_save_to_db),
	(camel_folder_summary_header_load_from_db),
	(camel_folder_summary_remove_range), (summary_header_to_db):

	* camel/providers/imap/camel-imap-store.c: (camel_imap_store_finalize):
	* camel/providers/imap/camel-imap-summary.c: (message_info_from_db): Leak fix.

	* camel/providers/local/camel-local-summary.c: (summary_header_from_db):
	Reassign structure member correctly, otherwise can cause a crash.
	* camel/providers/local/camel-maildir-store.c: (scan_dirs): Leak fix.



Modified:
   trunk/camel/ChangeLog
   trunk/camel/camel-db.c
   trunk/camel/camel-folder-summary.c
   trunk/camel/camel-folder.c
   trunk/camel/camel-store.c
   trunk/camel/camel-vee-folder.c
   trunk/camel/camel.c
   trunk/camel/providers/imap/ChangeLog
   trunk/camel/providers/imap/camel-imap-store.c
   trunk/camel/providers/imap/camel-imap-summary.c
   trunk/camel/providers/local/ChangeLog
   trunk/camel/providers/local/camel-local-summary.c
   trunk/camel/providers/local/camel-maildir-store.c

Modified: trunk/camel/camel-db.c
==============================================================================
--- trunk/camel/camel-db.c	(original)
+++ trunk/camel/camel-db.c	Wed Jul 23 14:50:53 2008
@@ -42,7 +42,7 @@
 static int 
 cdb_sql_exec (sqlite3 *db, const char* stmt, CamelException *ex) 
 {
-	char *errmsg;
+	char *errmsg = NULL;
 	int   ret = -1;
 
 	d(g_print("Camel SQL Exec:\n%s\n", stmt));
@@ -50,16 +50,27 @@
 
 	ret = sqlite3_exec(db, stmt, 0, 0, &errmsg);
 	while (ret == SQLITE_BUSY || ret == SQLITE_LOCKED || ret == -1) {
-			ret = sqlite3_exec(db, stmt, 0, 0, &errmsg);
+		if (errmsg) {
+			sqlite3_free (errmsg);
+			errmsg = NULL;
+		}
+		ret = sqlite3_exec(db, stmt, 0, 0, &errmsg);
 	}
 
 	if (ret != SQLITE_OK) {
-			d(g_print ("Error in SQL EXEC statement: %s [%s].\n", stmt, errmsg));
-			if (ex)	
+		d(g_print ("Error in SQL EXEC statement: %s [%s].\n", stmt, errmsg));
+		if (ex)	
 			camel_exception_set (ex, CAMEL_EXCEPTION_SYSTEM, _(errmsg));
 		sqlite3_free (errmsg);
+		errmsg = NULL;
 		return -1;
 	}
+
+	if (errmsg) {
+		sqlite3_free (errmsg);
+		errmsg = NULL;
+	}
+
 	return 0;
 }
 
@@ -244,20 +255,32 @@
 camel_db_count_message_info (CamelDB *cdb, const char *query, guint32 *count, CamelException *ex)
 {
 	int ret = -1;
-	char *errmsg;
+	char *errmsg = NULL;
 
 	ret = sqlite3_exec(cdb->db, query, count_cb, count, &errmsg);
 	while (ret == SQLITE_BUSY || ret == SQLITE_LOCKED) {
+		if (errmsg) {
+			sqlite3_free (errmsg);
+			errmsg = NULL;
+		}
+
 		ret = sqlite3_exec (cdb->db, query, count_cb, count, &errmsg);
 	}
 
 	CAMEL_DB_RELEASE_SQLITE_MEMORY;
 		
 	if (ret != SQLITE_OK) {
-			g_print ("Error in SQL SELECT statement: %s [%s]\n", query, errmsg);
-			camel_exception_set (ex, CAMEL_EXCEPTION_SYSTEM, _(errmsg));
-			sqlite3_free (errmsg);
+		g_print ("Error in SQL SELECT statement: %s [%s]\n", query, errmsg);
+		camel_exception_set (ex, CAMEL_EXCEPTION_SYSTEM, _(errmsg));
+		sqlite3_free (errmsg);
+		errmsg = NULL;
+	}
+
+	if (errmsg) {
+		sqlite3_free (errmsg);
+		errmsg = NULL;
 	}
+
 	return ret;
 }
 
@@ -385,7 +408,7 @@
 int
 camel_db_select (CamelDB *cdb, const char* stmt, CamelDBSelectCB callback, gpointer data, CamelException *ex) 
 {
-  	char *errmsg;
+  	char *errmsg = NULL;
   	//int nrecs = 0;
 	int ret = -1;
 
@@ -396,6 +419,11 @@
 
 	ret = sqlite3_exec(cdb->db, stmt, callback, data, &errmsg);
 	while (ret == SQLITE_BUSY || ret == SQLITE_LOCKED) {
+		if (errmsg) {
+			sqlite3_free (errmsg);
+			errmsg = NULL;
+		}
+
 		ret = sqlite3_exec (cdb->db, stmt, callback, data, &errmsg);
 	}
 
@@ -405,8 +433,14 @@
     		d(g_warning ("Error in select statement '%s' [%s].\n", stmt, errmsg));
 		camel_exception_set (ex, CAMEL_EXCEPTION_SYSTEM, errmsg);
 		sqlite3_free (errmsg);
+		errmsg = NULL;
   	}
 
+	if (errmsg) {
+		sqlite3_free (errmsg);
+		errmsg = NULL;
+	}
+
 	return ret;
 }
 

Modified: trunk/camel/camel-folder-summary.c
==============================================================================
--- trunk/camel/camel-folder-summary.c	(original)
+++ trunk/camel/camel-folder-summary.c	Wed Jul 23 14:50:53 2008
@@ -510,11 +510,14 @@
 		info = g_hash_table_lookup (s->loaded_infos, uid);
 		
 		if (!info) {
+			char *errmsg = g_strdup_printf ("no uid [%s] exists", uid);
+
 			/* Makes no sense now as the exception is local as of now. FIXME: Pass exception from caller */
-			camel_exception_set (&ex, CAMEL_EXCEPTION_SYSTEM, _(g_strdup_printf ("no uid [%s] exists", uid)));
+			camel_exception_set (&ex, CAMEL_EXCEPTION_SYSTEM, _(errmsg));
 			// if (strcmp (folder_name, "UNMATCHED"))			
 			g_warning ("No uid[%s] exists in %s\n", uid, folder_name);
 			camel_exception_clear (&ex);
+			g_free (errmsg);
 		}
 	} else
 		info->refcount++;
@@ -1107,6 +1110,8 @@
 	}
 	
 	ret = camel_db_write_folder_info_record (cdb, record, &ex);
+
+	g_free (record->bdata);
 	g_free (record);
 
 	if (ret != 0) {
@@ -1251,6 +1256,7 @@
 	
 	camel_db_begin_transaction (cdb, ex);
 	ret = camel_db_write_folder_info_record (cdb, record, ex);
+	g_free (record->bdata);
 	g_free (record);
 
 	if (ret != 0) {
@@ -1428,8 +1434,7 @@
 	}
 
 	g_free (record->folder_name);
-	#warning "Crashes, take care"
-	//g_free (record->bdata); 
+	g_free (record->bdata);
 	g_free (record);
 
 	return ret;
@@ -2093,6 +2098,7 @@
 
 		CAMEL_SUMMARY_UNLOCK(s, summary_lock);
 
+		camel_exception_clear (&ex);
 	} else {
 		CAMEL_SUMMARY_UNLOCK(s, summary_lock);
 	}
@@ -2382,10 +2388,11 @@
 {
 	CamelFIRecord * record = g_new0 (CamelFIRecord, 1);
 	CamelDB *db;
+	char *table_name;
 
 	db = s->folder->cdb;
-	//char *table_name = safe_table (camel_file_util_safe_filename (s->folder->full_name));
-	char *table_name = s->folder->full_name;
+	//table_name = safe_table (camel_file_util_safe_filename (s->folder->full_name));
+	table_name = s->folder->full_name;
 
 	io(printf("Savining header to db\n"));
 

Modified: trunk/camel/camel-folder.c
==============================================================================
--- trunk/camel/camel-folder.c	(original)
+++ trunk/camel/camel-folder.c	Wed Jul 23 14:50:53 2008
@@ -265,8 +265,11 @@
 	store_db_path = g_build_filename (service->url->path, CAMEL_DB_FILE, NULL);
 	camel_exception_init(&ex);
 	if (strlen (store_db_path) < 2) {
+		char *store_path = camel_session_get_storage_path ((CamelSession *)camel_service_get_session (service), service, &ex);
+
 		g_free (store_db_path);
-		store_db_path = g_build_filename ( camel_session_get_storage_path ((CamelSession *)camel_service_get_session (service), service, &ex), CAMEL_DB_FILE, NULL);		
+		store_db_path = g_build_filename (store_path, CAMEL_DB_FILE, NULL);
+		g_free (store_path);
 	}
 
 

Modified: trunk/camel/camel-store.c
==============================================================================
--- trunk/camel/camel-store.c	(original)
+++ trunk/camel/camel-store.c	Wed Jul 23 14:50:53 2008
@@ -215,8 +215,11 @@
 	store_db_path = g_build_filename (service->url->path, CAMEL_DB_FILE, NULL);
 
 	if (strlen (store_db_path) < 2) {
+		char *store_path = camel_session_get_storage_path (session, service, ex);
+
 		g_free (store_db_path);
-		store_db_path = g_build_filename ( camel_session_get_storage_path (session, service, ex), CAMEL_DB_FILE, NULL);		
+		store_db_path = g_build_filename (store_path, CAMEL_DB_FILE, NULL);
+		g_free (store_path);
 	}
 
 	store->cdb = camel_db_open (store_db_path, ex);

Modified: trunk/camel/camel-vee-folder.c
==============================================================================
--- trunk/camel/camel-vee-folder.c	(original)
+++ trunk/camel/camel-vee-folder.c	Wed Jul 23 14:50:53 2008
@@ -471,10 +471,10 @@
 {
 	CamelFIRecord * record = g_new0 (CamelFIRecord, 1);
 	CamelDB *db;
+	char *table_name;
 
 	db = s->folder->parent_store->cdb;
-	char *table_name = s->folder->full_name;
-
+	table_name = s->folder->full_name;
 
 	record->folder_name = table_name;
 

Modified: trunk/camel/camel.c
==============================================================================
--- trunk/camel/camel.c	(original)
+++ trunk/camel/camel.c	Wed Jul 23 14:50:53 2008
@@ -105,6 +105,7 @@
 		if (NSS_InitReadWrite (nss_configdir) == SECFailure) {
 			/* fall back on using volatile dbs? */
 			if (NSS_NoDB_Init (nss_configdir) == SECFailure) {
+				g_free (nss_configdir);
 				g_warning ("Failed to initialize NSS");
 				return -1;
 			}
@@ -121,6 +122,8 @@
 		SSL_OptionSetDefault (SSL_ENABLE_SSL3, PR_TRUE);
 		SSL_OptionSetDefault (SSL_ENABLE_TLS, PR_TRUE);
 		SSL_OptionSetDefault (SSL_V2_COMPATIBLE_HELLO, PR_TRUE /* maybe? */);
+
+		g_free (nss_configdir);
 	}
 #endif /* HAVE_NSS */
 	

Modified: trunk/camel/providers/imap/camel-imap-store.c
==============================================================================
--- trunk/camel/providers/imap/camel-imap-store.c	(original)
+++ trunk/camel/providers/imap/camel-imap-store.c	Wed Jul 23 14:50:53 2008
@@ -210,6 +210,9 @@
 		disco->diary = NULL;
 	}
 
+	g_free (imap_store->namespace);
+	imap_store->namespace = NULL;
+
 	g_free (imap_store->custom_headers);
 }
 

Modified: trunk/camel/providers/imap/camel-imap-summary.c
==============================================================================
--- trunk/camel/providers/imap/camel-imap-summary.c	(original)
+++ trunk/camel/providers/imap/camel-imap-summary.c	Wed Jul 23 14:50:53 2008
@@ -272,9 +272,11 @@
 
 	info = camel_imap_summary_parent->message_info_from_db (s, mir);
 	if (info) {
-		char *part = g_strdup (mir->bdata);
+		char *part = g_strdup (mir->bdata), *tmp;
+		tmp = part;
 		iinfo = (CamelImapMessageInfo *)info;
 		EXTRACT_FIRST_DIGIT (iinfo->server_flags)
+		g_free (tmp);
 	}
 
 	return info;

Modified: trunk/camel/providers/local/camel-local-summary.c
==============================================================================
--- trunk/camel/providers/local/camel-local-summary.c	(original)
+++ trunk/camel/providers/local/camel-local-summary.c	Wed Jul 23 14:50:53 2008
@@ -597,7 +597,7 @@
 summary_header_from_db (CamelFolderSummary *s, CamelFIRecord *fir)
 {
 	CamelLocalSummary *cls = (CamelLocalSummary *)s;
-	char *part;
+	char *part, *tmp;
 
 	/* We dont actually add our own headers, but version that we don't anyway */
 
@@ -608,7 +608,11 @@
 	if (part) {
 		EXTRACT_FIRST_DIGIT (cls->version)
 	}
-	fir->bdata = part;
+
+	/* keep only the rest of the bdata there (strip our version digit) */
+	tmp = g_strdup (part);
+	g_free (fir->bdata);
+	fir->bdata = tmp;
 
 	return 0;
 }

Modified: trunk/camel/providers/local/camel-maildir-store.c
==============================================================================
--- trunk/camel/providers/local/camel-maildir-store.c	(original)
+++ trunk/camel/providers/local/camel-maildir-store.c	Wed Jul 23 14:50:53 2008
@@ -488,6 +488,7 @@
 			g_free(tmp);
 		}
 		closedir(dir);
+		g_free (name);
 	}
 
 	res = 0;



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