mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-02-05 10:38:08 +01:00
Check that close_fn is not %NULL before calling (#578499)
Some streams have no close function, so this caused a crash.
This commit is contained in:
parent
0a280dadec
commit
c20b8d4d53
@ -1167,11 +1167,14 @@ close_async_thread (GSimpleAsyncResult *res,
|
|||||||
open handles */
|
open handles */
|
||||||
|
|
||||||
class = G_INPUT_STREAM_GET_CLASS (object);
|
class = G_INPUT_STREAM_GET_CLASS (object);
|
||||||
result = class->close_fn (G_INPUT_STREAM (object), cancellable, &error);
|
if (class->close_fn)
|
||||||
if (!result)
|
|
||||||
{
|
{
|
||||||
g_simple_async_result_set_from_error (res, error);
|
result = class->close_fn (G_INPUT_STREAM (object), cancellable, &error);
|
||||||
g_error_free (error);
|
if (!result)
|
||||||
|
{
|
||||||
|
g_simple_async_result_set_from_error (res, error);
|
||||||
|
g_error_free (error);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -569,11 +569,14 @@ close_async_thread (GSimpleAsyncResult *res,
|
|||||||
open handles */
|
open handles */
|
||||||
|
|
||||||
class = G_IO_STREAM_GET_CLASS (object);
|
class = G_IO_STREAM_GET_CLASS (object);
|
||||||
result = class->close_fn (G_IO_STREAM (object), cancellable, &error);
|
if (class->close_fn)
|
||||||
if (!result)
|
|
||||||
{
|
{
|
||||||
g_simple_async_result_set_from_error (res, error);
|
result = class->close_fn (G_IO_STREAM (object), cancellable, &error);
|
||||||
g_error_free (error);
|
if (!result)
|
||||||
|
{
|
||||||
|
g_simple_async_result_set_from_error (res, error);
|
||||||
|
g_error_free (error);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -456,7 +456,8 @@ g_output_stream_real_splice (GOutputStream *stream,
|
|||||||
if (flags & G_OUTPUT_STREAM_SPLICE_CLOSE_TARGET)
|
if (flags & G_OUTPUT_STREAM_SPLICE_CLOSE_TARGET)
|
||||||
{
|
{
|
||||||
/* But write errors on close are bad! */
|
/* But write errors on close are bad! */
|
||||||
if (!class->close_fn (stream, cancellable, error))
|
if (class->close_fn &&
|
||||||
|
!class->close_fn (stream, cancellable, error))
|
||||||
res = FALSE;
|
res = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1309,11 +1310,14 @@ close_async_thread (GSimpleAsyncResult *res,
|
|||||||
open handles */
|
open handles */
|
||||||
|
|
||||||
class = G_OUTPUT_STREAM_GET_CLASS (object);
|
class = G_OUTPUT_STREAM_GET_CLASS (object);
|
||||||
result = class->close_fn (G_OUTPUT_STREAM (object), cancellable, &error);
|
if (class->close_fn)
|
||||||
if (!result)
|
|
||||||
{
|
{
|
||||||
g_simple_async_result_set_from_error (res, error);
|
result = class->close_fn (G_OUTPUT_STREAM (object), cancellable, &error);
|
||||||
g_error_free (error);
|
if (!result)
|
||||||
|
{
|
||||||
|
g_simple_async_result_set_from_error (res, error);
|
||||||
|
g_error_free (error);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user