[grilo] grl-net: Fix crashes in SoupRequest error case



commit 7abc1ac9b84a84fa5f1c2c0f4e9342b21f48afe0
Author: Sam Thursfield <sam thursfield codethink co uk>
Date:   Wed Oct 26 12:36:41 2011 +0100

    grl-net: Fix crashes in SoupRequest error case
    
    https://bugzilla.gnome.org/show_bug.cgi?id=662762

 libs/net/grl-net-wc.c |   24 ++++++++++++++++++++----
 1 files changed, 20 insertions(+), 4 deletions(-)
---
diff --git a/libs/net/grl-net-wc.c b/libs/net/grl-net-wc.c
index 10ae228..58a6a95 100644
--- a/libs/net/grl-net-wc.c
+++ b/libs/net/grl-net-wc.c
@@ -420,8 +420,20 @@ reply_cb (GObject *source, GAsyncResult *res, gpointer user_data)
 {
   GSimpleAsyncResult *result = G_SIMPLE_ASYNC_RESULT (user_data);
   RequestResult *rr = g_simple_async_result_get_op_res_gpointer (result);
+  GError *error = NULL;
+
+  GInputStream *in = soup_request_send_finish (rr->request, res, &error);
+
+  if (error != NULL) {
+    g_simple_async_result_set_error (result, GRL_NET_WC_ERROR,
+                                     GRL_NET_WC_ERROR_UNAVAILABLE,
+                                     "Data not available");
+    g_error_free (error);
+
+    g_simple_async_result_complete (result);
+    return;
+  }
 
-  GInputStream *in = soup_request_send_finish (rr->request, res, NULL);
   rr->length = soup_request_get_content_length (rr->request) + 1;
   if (rr->length == 1) {
     rr->length = BUFFER_SIZE;
@@ -481,10 +493,12 @@ get_url_now (GrlNetWc *self,
 {
   RequestResult *rr = g_slice_new0 (RequestResult);
 
-  rr->request = soup_requester_request (self->priv->requester, url, NULL);
   g_simple_async_result_set_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (result),
                                              rr,
                                              NULL);
+
+  rr->request = soup_requester_request (self->priv->requester, url, NULL);
+
   soup_request_send_async (rr->request, cancellable, reply_cb, result);
 }
 
@@ -706,14 +720,16 @@ grl_net_wc_request_finish (GrlNetWc *self,
   g_warn_if_fail (g_simple_async_result_get_source_tag (res) ==
                   grl_net_wc_request_async);
 
+#ifdef LIBSOUP_USE_UNSTABLE_REQUEST_API
+  RequestResult *rr = g_simple_async_result_get_op_res_gpointer (res);
+#endif
+
   if (g_simple_async_result_propagate_error (res, error) == TRUE) {
     ret = FALSE;
     goto end_func;
   }
 
 #ifdef LIBSOUP_USE_UNSTABLE_REQUEST_API
-  RequestResult *rr = g_simple_async_result_get_op_res_gpointer (res);
-
   if (self->priv->previous_data) {
     g_free (self->priv->previous_data);
   }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]