[brasero] Fix a potential crash when a node is loaded but removed by the user because it is too big, ...



commit 99cbd8833324fbf9879d88e8272060b536851f39
Author: Philippe Rouquier <bonfire-app wanadoo fr>
Date:   Mon Jul 27 14:08:52 2009 +0200

    Fix a potential crash when a node is loaded but removed by the user because it is too big, ...

 libbrasero-burn/brasero-data-project.c |   10 ++++++----
 libbrasero-burn/brasero-data-project.h |    2 +-
 libbrasero-burn/brasero-data-vfs.c     |   12 ++++++++----
 3 files changed, 15 insertions(+), 9 deletions(-)
---
diff --git a/libbrasero-burn/brasero-data-project.c b/libbrasero-burn/brasero-data-project.c
index 57e8242..ebf7dd7 100644
--- a/libbrasero-burn/brasero-data-project.c
+++ b/libbrasero-burn/brasero-data-project.c
@@ -1988,7 +1988,7 @@ brasero_data_project_update_uri (BraseroDataProject *self,
 	brasero_data_project_graft_is_needed (self, former_uri_node);
 }
 
-void
+gboolean
 brasero_data_project_node_loaded (BraseroDataProject *self,
 				  BraseroFileNode *node,
 				  const gchar *uri,
@@ -2009,7 +2009,7 @@ brasero_data_project_node_loaded (BraseroDataProject *self,
 			/* exclude the URI we're replacing */
 			brasero_data_project_exclude_uri (self, uri);
 			brasero_data_project_convert_to_fake (self, node);
-			return;
+			return TRUE;
 		}
 
 		priv->loading --;
@@ -2052,7 +2052,7 @@ brasero_data_project_node_loaded (BraseroDataProject *self,
 		&&  BRASERO_FILE_NODE_SECTORS (node) < BRASERO_FILE_2G_LIMIT) {
 			if (brasero_data_project_file_signal (self, G2_FILE_SIGNAL, g_file_info_get_name (info))) {
 				brasero_data_project_remove_node (self, node);
-				return;
+				return FALSE;
 			}
 		}
 	}
@@ -2060,7 +2060,7 @@ brasero_data_project_node_loaded (BraseroDataProject *self,
 	/* avoid signalling twice for the same directory */
 	if (!brasero_data_project_is_deep (self, node->parent,  BRASERO_FILE_NODE_NAME (node), node->is_file)) {
 		brasero_data_project_remove_node (self, node);
-		return;
+		return FALSE;
 	}
 
 	size_changed = (BRASERO_BYTES_TO_SECTORS (size, 2048) != BRASERO_FILE_NODE_SECTORS (node));
@@ -2110,6 +2110,8 @@ brasero_data_project_node_loaded (BraseroDataProject *self,
 		g_signal_emit (self,
 			       brasero_data_project_signals [SIZE_CHANGED_SIGNAL],
 			       0);
+
+	return TRUE;
 }
 
 void
diff --git a/libbrasero-burn/brasero-data-project.h b/libbrasero-burn/brasero-data-project.h
index 384466a..1137917 100644
--- a/libbrasero-burn/brasero-data-project.h
+++ b/libbrasero-burn/brasero-data-project.h
@@ -189,7 +189,7 @@ void
 brasero_data_project_destroy_node (BraseroDataProject *self,
 				   BraseroFileNode *node);
 
-void
+gboolean
 brasero_data_project_node_loaded (BraseroDataProject *project,
 				  BraseroFileNode *node,
 				  const gchar *uri,
diff --git a/libbrasero-burn/brasero-data-vfs.c b/libbrasero-burn/brasero-data-vfs.c
index fae3caf..f2c58f1 100644
--- a/libbrasero-burn/brasero-data-vfs.c
+++ b/libbrasero-burn/brasero-data-vfs.c
@@ -639,6 +639,7 @@ brasero_data_vfs_loading_node_result (GObject *owner,
 	 * hidden files. */
 	for (iter = nodes; iter; iter = iter->next) {
 		guint reference;
+		gboolean added;
 		BraseroFileNode *node;
 
 		reference = GPOINTER_TO_INT (iter->data);
@@ -679,10 +680,13 @@ brasero_data_vfs_loading_node_result (GObject *owner,
 		}
 
 		/* update node */
-		brasero_data_project_node_loaded (BRASERO_DATA_PROJECT (self),
-						  node,
-						  uri,
-						  info);
+		added = brasero_data_project_node_loaded (BRASERO_DATA_PROJECT (self),
+		                                          node,
+		                                          uri,
+		                                          info);
+
+		if (!added)
+			continue;
 
 		/* See what type of file it is. If that's a directory then 
 		 * explore it right away */



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