diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2020-10-11 13:48:36 +0200 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2020-10-11 13:52:40 +0200 |
commit | 8b83c5f70b06902c63c2331d8195f9513ef15f7b (patch) | |
tree | 2071aadcffaa71bd1fdcb0146b5d565ccfbb2d41 | |
parent | ffb2eecda216282ab425ede2a90ed0db8693b4e5 (diff) | |
download | tracker-8b83c5f70b06902c63c2331d8195f9513ef15f7b.tar.gz |
libtracker-data: Break out of all loops on transaction errorswip/carlosg/invalid-reads
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
-rw-r--r-- | src/libtracker-data/tracker-data-update.c | 3 |
1 files changed, 2 insertions, 1 deletions
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; } |