restore old buffer content when seek failed in http protocol, fix issue #1631
Originally committed as revision 21208 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
a1f42882e1
commit
08c8e66a99
@ -394,6 +394,8 @@ static int64_t http_seek(URLContext *h, int64_t off, int whence)
|
||||
HTTPContext *s = h->priv_data;
|
||||
URLContext *old_hd = s->hd;
|
||||
int64_t old_off = s->off;
|
||||
uint8_t old_buf[BUFFER_SIZE];
|
||||
int old_buf_size;
|
||||
|
||||
if (whence == AVSEEK_SIZE)
|
||||
return s->filesize;
|
||||
@ -401,6 +403,8 @@ static int64_t http_seek(URLContext *h, int64_t off, int whence)
|
||||
return -1;
|
||||
|
||||
/* 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);
|
||||
s->hd = NULL;
|
||||
if (whence == SEEK_CUR)
|
||||
off += s->off;
|
||||
@ -410,6 +414,9 @@ static int64_t http_seek(URLContext *h, int64_t off, int whence)
|
||||
|
||||
/* if it fails, continue on old connection */
|
||||
if (http_open_cnx(h) < 0) {
|
||||
memcpy(s->buffer, old_buf, old_buf_size);
|
||||
s->buf_ptr = s->buffer;
|
||||
s->buf_end = s->buffer + old_buf_size;
|
||||
s->hd = old_hd;
|
||||
s->off = old_off;
|
||||
return -1;
|
||||
|
Loading…
Reference in New Issue
Block a user