[gvfs] http: Return error if seek was not successful



commit cb950723da8b6817dbe894fed6a78fa77c932d16
Author: Ondrej Holy <oholy redhat com>
Date:   Thu Sep 10 10:38:16 2015 +0200

    http: Return error if seek was not successful
    
    Some webdav servers doesn't implement range requests, which are
    necessary for a seek support. GVfsHttpInputStream doesn't handle this
    case. Consequently g_seekable_tell returns a requested offset, however
    g_input_stream_read returns bytes from a beginning of a file.
    
    Return error if Content-Range header field is missing, or the range is
    not valid. This change is needed to avoid data corruption when reading.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=754824

 daemon/gvfshttpinputstream.c |   18 ++++++++++++++++++
 1 files changed, 18 insertions(+), 0 deletions(-)
---
diff --git a/daemon/gvfshttpinputstream.c b/daemon/gvfshttpinputstream.c
index f96f52d..5eafc29 100644
--- a/daemon/gvfshttpinputstream.c
+++ b/daemon/gvfshttpinputstream.c
@@ -23,6 +23,7 @@
 #include <string.h>
 
 #include <glib.h>
+#include <glib/gi18n.h>
 #include <gio/gio.h>
 
 #include <libsoup/soup.h>
@@ -353,6 +354,23 @@ read_send_callback (GObject      *object,
       g_object_unref (task);
       return;
     }
+  if (priv->range)
+    {
+      gboolean status;
+      goffset start, end;
+
+      status = soup_message_headers_get_content_range (priv->msg->response_headers,
+                                                       &start, &end, NULL);
+      if (!status || start != priv->request_offset)
+      {
+        g_task_return_new_error (task,
+                                 G_IO_ERROR,
+                                 G_IO_ERROR_FAILED,
+                                 _("Error seeking in stream"));
+        g_object_unref (task);
+        return;
+      }
+    }
 
   g_input_stream_read_async (priv->stream, rasd->buffer, rasd->count,
                             g_task_get_priority (task),


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