[evolution-patches] File descriptor leak patch for Evolution



Hi,

The patch below will fix the very few file descriptor leaks that I've
found in Evolution. I've reviewed the source for leaks from open() and
opendir(). Only a few was found.

May I commit?

Best regards and thanks,
  jules



Index: shell/ChangeLog
===================================================================
--- shell/ChangeLog	(revision 33593)
+++ shell/ChangeLog	(working copy)
@@ -1,3 +1,7 @@
+2007-05-28  Jules Colding  <colding omesc com>
+
+	* main.c (main): Prevent dup2() and close() on -1
+
 2007-05-13  Matthew Barnes  <mbarnes redhat com>
 
 	* e-shell.c (impl_Shell_handleURI):
Index: shell/main.c
===================================================================
--- shell/main.c	(revision 33593)
+++ shell/main.c	(working copy)
@@ -541,7 +541,7 @@
 		int fd;
 
 		fd = g_open (evolution_debug_log, O_WRONLY | O_CREAT | O_TRUNC, 0600);
-		if (fd) {
+		if (fd != -1) {
 			dup2 (fd, STDOUT_FILENO);
 			dup2 (fd, STDERR_FILENO);
 			close (fd);
Index: mail/ChangeLog
===================================================================
--- mail/ChangeLog	(revision 33593)
+++ mail/ChangeLog	(working copy)
@@ -1,3 +1,17 @@
+2007-05-28  Jules Colding  <colding omesc com>
+
+	* em-utils.c (em_utils_selection_set_urilist): Fix file leak
+	(em_utils_selection_get_urilist): Fix file leak
+
+	* importers/evolution-outlook-importer.c (import_outlook_import): Fix file leak
+
+2007-05-25  Jules Colding  <colding omesc com>
+
+	* importers/mail-importer.c (import_mbox_import): Impossible code branch commented
+
+	* importers/netscape-importer.c (netscape_import_filters): Fix file leak
+	(netscape_init_prefs): Fix file leak
+
 2007-05-25  Matthew Barnes  <mbarnes redhat com>
 
 	* mail-send-recv.c:
Index: mail/em-utils.c
===================================================================
--- mail/em-utils.c	(revision 33593)
+++ mail/em-utils.c	(working copy)
@@ -1115,7 +1115,9 @@
 		}
 
 		camel_object_unref(fstream);
-	}
+	} else
+		close(fd);
+
 	g_free(uri);
 }
 
@@ -1154,8 +1156,11 @@
 		if (strcmp(url->protocol, "file") == 0
 		    && (fd = g_open(url->path, O_RDONLY | O_BINARY, 0)) != -1) {
 			stream = camel_stream_fs_new_with_fd(fd);
-			res = em_utils_read_messages_from_stream(folder, stream);
-			camel_object_unref(stream);
+			if (stream) {
+				res = em_utils_read_messages_from_stream(folder, stream);
+				camel_object_unref(stream);
+			} else
+				close(fd);
 		}
 		camel_url_free(url);
 	}
Index: mail/importers/mail-importer.c
===================================================================
--- mail/importers/mail-importer.c	(revision 33593)
+++ mail/importers/mail-importer.c	(working copy)
@@ -223,7 +223,7 @@
 
 		mp = camel_mime_parser_new();
 		camel_mime_parser_scan_from(mp, TRUE);
-		if (camel_mime_parser_init_with_fd(mp, fd) == -1) {
+		if (camel_mime_parser_init_with_fd(mp, fd) == -1) { /* will never happen - 0 is unconditionally returned */
 			goto fail2;
 		}
 
Index: mail/importers/netscape-importer.c
===================================================================
--- mail/importers/netscape-importer.c	(revision 33593)
+++ mail/importers/netscape-importer.c	(working copy)
@@ -1238,7 +1238,7 @@
  exit:
 	g_free(user);
 	g_object_unref((fc));
-
+	fclose (mailrule_handle);
 }
 
 /* Email folder & accounts stuff ----------------------------------------------- */
@@ -1444,6 +1444,7 @@
 		g_hash_table_insert (user_prefs, key, value);
 	}
 
+	fclose (prefs_handle);
 	return;
 }
 
Index: mail/importers/evolution-outlook-importer.c
===================================================================
--- mail/importers/evolution-outlook-importer.c	(revision 33593)
+++ mail/importers/evolution-outlook-importer.c	(working copy)
@@ -316,6 +316,7 @@
 	struct _import_outlook_msg *m = (struct _import_outlook_msg *) mm;
 	struct stat st;
 	CamelFolder *folder;
+	int fd = -1;
 
 	if (stat(m->path, &st) == -1) {
 		g_warning("cannot find source file to import '%s': %s", m->path, g_strerror(errno));
@@ -334,7 +335,6 @@
 		CamelOperation *oldcancel = NULL;
 		CamelMessageInfo *info;
 		GByteArray *buffer;
-		int fd;
 		off_t pos;
 
 		fd = g_open(m->path, O_RDONLY|O_BINARY, 0);
@@ -413,6 +413,8 @@
 		g_byte_array_free(buffer, TRUE);
 	}
 fail:
+	if (fd != -1)
+		close(fd);
 	camel_object_unref(folder);
 }
 





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