Author: post
Date: 2010-04-01 20:00:26 +0200 (Thu, 01 Apr 2010)
New Revision: 3294

Modified:
   trunk/src/rs-library.c
Log:
Check strings returned when searching tags. Fix various strings not getting 
freed.

Modified: trunk/src/rs-library.c
===================================================================
--- trunk/src/rs-library.c      2010-04-01 15:35:15 UTC (rev 3293)
+++ trunk/src/rs-library.c      2010-04-01 18:00:26 UTC (rev 3294)
@@ -460,7 +460,7 @@
 
        rs_io_idle_read_checksum(filename, -1, got_checksum, 
GINT_TO_POINTER(id));
 
-       library_backup_tags(library, g_path_get_dirname(filename));
+       library_backup_tags(library, filename);
 
        return id;
 }
@@ -626,7 +626,7 @@
        if (!library_is_photo_tagged(library, photo_id, tag_id))
                library_photo_add_tag(library, photo_id, tag_id, autotag);
 
-       library_backup_tags(library, g_path_get_dirname(filename));
+       library_backup_tags(library, filename);
 
        return;
 }
@@ -647,7 +647,7 @@
 
        library_photo_delete_tags(library, photo_id);
        library_delete_photo(library, photo_id);
-       library_backup_tags(library, g_path_get_dirname(photo));
+       library_backup_tags(library, photo);
 }
 
 gboolean
@@ -1017,31 +1017,44 @@
                gboolean found = FALSE;
                GtkTreeModel *model;
                const gchar *needle;
-               gchar *needle_normalized;
-               gchar *needle_case_normalized;
-               gchar *tag;
-               gchar *tag_normalized;
-               gchar *tag_case_normalized;
+               gchar *needle_normalized = NULL;
+               gchar *needle_case_normalized = NULL;
+               gchar *tag = NULL;
+               gchar *tag_normalized = NULL;
+               gchar *tag_case_normalized = NULL;
 
                /* Look for last tag if found */
-               needle = strrchr(key, ' ');
+               needle = g_utf8_strrchr(key, ' ',-1);
                if (needle)
                        needle += 1;
                else
                        needle = key;
 
                needle_normalized = g_utf8_normalize(needle, -1, 
G_NORMALIZE_ALL);
-               needle_case_normalized = g_utf8_casefold(needle_normalized, -1);
+               if (needle_normalized)
+               {
+                       needle_case_normalized = 
g_utf8_casefold(needle_normalized, -1);
 
-               model = gtk_entry_completion_get_model (completion);
-               gtk_tree_model_get (model, iter, 0, &tag, -1);
-               tag_normalized = g_utf8_normalize(tag, -1, G_NORMALIZE_ALL);
-               tag_case_normalized = g_utf8_casefold(tag_normalized, -1);
+                       model = gtk_entry_completion_get_model (completion);
+                       gtk_tree_model_get (model, iter, 0, &tag, -1);
+                       if (tag)
+                       {
+                               tag_normalized = g_utf8_normalize(tag, -1, 
G_NORMALIZE_ALL);
+                               if (tag_normalized)
+                               {
+                                       tag_case_normalized = 
g_utf8_casefold(tag_normalized, -1);
 
-               if (g_str_has_prefix(tag_case_normalized, 
needle_case_normalized))
-                       found = TRUE;
+                                       if 
(g_str_has_prefix(tag_case_normalized, needle_case_normalized))
+                                               found = TRUE;
+                               }
+                       }
 
+               }
+               g_free(needle_normalized);
+               g_free(needle_case_normalized);
+               g_free(tag);
                g_free(tag_normalized);
+               g_free(tag_case_normalized);
 
                return found;
        }
@@ -1092,20 +1105,20 @@
 
        gint photo_id = library_add_photo(library, photo);
        library_photo_default_tags(library, photo_id, metadata);
-       library_backup_tags(library, g_path_get_dirname(photo));
+       library_backup_tags(library, photo);
 }
 
 static void 
-library_backup_tags(RSLibrary *library, const gchar *directory)
+library_backup_tags(RSLibrary *library, const gchar *photo_filename)
 {
        sqlite3 *db = library->db;
        sqlite3_stmt *stmt;
        gint rc;
        gchar *filename = NULL, *checksum, *tag, *t_filename;
        gint autotag;
+       gchar *directory = g_path_get_dirname(photo_filename);
+       gchar *dotdir = rs_dotdir_get(photo_filename);
 
-       gchar *dotdir = rs_dotdir_get(directory);
-
        if (!dotdir)
                return;
        GString *gs = g_string_new(dotdir);
@@ -1118,7 +1131,12 @@
 
        writer = xmlNewTextWriterFilename(xmlfile, 0);
        if (!writer)
+       {
+               g_free(directory);
+               g_free(dotdir);
+               g_free(xmlfile);
                return;
+       }
 
        xmlTextWriterSetIndent(writer, 1);
        xmlTextWriterStartDocument(writer, NULL, "ISO-8859-1", NULL);
@@ -1156,6 +1174,9 @@
 
        xmlTextWriterEndDocument(writer);
        xmlFreeTextWriter(writer);
+       g_free(directory);
+       g_free(dotdir);
+       g_free(xmlfile);
        return;
 }
 
@@ -1172,8 +1193,13 @@
        g_string_append(gs, TAGS_XML_FILE);
        gchar *xmlfile = gs->str;
        g_string_free(gs, FALSE);
+
        if (!g_file_test(xmlfile, G_FILE_TEST_EXISTS))
-           return;
+       {
+               g_free(dotdir);
+               g_free(xmlfile);
+               return;
+       }
 
        xmlDocPtr doc;
        xmlNodePtr cur, cur2;
@@ -1241,6 +1267,8 @@
                cur = cur->next;
        }
 
+       g_free(dotdir);
+       g_free(xmlfile);
        xmlFreeDoc(doc);
        return;
 }


_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit

Reply via email to