input: fix skipping data in stream-oriented access
authorRémi Denis-Courmont <remi@remlab.net>
Sun, 10 Jul 2016 14:36:00 +0000 (17:36 +0300)
committerRémi Denis-Courmont <remi@remlab.net>
Sun, 10 Jul 2016 14:39:19 +0000 (17:39 +0300)
Now that stream cache and stream/access wrapper are separated the later
must handle skipping data (by "reading into" a NULL buffer). This was
done correctly for block-oriented plugins, but not stream-oriented
ones. This patch simply adds a dummy buffer to read into in the
unlikely event that it is needed.

(Typically one of the stream cache plugins takes care of this, so this
bug was mostly invisible.)

Pointed-out-by: Filip Roséen <filip@videolabs.io>
src/input/access.c

index e7df2ee..fff3d64 100644 (file)
@@ -254,6 +254,13 @@ static ssize_t AStreamReadStream(stream_t *s, void *buf, size_t len)
     stream_sys_t *sys = s->p_sys;
     input_thread_t *input = s->p_input;
     ssize_t val = 0;
+    char dummy[(buf != NULL) ? 1 : (len <= 2048) ? len : 2048];
+
+    if (buf == NULL)
+    {
+        buf = dummy;
+        len = sizeof (dummy);
+    }
 
     do
     {