From b599623892a39f33c24bb43e2e6e0d14dd916e71 Mon Sep 17 00:00:00 2001 From: Seif Lotfy Date: Sat, 21 Apr 2012 01:35:56 +0200 Subject: FTS Extension: fix zeitgeist-fts crash with SIGSEGV in fast_validate() --- extensions/fts++/indexer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'extensions') diff --git a/extensions/fts++/indexer.cpp b/extensions/fts++/indexer.cpp index af96eac7..72a5c731 100644 --- a/extensions/fts++/indexer.cpp +++ b/extensions/fts++/indexer.cpp @@ -561,7 +561,7 @@ bool Indexer::IndexUri (std::string const& uri, std::string const& origin) size_t question_mark = uri.find ('?'); if (question_mark != std::string::npos) { - std::string stripped (uri, 0, question_mark - 1); + std::string stripped (uri, 0, question_mark); basename = g_path_get_basename (stripped.c_str ()); } else -- cgit v1.2.1 From d06a9815df5a3677a65861c4b65dd034d773ae5c Mon Sep 17 00:00:00 2001 From: Siegfried-Angel Gevatter Pujals Date: Sat, 21 Apr 2012 14:20:02 +0200 Subject: Fix double string unescaping (LP: #954171) Patch by Michal Hruby. --- extensions/fts++/indexer.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'extensions') diff --git a/extensions/fts++/indexer.cpp b/extensions/fts++/indexer.cpp index 72a5c731..483caf7f 100644 --- a/extensions/fts++/indexer.cpp +++ b/extensions/fts++/indexer.cpp @@ -566,7 +566,8 @@ bool Indexer::IndexUri (std::string const& uri, std::string const& origin) } else { - basename = g_file_get_basename (f); + // g_file_get_basename would unescape the uri, we don't want that here + basename = g_path_get_basename (uri.c_str ()); } // step 2) unescape and check that it's valid utf8 -- cgit v1.2.1 From f59b520d37474550f9d210cb4d9109750c302cac Mon Sep 17 00:00:00 2001 From: Siegfried-Angel Gevatter Pujals Date: Sat, 21 Apr 2012 14:42:01 +0200 Subject: FTS++: Add test case for double string escaping --- extensions/fts++/test/test-indexer.cpp | 41 ++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'extensions') diff --git a/extensions/fts++/test/test-indexer.cpp b/extensions/fts++/test/test-indexer.cpp index 62ca4118..8330a5ea 100644 --- a/extensions/fts++/test/test-indexer.cpp +++ b/extensions/fts++/test/test-indexer.cpp @@ -88,6 +88,21 @@ assert_nth_result_has_text (GPtrArray* results, int n, const char *text) g_assert_cmpstr (zeitgeist_subject_get_text (subject), ==, text); } +// This function only supports events with a single subject, +// since that's enough for the tests in this file. +static void +assert_nth_result_has_uri (GPtrArray* results, int n, const char *text) +{ + g_assert_cmpuint (n, <, results->len); + ZeitgeistEvent *event = (ZeitgeistEvent*) results->pdata[n]; + g_assert (event); + g_assert_cmpint (zeitgeist_event_num_subjects (event), ==, 1); + ZeitgeistSubject *subject = (ZeitgeistSubject*) + g_ptr_array_index (zeitgeist_event_get_subjects (event), 0); + g_assert (subject); + g_assert_cmpstr (zeitgeist_subject_get_uri (subject), ==, text); +} + static ZeitgeistEvent* create_test_event1 (void) { ZeitgeistEvent *event = zeitgeist_event_new (); @@ -608,6 +623,30 @@ test_simple_underscores (Fixture *fix, gconstpointer data) assert_nth_result_has_id (results, 0, event_id); } +static void +test_simple_escaped_string (Fixture *fix, gconstpointer data) // (LP: #594171) +{ + guint matches; + guint event_id; + ZeitgeistEvent* event; + GPtrArray* results; + + // add test events to DBs + const char uri[] = "http://encodings.com/percentage-%25-is-fun"; + const char text[] = "%25 is the encoding for a percentage"; + event_id = index_event (fix, create_test_event_simple (uri, text)); + + // Search for MostPopularSubjects + results = search_simple (fix, "percentage", NULL, + ZEITGEIST_RESULT_TYPE_MOST_POPULAR_SUBJECTS, &matches); + + g_assert_cmpuint (matches, >, 0); + g_assert_cmpuint (results->len, ==, 1); + assert_nth_result_has_id (results, 0, event_id); + assert_nth_result_has_uri (results, 0, uri); + assert_nth_result_has_text (results, 0, text); +} + static void test_simple_camelcase (Fixture *fix, gconstpointer data) { @@ -1147,6 +1186,8 @@ void test_indexer_create_suite (void) setup, test_simple_noexpand_valid, teardown); g_test_add ("/Zeitgeist/FTS/Indexer/Simple/Underscores", Fixture, 0, setup, test_simple_underscores, teardown); + g_test_add ("/Zeitgeist/FTS/Indexer/Simple/EscapedString", Fixture, 0, + setup, test_simple_escaped_string, teardown); g_test_add ("/Zeitgeist/FTS/Indexer/Simple/Camelcase", Fixture, 0, setup, test_simple_camelcase, teardown); g_test_add ("/Zeitgeist/FTS/Indexer/Simple/PrefixWithDashes", Fixture, 0, -- cgit v1.2.1 From b54c086b192388bdec1ac0b532c6247fb861b78c Mon Sep 17 00:00:00 2001 From: Siegfried-Angel Gevatter Pujals Date: Tue, 24 Apr 2012 20:59:12 +0200 Subject: FTS++: Make sure Xapian is closed before releasing the bus name --- extensions/fts++/zeitgeist-fts.vala | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'extensions') diff --git a/extensions/fts++/zeitgeist-fts.vala b/extensions/fts++/zeitgeist-fts.vala index 7800a828..29ea1f4d 100644 --- a/extensions/fts++/zeitgeist-fts.vala +++ b/extensions/fts++/zeitgeist-fts.vala @@ -69,10 +69,10 @@ namespace Zeitgeist indexer = new Indexer (engine); } - private void do_quit () + private void close () { engine.close (); - mainloop.quit (); + indexer = null; // close the index } public void register_dbus_object (DBusConnection conn) throws IOError @@ -231,6 +231,10 @@ namespace Zeitgeist if (instance != null) { + // Close any database connections + instance.close (); + + // Release the bus name Bus.unown_name (owner_id); instance.unregister_dbus_object (); instance = null; @@ -249,7 +253,7 @@ namespace Zeitgeist static void safe_exit () { - instance.do_quit (); + mainloop.quit (); } static int main (string[] args) -- cgit v1.2.1