[tracker/tracker-0.6] Fix NULL crasher in trackerd with strcasecmp



commit 9e8d45883af6aff1ec77f1de9ede5bc8c7ecf3a9
Author: Martyn Russell <martyn imendio com>
Date:   Fri Jun 19 11:51:02 2009 +0100

    Fix NULL crasher in trackerd with strcasecmp
    
    This is down to not checking variables in libtracker-data before we
    start using them and by passing dodgy variables to tracker-metadata in
    the daemon. Now we have a check in the daemon AND variable checks in
    libtracker-data too.
    
    Also, I made the ASC and A comparison in the daemon case insensitive.

 src/libtracker-data/tracker-data-search.c |   13 ++++++++++++-
 1 files changed, 12 insertions(+), 1 deletions(-)
---
diff --git a/src/libtracker-data/tracker-data-search.c b/src/libtracker-data/tracker-data-search.c
index 0098708..29f157a 100644
--- a/src/libtracker-data/tracker-data-search.c
+++ b/src/libtracker-data/tracker-data-search.c
@@ -658,6 +658,11 @@ tracker_metadata_add_metadata_field (TrackerDBInterface *iface,
 	gboolean	  field_exists;
 	GSList		 *l;
 
+	g_return_val_if_fail (iface != NULL, NULL);
+	g_return_val_if_fail (service != NULL, NULL);
+	g_return_val_if_fail (fields != NULL, NULL);
+	g_return_val_if_fail (field_name != NULL, NULL);
+	
 	field_exists = FALSE;
 	field_data = NULL;
 
@@ -1300,10 +1305,16 @@ tracker_data_search_get_unique_values_with_aggregates (const gchar	      *servic
 
 		s = g_strsplit (fields[i], " ", 2);
 
+		if (!s || g_strv_length (s) < 1) {
+			g_strfreev (s);
+			continue;
+		}
+
 		fd = tracker_metadata_add_metadata_field (iface, service_type, &field_list, s[0], TRUE, FALSE, TRUE);
 
 		if (s[1]) {
-			if ((strcmp (s[1], "ASC") == 0) || (strcmp (s[1], "A")==0)) {
+			if (strcasecmp (s[1], "ASC") == 0 || 
+			    strcasecmp (s[1], "A") == 0) {
 				desc = FALSE;
 			} else {
 				desc = TRUE;



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