From 64e3b07a9d6cb3f089941f232a34943d93a7d289 Mon Sep 17 00:00:00 2001 From: wm4 Date: Sat, 12 Jul 2014 19:16:53 +0200 Subject: [PATCH] cache_file: fix operation if stream size is unknown Happens when playing from a pipe. Note that seeking forward doesn't work. It would be possible to create a workaround for that by reading and skipping data until the target position is reached (and writing the skipped data into the cache file), but I'm not sure about that. Fixes #928. CC: @mpv-player/stable --- stream/cache_file.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/stream/cache_file.c b/stream/cache_file.c index fc9b0e1a4b..af315b355a 100644 --- a/stream/cache_file.c +++ b/stream/cache_file.c @@ -68,7 +68,7 @@ static int fill_buffer(stream_t *s, char *buffer, int max_len) if (s->pos >= p->size - BLOCK_SIZE) { int64_t new_size = -1; stream_control(s, STREAM_CTRL_GET_SIZE, &new_size); - if (new_size != p->size) + if (p->size >= 0 && new_size != p->size) set_bit(p, BLOCK_ALIGN(p->size), 0); p->size = MPMIN(p->max_size, new_size); } @@ -96,7 +96,8 @@ static int fill_buffer(stream_t *s, char *buffer, int max_len) // align/limit to blocks max_len = MPMIN(max_len, BLOCK_SIZE - (s->pos % BLOCK_SIZE)); // Limit to max. known file size - max_len = MPMIN(max_len, p->size - s->pos); + if (p->size >= 0) + max_len = MPMIN(max_len, p->size - s->pos); return fread(buffer, 1, max_len, p->cache_file); }