[FFmpeg-devel] avformat/matroskadec: Fix seeking

Submitted by Andreas Rheinhardt on Aug. 17, 2019, 12:27 a.m.

Details

Message ID 20190817002751.7986-1-andreas.rheinhardt@gmail.com
State Accepted
Commit c294f38c91f440880ffd28fda0eeb1154431ab7e
Headers show

Commit Message

Andreas Rheinhardt Aug. 17, 2019, 12:27 a.m.
matroska_reset_status (a function that is used during seeking (among
other things)) used an int for the return value of avio_seek which
returns an int64_t. Checking the return value then indicated an error
even though the seek was successfull for targets in the range of
2GB-4GB, 6GB-8GB, ... This error implied that the status hasn't been
reset and in particular, the old level was still considered to be in
force, so that ebml_parse returned errors because the newly parsed
elements were of course not contained in the previously active and still
wrongly considered active master element any more.

Addresses ticket #8084.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
---
 libavformat/matroskadec.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

James Almer Aug. 17, 2019, 12:37 a.m.
On 8/16/2019 9:27 PM, Andreas Rheinhardt wrote:
> matroska_reset_status (a function that is used during seeking (among
> other things)) used an int for the return value of avio_seek which
> returns an int64_t. Checking the return value then indicated an error
> even though the seek was successfull for targets in the range of
> 2GB-4GB, 6GB-8GB, ... This error implied that the status hasn't been
> reset and in particular, the old level was still considered to be in
> force, so that ebml_parse returned errors because the newly parsed
> elements were of course not contained in the previously active and still
> wrongly considered active master element any more.
> 
> Addresses ticket #8084.
> 
> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
> ---
>  libavformat/matroskadec.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c
> index 4e20f15792..1ea9b807e6 100644
> --- a/libavformat/matroskadec.c
> +++ b/libavformat/matroskadec.c
> @@ -757,7 +757,7 @@ static int matroska_reset_status(MatroskaDemuxContext *matroska,
>                                   uint32_t id, int64_t position)
>  {
>      if (position >= 0) {
> -        int err = avio_seek(matroska->ctx->pb, position, SEEK_SET);
> +        int64_t err = avio_seek(matroska->ctx->pb, position, SEEK_SET);
>          if (err < 0)
>              return err;
>      }

Applied and backported to release/4.2

Thanks.

Patch hide | download patch | download mbox

diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c
index 4e20f15792..1ea9b807e6 100644
--- a/libavformat/matroskadec.c
+++ b/libavformat/matroskadec.c
@@ -757,7 +757,7 @@  static int matroska_reset_status(MatroskaDemuxContext *matroska,
                                  uint32_t id, int64_t position)
 {
     if (position >= 0) {
-        int err = avio_seek(matroska->ctx->pb, position, SEEK_SET);
+        int64_t err = avio_seek(matroska->ctx->pb, position, SEEK_SET);
         if (err < 0)
             return err;
     }