summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2016-10-08 14:59:38 +0200
committerCarlos Garnacho <carlosg@gnome.org>2016-10-09 11:41:26 +0200
commit22bbc9b339edca0386b7cb85ac4e5d48f2e97a1d (patch)
treee4cc35ed6a39c5a925f72806d36df86a65c0a7d5
parent6446a48ac7d7a7cb524d0bb2f171cb2e11a206ad (diff)
downloadtracker-22bbc9b339edca0386b7cb85ac4e5d48f2e97a1d.tar.gz
libtracker-data: Be more lenient towards NULLs in fn:uri-is-descendant
And actually check all arguments, not just first/last. The check is meant to catch non-string types (eg. ints, doubles) being wrongly passed here, NULLs are more arguably acceptable strings, even if it's to fast path to returning FALSE. This fixes the "Invalid child(0)" errors some users see in gnome-music, sometimes the query planner would call the function with a NULL argument even though the query would return no results.
-rw-r--r--src/libtracker-data/tracker-db-interface-sqlite.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/src/libtracker-data/tracker-db-interface-sqlite.c b/src/libtracker-data/tracker-db-interface-sqlite.c
index 6fdc3bbce..ff292eb3c 100644
--- a/src/libtracker-data/tracker-db-interface-sqlite.c
+++ b/src/libtracker-data/tracker-db-interface-sqlite.c
@@ -385,14 +385,14 @@ function_sparql_uri_is_descendant (sqlite3_context *context,
return;
}
- if (sqlite3_value_type (argv[argc-1]) != SQLITE_TEXT) {
- sqlite3_result_error (context, "Invalid child", -1);
- return;
- }
-
- if (sqlite3_value_type (argv[0]) != SQLITE_TEXT) {
- sqlite3_result_error (context, "Invalid first parent", -1);
- return;
+ for (i = 0; i < argc; i++) {
+ if (sqlite3_value_type (argv[i]) == SQLITE_NULL) {
+ sqlite3_result_int (context, FALSE);
+ return;
+ } else if (sqlite3_value_type (argv[i]) != SQLITE_TEXT) {
+ sqlite3_result_error (context, "Invalid non-text argument", -1);
+ return;
+ }
}
child = sqlite3_value_text (argv[argc-1]);