[tracker/wip/carlosg/invalid-reads] libtracker-data: Break out of all loops on transaction errors
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc: 
- Subject: [tracker/wip/carlosg/invalid-reads] libtracker-data: Break out of all loops on transaction errors
- Date: Sun, 11 Oct 2020 12:41:22 +0000 (UTC)
commit 8b83c5f70b06902c63c2331d8195f9513ef15f7b
Author: Carlos Garnacho <carlosg gnome org>
Date:   Sun Oct 11 13:48:36 2020 +0200
    libtracker-data: Break out of all loops on transaction errors
    
    If an error is found when flushing a transaction on a specific, we'd
    inadvertently still try to handle operations in other graphs, possibly
    reusing the GError location, and leading to invalid reads/writes.
    
    After finding an error, the transaction is going to be rolled back
    anyway, so break on the first error found.
    
    Fixes: https://gitlab.gnome.org/GNOME/tracker-miners/-/issues/130
 src/libtracker-data/tracker-data-update.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
---
diff --git a/src/libtracker-data/tracker-data-update.c b/src/libtracker-data/tracker-data-update.c
index 86a707dde..f5c1c2af8 100644
--- a/src/libtracker-data/tracker-data-update.c
+++ b/src/libtracker-data/tracker-data-update.c
@@ -1147,11 +1147,12 @@ tracker_data_update_buffer_flush (TrackerData  *data,
                        tracker_data_resource_buffer_flush (data, resource, &actual_error);
                        if (actual_error) {
                                g_propagate_error (error, actual_error);
-                               break;
+                               goto out;
                        }
                }
        }
 
+out:
        g_ptr_array_set_size (data->update_buffer.graphs, 0);
        data->resource_buffer = NULL;
 }
[
Date Prev][
Date Next]   [
Thread Prev][
Thread Next]   
[
Thread Index]
[
Date Index]
[
Author Index]