summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Thursfield <sam@afuera.me.uk>2023-05-04 12:13:30 +0000
committerSam Thursfield <sam@afuera.me.uk>2023-05-04 12:13:30 +0000
commitbf58f527008eb4ad725f5a0ad457c7d404b123c7 (patch)
tree14e50ccb18c040823fffb6b7b24ee6c5d25faab1
parent0619c65273da0ca2644e43596fe3d61c1d8b0737 (diff)
parent18217f0545e4c20a9d41424d62a6fe6be53788dd (diff)
downloadtracker-bf58f527008eb4ad725f5a0ad457c7d404b123c7.tar.gz
Merge branch 'wip/carlosg/crash-fixes' into 'master'
Fix some potential crashers See merge request https://gitlab.gnome.org/GNOME/tracker/-/merge_requests/594
-rw-r--r--src/libtracker-sparql/core/tracker-db-interface-sqlite.c4
-rw-r--r--src/libtracker-sparql/core/tracker-sparql.c14
-rw-r--r--src/libtracker-sparql/remote/tracker-http-module.c12
3 files changed, 19 insertions, 11 deletions
diff --git a/src/libtracker-sparql/core/tracker-db-interface-sqlite.c b/src/libtracker-sparql/core/tracker-db-interface-sqlite.c
index 2aa493ca9..6b3482435 100644
--- a/src/libtracker-sparql/core/tracker-db-interface-sqlite.c
+++ b/src/libtracker-sparql/core/tracker-db-interface-sqlite.c
@@ -1639,13 +1639,15 @@ function_sparql_print_value (sqlite3_context *context,
sqlite3_result_value (context, argv[0]);
} else if (prop_type == TRACKER_PROPERTY_TYPE_DATE) {
const gchar *value, *end;
- int len = -1;
+ gsize len;
value = sqlite3_value_text (argv[0]);
/* Drop time data if we are given a xsd:dateTime as a xsd:date */
end = strchr (value, 'T');
if (end)
len = end - value;
+ else
+ len = strlen (value);
sqlite3_result_text (context,
g_strndup (value, len),
diff --git a/src/libtracker-sparql/core/tracker-sparql.c b/src/libtracker-sparql/core/tracker-sparql.c
index 745ed46b3..064102a20 100644
--- a/src/libtracker-sparql/core/tracker-sparql.c
+++ b/src/libtracker-sparql/core/tracker-sparql.c
@@ -9920,9 +9920,11 @@ init_literal_token_from_gvalue (TrackerToken *resolved_out,
const GValue *value)
{
if (G_VALUE_TYPE (value) == G_TYPE_STRING) {
- tracker_token_literal_init (resolved_out,
- g_value_get_string (value),
- -1);
+ const gchar *str;
+
+ str = g_value_get_string (value);
+ if (str)
+ tracker_token_literal_init (resolved_out, str, -1);
} else if (G_VALUE_TYPE (value) == G_TYPE_INT64) {
gchar *str;
str = g_strdup_printf ("%" G_GINT64_FORMAT,
@@ -9942,8 +9944,10 @@ init_literal_token_from_gvalue (TrackerToken *resolved_out,
gchar *str;
str = tracker_date_format_iso8601 (g_value_get_boxed (value));
- tracker_token_literal_init (resolved_out, str, -1);
- g_free (str);
+ if (str) {
+ tracker_token_literal_init (resolved_out, str, -1);
+ g_free (str);
+ }
} else if (G_VALUE_TYPE (value) != G_TYPE_INVALID) {
g_assert_not_reached ();
}
diff --git a/src/libtracker-sparql/remote/tracker-http-module.c b/src/libtracker-sparql/remote/tracker-http-module.c
index ed87cd1b7..a74ec3d37 100644
--- a/src/libtracker-sparql/remote/tracker-http-module.c
+++ b/src/libtracker-sparql/remote/tracker-http-module.c
@@ -240,11 +240,8 @@ handle_write_in_thread (GTask *task,
count = g_input_stream_read (request->istream,
buffer, sizeof (buffer),
cancellable, &error);
- if (count < 0) {
- g_task_return_error (task, error);
- g_object_unref (task);
+ if (count < 0)
break;
- }
soup_message_body_append (message_body,
SOUP_MEMORY_COPY,
@@ -257,7 +254,12 @@ handle_write_in_thread (GTask *task,
g_input_stream_close (request->istream, cancellable, NULL);
soup_message_body_complete (message_body);
- g_task_return_boolean (task, TRUE);
+
+ if (error)
+ g_task_return_error (task, error);
+ else
+ g_task_return_boolean (task, TRUE);
+
g_object_unref (task);
}