[FFmpeg-cvslog] http: Do not try to make a new request when seeking past the end of the file
Justin Ruggles
git at videolan.org
Tue Feb 26 21:57:29 EET 2019
ffmpeg | branch: master | Justin Ruggles <justin.ruggles at gmail.com> | Wed Feb 20 09:52:43 2019 -0500| [69fcc093c1241b5ee7711c56c9cd558832a7e491] | committer: Vittorio Giovara
http: Do not try to make a new request when seeking past the end of the file
This avoids making invalid HTTP Range requests for a byte range past the
known end of the file during a seek. Those requests generally return a HTTP
response of 416 Range Not Satisfiable, which causes an error response.
Reference: https://tools.ietf.org/html/rfc7233
Signed-off-by: Vittorio Giovara <vittorio.giovara at gmail.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=69fcc093c1241b5ee7711c56c9cd558832a7e491
---
libavformat/http.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/libavformat/http.c b/libavformat/http.c
index 072a6ce0b9..ed0eb1c875 100644
--- a/libavformat/http.c
+++ b/libavformat/http.c
@@ -1691,6 +1691,13 @@ static int64_t http_seek_internal(URLContext *h, int64_t off, int whence, int fo
if (s->off && h->is_streamed)
return AVERROR(ENOSYS);
+ /* do not try to make a new connection if seeking past the end of the file */
+ if (s->end_off || s->filesize != UINT64_MAX) {
+ uint64_t end_pos = s->end_off ? s->end_off : s->filesize;
+ if (s->off >= end_pos)
+ return s->off;
+ }
+
/* we save the old context in case the seek fails */
old_buf_size = s->buf_end - s->buf_ptr;
memcpy(old_buf, s->buf_ptr, old_buf_size);
More information about the ffmpeg-cvslog
mailing list