[tracker/sam/check-if-bound] libtracker-sparql: Assert that values are bound in accessors



commit 179b46dec3401ace8b27d31bcd655f75cc78c74f
Author: Sam Thursfield <sam afuera me uk>
Date:   Wed May 27 13:27:47 2020 +0200

    libtracker-sparql: Assert that values are bound in accessors
    
    I saw CRITICAL errors like this occuring when calling
    tracker_sparql_cursor_get_double():
    
        (org.gnome.Photos:17222): GLib-CRITICAL **: 13:13:55.663: g_ascii_strtod: assertion 'nptr != NULL' 
failed
    
    This doesn't give a good idea of the cause. Now the same
    code produces this error:
    
        (org.gnome.Photos:18736): Tracker-CRITICAL **: 13:29:19.328: tracker_sparql_cursor_real_get_double: 
assertion 'tracker_sparql_cursor_real_is_bound (cursor, column)' failed

 src/libtracker-sparql/tracker-cursor.c | 22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)
---
diff --git a/src/libtracker-sparql/tracker-cursor.c b/src/libtracker-sparql/tracker-cursor.c
index 5ded1f996..428fd97eb 100644
--- a/src/libtracker-sparql/tracker-cursor.c
+++ b/src/libtracker-sparql/tracker-cursor.c
@@ -55,12 +55,21 @@ tracker_sparql_cursor_init (TrackerSparqlCursor *cursor)
 {
 }
 
+static gboolean
+tracker_sparql_cursor_real_is_bound (TrackerSparqlCursor *cursor,
+                                     gint                 column)
+{
+       return tracker_sparql_cursor_get_value_type (cursor, column) != TRACKER_SPARQL_VALUE_TYPE_UNBOUND;
+}
+
 static gint64
 tracker_sparql_cursor_real_get_integer (TrackerSparqlCursor *cursor,
                                         gint                 column)
 {
        const gchar *text;
 
+       g_return_val_if_fail (tracker_sparql_cursor_real_is_bound (cursor, column), 0);
+
        text = tracker_sparql_cursor_get_string (cursor, column, NULL);
        return g_ascii_strtoll (text, NULL, 10);
 }
@@ -71,7 +80,10 @@ tracker_sparql_cursor_real_get_double (TrackerSparqlCursor *cursor,
 {
        const gchar *text;
 
+       g_return_val_if_fail (tracker_sparql_cursor_real_is_bound (cursor, column), 0);
+
        text = tracker_sparql_cursor_get_string (cursor, column, NULL);
+
        return g_ascii_strtod (text, NULL);
 }
 
@@ -81,15 +93,11 @@ tracker_sparql_cursor_real_get_boolean (TrackerSparqlCursor *cursor,
 {
        const gchar *text;
 
+       g_return_val_if_fail (tracker_sparql_cursor_real_is_bound (cursor, column), FALSE);
+
        text = tracker_sparql_cursor_get_string (cursor, column, NULL);
-       return g_ascii_strcasecmp (text, "true") == 0;
-}
 
-static gboolean
-tracker_sparql_cursor_real_is_bound (TrackerSparqlCursor *cursor,
-                                     gint                 column)
-{
-       return tracker_sparql_cursor_get_value_type (cursor, column) != TRACKER_SPARQL_VALUE_TYPE_UNBOUND;
+       return g_ascii_strcasecmp (text, "true") == 0;
 }
 
 static void


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]