[libvirt] [PATCH glib] gobject-stream: fix issue found by coverity

Pavel Hrdina phrdina at redhat.com
Thu Feb 20 12:49:31 UTC 2014


The coverity server found issue in gvir_stream_close function that
we ignore return values of g_input_stream_close and
g_outpu_stream_close, but we also ignore the error message and we
assume that it's closed without error.

Now we will check return values and also propagate the error message
to the upper layers.

Signed-off-by: Pavel Hrdina <phrdina at redhat.com>
---
 libvirt-gobject/libvirt-gobject-stream.c | 24 ++++++++++++++++++++----
 1 file changed, 20 insertions(+), 4 deletions(-)

diff --git a/libvirt-gobject/libvirt-gobject-stream.c b/libvirt-gobject/libvirt-gobject-stream.c
index 1572022..66a12ab 100644
--- a/libvirt-gobject/libvirt-gobject-stream.c
+++ b/libvirt-gobject/libvirt-gobject-stream.c
@@ -102,17 +102,33 @@ static GOutputStream* gvir_stream_get_output_stream(GIOStream *io_stream)
 
 static gboolean gvir_stream_close(GIOStream *io_stream,
                                   GCancellable *cancellable,
-                                  G_GNUC_UNUSED GError **error)
+                                  GError **error)
 {
     GVirStream *self = GVIR_STREAM(io_stream);
+    GError *local_error = NULL;
+    gboolean i_ret = TRUE, o_ret = TRUE;
 
     if (self->priv->input_stream)
-        g_input_stream_close(self->priv->input_stream, cancellable, NULL);
+        i_ret = g_input_stream_close(self->priv->input_stream, cancellable, &local_error);
+
+    if (local_error) {
+        if (!*error)
+            g_propagate_error(error, local_error);
+        else
+            g_error_free(local_error);
+    }
 
     if (self->priv->output_stream)
-        g_output_stream_close(self->priv->output_stream, cancellable, NULL);
+        o_ret = g_output_stream_close(self->priv->output_stream, cancellable, &local_error);
+
+    if (local_error) {
+        if (!*error)
+            g_propagate_error(error, local_error);
+        else
+            g_error_free(local_error);
+    }
 
-    return TRUE; /* FIXME: really close the stream? */
+    return (i_ret && o_ret);
 }
 
 
-- 
1.8.3.1




More information about the libvir-list mailing list