[tracker/miner-crash] miner-fs: Fix crash on invalid data received from GetMetadataFast



commit 6fe85f0343343ef8a35dcd8387a707c9318845f5
Author: Jürg Billeter <j bitron ch>
Date:   Thu Jan 27 17:15:54 2011 +0100

    miner-fs: Fix crash on invalid data received from GetMetadataFast

 src/miners/fs/tracker-miner-files.c |   28 +++++++++++++++++++++-------
 1 files changed, 21 insertions(+), 7 deletions(-)
---
diff --git a/src/miners/fs/tracker-miner-files.c b/src/miners/fs/tracker-miner-files.c
index cf1854e..1acbb1a 100644
--- a/src/miners/fs/tracker-miner-files.c
+++ b/src/miners/fs/tracker-miner-files.c
@@ -2130,23 +2130,37 @@ get_metadata_fast_cb (void     *buffer,
 {
 	FastAsyncData *data;
 	ProcessFileData *process_data;
-	const gchar *preupdate;
+	gboolean free_error = FALSE;
+	const gchar *preupdate = NULL;
 	const gchar *sparql = NULL;
 
 	data = user_data;
 	process_data = data->user_data;
 
-	preupdate = buffer;
+	if (!error && buffer_size) {
+		gsize preupdate_length;
+
+		preupdate = buffer;
+		preupdate_length = strnlen (preupdate, buffer_size);
+		if (preupdate_length < buffer_size && preupdate[buffer_size - 1] == '\0') {
+			/* sparql is stored just after preupdate in the original buffer */
+			sparql = preupdate + preupdate_length + 1;
+		} else {
+			error = g_error_new_literal (miner_files_error_quark,
+				                     0,
+				                     "Invalid data received from GetMetadataFast");
+			free_error = TRUE;
+		}
+	}
+
 	if (G_UNLIKELY (error)) {
 		if (error->code != G_IO_ERROR_CANCELLED) {
 			(* data->callback) (NULL, NULL, error, process_data);
 		}
-	} else {
-		if (buffer_size) {
-			/* sparql is stored just after preupdate in the original buffer */
-			sparql = preupdate + strlen (preupdate) + 1;
+		if (free_error) {
+			g_error_free (error);
 		}
-
+	} else {
 		(* data->callback) (preupdate, sparql, NULL, data->user_data);
 	}
 



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