Commit e908b503 authored by Cosimo Cecchi's avatar Cosimo Cecchi

gfile: don't report completion twice on g_file_load_contents error

When an error occurs while reading the file input stream in
g_file_load_contents (e.g. because the operation was cancelled), the
code is correctly calling g_task_return_error(), but in the callback
from the close operation, g_task_return_boolean() will be called again.

Code that cleans up its state in the async callback will then be called
twice, leading to invalid memory access.
parent 40f8e15c
...@@ -6514,11 +6514,12 @@ load_contents_read_callback (GObject *obj, ...@@ -6514,11 +6514,12 @@ load_contents_read_callback (GObject *obj,
if (read_size < 0) if (read_size < 0)
{ {
/* EOF, close the file */
g_task_return_error (data->task, error); g_task_return_error (data->task, error);
g_input_stream_close_async (stream, 0, g_object_unref (data->task);
g_task_get_cancellable (data->task),
load_contents_close_callback, data); /* Close the file ignoring any error */
g_input_stream_close_async (stream, 0, NULL, NULL, NULL);
g_object_unref (stream);
} }
else if (read_size == 0) else if (read_size == 0)
{ {
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment