From 5782cf7415370eaf626df772fc6aa41df989ee2f Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Sat, 10 Oct 2020 13:29:12 +0200 Subject: libtracker-data: Check better for errors in datetime parsing When parsing iso8601 strings, we may end up with a legit negative timestamp. Checking for it being negative makes us fail (with no error!) for dates before the epoch, check the error instead. Fixes parsing issues with queries with ancient datetimes like: select ("0100-12-31T21:00:00-03:00"^^xsd:dateTime as ?date) {} --- src/libtracker-data/tracker-sparql.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/libtracker-data/tracker-sparql.c b/src/libtracker-data/tracker-sparql.c index cf023cbb8..be046da2a 100644 --- a/src/libtracker-data/tracker-sparql.c +++ b/src/libtracker-data/tracker-sparql.c @@ -9371,25 +9371,29 @@ prepare_query (TrackerSparql *sparql, return NULL; } } else if (prop_type == TRACKER_PROPERTY_TYPE_DATE) { + GError *inner_error = NULL; gchar *full_str; gdouble datetime; full_str = g_strdup_printf ("%sT00:00:00Z", binding->literal); - datetime = tracker_string_to_date (full_str, NULL, error); + datetime = tracker_string_to_date (full_str, NULL, &inner_error); g_free (full_str); - if (datetime < 0) { + if (inner_error) { + g_propagate_error (error, inner_error); g_object_unref (stmt); return NULL; } tracker_db_statement_bind_int (stmt, i, (int) datetime); } else if (prop_type == TRACKER_PROPERTY_TYPE_DATETIME) { + GError *inner_error = NULL; gdouble datetime; gint offset = 0; - datetime = tracker_string_to_date (binding->literal, offset, error); - if (datetime < 0) { + datetime = tracker_string_to_date (binding->literal, offset, &inner_error); + if (inner_error) { + g_propagate_error (error, inner_error); g_object_unref (stmt); return NULL; } -- cgit v1.2.1