[FFmpeg-devel] Fix to prevent runaway ac3 detection by looking at the actual frame rather than the first detected frame.

Submitted by Marijn Meijles on Jan. 28, 2017, 8:33 p.m.

Details

Message ID 20170128203334.GA2281@lunar.bitpit.net
State New
Headers show

Commit Message

Marijn Meijles Jan. 28, 2017, 8:33 p.m.
On Sat, Jan 28, 2017 at 07:56:51PM +0100, Michael Niedermayer wrote:
> On Sat, Jan 28, 2017 at 01:52:30PM +0100, Marijn Meijles wrote:
> > Signed-off-by: Marijn Meijles <marijn@bitpit.net>
> > ---
> >  libavformat/ac3dec.c | 8 ++++----
> >  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> the previous mail contains a description but the patch itself lacks
> a commit message beyond the first line, the patch should contain a
> commit message
> 

strange, git must have eaten it. Anyway, here is an untouched patch file from git.

Marijn

Comments

Michael Niedermayer Jan. 28, 2017, 9:50 p.m.
On Sat, Jan 28, 2017 at 09:33:35PM +0100, Marijn Meijles wrote:
> On Sat, Jan 28, 2017 at 07:56:51PM +0100, Michael Niedermayer wrote:
> > On Sat, Jan 28, 2017 at 01:52:30PM +0100, Marijn Meijles wrote:
> > > Signed-off-by: Marijn Meijles <marijn@bitpit.net>
> > > ---
> > >  libavformat/ac3dec.c | 8 ++++----
> > >  1 file changed, 4 insertions(+), 4 deletions(-)
> > 
> > the previous mail contains a description but the patch itself lacks
> > a commit message beyond the first line, the patch should contain a
> > commit message
> > 
> 
> strange, git must have eaten it. Anyway, here is an untouched patch file from git.
> 
> Marijn

>  ac3dec.c |    8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> b0db85d47bad47ca779e1748c7f0d4e97bd32e6b  0001-Fix-to-prevent-runaway-ac3-detection-by-looking-at-t.patch
> From 27e9209c1094b24bcc45ef3ff174b80cb17db775 Mon Sep 17 00:00:00 2001
> From: Marijn Meijles <marijn@bitpit.net>
> Date: Fri, 27 Jan 2017 22:08:15 +0100
> Subject: [PATCH] Fix to prevent runaway ac3 detection by looking at the actual
>  frame rather than the first detected frame.
> 
> When detecting a swapped AC3 marker the data of the frame is swapped. However, in subsequent frames the data swapped is taken from the first frame rather than the current frame.
> 
> Signed-off-by: Marijn Meijles <marijn@bitpit.net>
> ---
>  libavformat/ac3dec.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/libavformat/ac3dec.c b/libavformat/ac3dec.c
> index 363a32e..e85b0ac 100644
> --- a/libavformat/ac3dec.c
> +++ b/libavformat/ac3dec.c
> @@ -49,8 +49,8 @@ static int ac3_eac3_probe(AVProbeData *p, enum AVCodecID expected_codec_id)
>                  buf2+=16;
>              if (buf[0] == 0x77 && buf[1] == 0x0B) {

these could be changed to buf2 too but i guess its kind of making
sense to keep them so as to count stable endianness

patch applied

thx

[...]

Patch hide | download patch | download mbox

From 27e9209c1094b24bcc45ef3ff174b80cb17db775 Mon Sep 17 00:00:00 2001
From: Marijn Meijles <marijn@bitpit.net>
Date: Fri, 27 Jan 2017 22:08:15 +0100
Subject: [PATCH] Fix to prevent runaway ac3 detection by looking at the actual
 frame rather than the first detected frame.

When detecting a swapped AC3 marker the data of the frame is swapped. However, in subsequent frames the data swapped is taken from the first frame rather than the current frame.

Signed-off-by: Marijn Meijles <marijn@bitpit.net>
---
 libavformat/ac3dec.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/libavformat/ac3dec.c b/libavformat/ac3dec.c
index 363a32e..e85b0ac 100644
--- a/libavformat/ac3dec.c
+++ b/libavformat/ac3dec.c
@@ -49,8 +49,8 @@  static int ac3_eac3_probe(AVProbeData *p, enum AVCodecID expected_codec_id)
                 buf2+=16;
             if (buf[0] == 0x77 && buf[1] == 0x0B) {
                 for(i=0; i<8; i+=2) {
-                    buf3[i  ] = buf[i+1];
-                    buf3[i+1] = buf[i  ];
+                    buf3[i  ] = buf2[i+1];
+                    buf3[i+1] = buf2[i  ];
                 }
                 init_get_bits(&gbc, buf3, 54);
             }else
@@ -62,8 +62,8 @@  static int ac3_eac3_probe(AVProbeData *p, enum AVCodecID expected_codec_id)
             if (buf[0] == 0x77 && buf[1] == 0x0B) {
                 av_assert0(phdr->frame_size <= sizeof(buf3));
                 for(i=8; i<phdr->frame_size; i+=2) {
-                    buf3[i  ] = buf[i+1];
-                    buf3[i+1] = buf[i  ];
+                    buf3[i  ] = buf2[i+1];
+                    buf3[i+1] = buf2[i  ];
                 }
             }
             if(av_crc(av_crc_get_table(AV_CRC_16_ANSI), 0, gbc.buffer + 2, phdr->frame_size - 2))
-- 
2.10.1 (Apple Git-78)