[tracker/sam/error-no-ontology: 2/2] libtracker-sparql: Raise an error if no ontology is passed
- From: Sam Thursfield <sthursfield src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/sam/error-no-ontology: 2/2] libtracker-sparql: Raise an error if no ontology is passed
- Date: Tue, 28 Apr 2020 23:58:13 +0000 (UTC)
commit 450ebceabb408b1090a2c8a7b5d6a43995aea831
Author: Sam Thursfield <sam afuera me uk>
Date: Wed Apr 29 01:56:56 2020 +0200
libtracker-sparql: Raise an error if no ontology is passed
Since a0efd1972b122d0a2 it was possible to crash by passing a NULL
ontology path to tracker_sparql_connection_new(). Now we raise an
error instead.
src/libtracker-data/tracker-data-manager.c | 9 +++++++++
src/libtracker-direct/tracker-direct.c | 5 +++++
src/libtracker-sparql/tracker-connection.h | 3 ++-
tests/libtracker-sparql/tracker-sparql-test.c | 18 ++++++++++++++++++
4 files changed, 34 insertions(+), 1 deletion(-)
---
diff --git a/src/libtracker-data/tracker-data-manager.c b/src/libtracker-data/tracker-data-manager.c
index 25a3e65a3..a21251b4b 100644
--- a/src/libtracker-data/tracker-data-manager.c
+++ b/src/libtracker-data/tracker-data-manager.c
@@ -4109,6 +4109,15 @@ tracker_data_manager_initable_init (GInitable *initable,
TrackerOntology **ontologies;
guint n_ontologies, i;
+ if (!manager->ontology_location) {
+ g_set_error (error,
+ TRACKER_DATA_ONTOLOGY_ERROR,
+ TRACKER_DATA_ONTOLOGY_NOT_FOUND,
+ "You must pass an ontology location. "
+ "Use tracker_sparql_get_ontology_nepomuk() to find the default
ontologies.");
+ return FALSE;
+ }
+
g_info ("Applying ontologies from %s", g_file_peek_path (manager->ontology_location));
sorted = get_ontologies (manager, manager->ontology_location, &internal_error);
diff --git a/src/libtracker-direct/tracker-direct.c b/src/libtracker-direct/tracker-direct.c
index 53d6f01fb..8fd27abb2 100644
--- a/src/libtracker-direct/tracker-direct.c
+++ b/src/libtracker-direct/tracker-direct.c
@@ -243,6 +243,11 @@ translate_error (GError *error)
if (error->domain == TRACKER_DATA_ONTOLOGY_ERROR) {
/* This is an internal error domain, so translate to a libtracker-sparql error code. */
switch (error->code) {
+ case TRACKER_DATA_ONTOLOGY_NOT_FOUND:
+ new_error = g_error_new_literal (TRACKER_SPARQL_ERROR,
+ TRACKER_SPARQL_ERROR_ONTOLOGY_NOT_FOUND,
+ error->message);
+ break;
case TRACKER_DATA_UNSUPPORTED_LOCATION:
case TRACKER_DATA_UNSUPPORTED_ONTOLOGY_CHANGE:
new_error = g_error_new_literal (TRACKER_SPARQL_ERROR,
diff --git a/src/libtracker-sparql/tracker-connection.h b/src/libtracker-sparql/tracker-connection.h
index f35d22acb..9d14b1697 100644
--- a/src/libtracker-sparql/tracker-connection.h
+++ b/src/libtracker-sparql/tracker-connection.h
@@ -93,7 +93,8 @@ typedef enum {
TRACKER_SPARQL_ERROR_NO_SPACE,
TRACKER_SPARQL_ERROR_INTERNAL,
TRACKER_SPARQL_ERROR_UNSUPPORTED,
- TRACKER_SPARQL_ERROR_UNKNOWN_GRAPH
+ TRACKER_SPARQL_ERROR_UNKNOWN_GRAPH,
+ TRACKER_SPARQL_ERROR_ONTOLOGY_NOT_FOUND,
} TrackerSparqlError;
#define TRACKER_SPARQL_ERROR tracker_sparql_error_quark ()
diff --git a/tests/libtracker-sparql/tracker-sparql-test.c b/tests/libtracker-sparql/tracker-sparql-test.c
index f2211ee88..43cb1572b 100644
--- a/tests/libtracker-sparql/tracker-sparql-test.c
+++ b/tests/libtracker-sparql/tracker-sparql-test.c
@@ -220,6 +220,22 @@ test_tracker_sparql_cursor_next_async (void)
g_main_loop_run (main_loop);
}
+/* Test that we return an error if no ontology is passed. */
+static void
+test_tracker_sparql_connection_no_ontology (void)
+{
+ GError *error = NULL;
+
+ TrackerSparqlConnection *connection;
+
+ connection = tracker_sparql_connection_new (0, NULL, NULL, NULL, &error);
+
+ g_assert_null (connection);
+ g_assert_error (error, TRACKER_SPARQL_ERROR, TRACKER_SPARQL_ERROR_ONTOLOGY_NOT_FOUND);
+
+ g_error_free (error);
+}
+
static void
test_tracker_sparql_connection_interleaved (void)
{
@@ -279,6 +295,8 @@ main (gint argc, gchar **argv)
test_tracker_sparql_escape_string);
g_test_add_func ("/libtracker-sparql/tracker-sparql/tracker_sparql_escape_uri_vprintf",
test_tracker_sparql_escape_uri_vprintf);
+ g_test_add_func ("/libtracker-sparql/tracker-sparql/tracker_sparql_connection_no_ontology",
+ test_tracker_sparql_connection_no_ontology);
g_test_add_func ("/libtracker-sparql/tracker-sparql/tracker_sparql_connection_interleaved",
test_tracker_sparql_connection_interleaved);
g_test_add_func ("/libtracker-sparql/tracker-sparql/tracker_sparql_cursor_next_async",
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]