[FFmpeg-devel] [PATCH] Fix issue when invalid nb_index_entries value is read - SPONSORED BY INA (Institut National de l'Audiovisuel)

Cédric Le Barz clebarz at ektacom.com
Fri Mar 24 11:13:34 EET 2023


Hi Marton,

A sample can be downloaded from here : 
https://estendirectapi.ektacom.com/download/ffmpeg/

Regards,

Cédric


Le 20/03/2023 à 21:03, Marton Balint a écrit :
>
>
> On Mon, 20 Mar 2023, Cédric Le Barz wrote:
>
>> We have several samples but these are big files: about 7 GB. Is it OK to
>> share such a file size ?
>
> I kind of hoped you have access to the broken muxer and can remux a
> small file which can be made public.
>
> If not, then simply upload it somewhere so I can take a look. If the
> sample can't be made public, just share it with me privately.
>
> Thanks,
> Marton
>
>>
>> Thanks for you answer,
>>
>> Regards,
>>
>> Cédric
>>
>> Le 16/03/2023 à 21:28, Marton Balint a écrit :
>>>
>>>
>>>  On Thu, 16 Mar 2023, Cédric Le Barz wrote:
>>>
>>>>  Hi,
>>>>
>>>>  By "invalid", I mean that the written nb_index_entries value does not
>>>>  match with the real number of entries in the table. The number of
>>>>  entries in the table is lower than the specified one. This is a 
>>>> bug in
>>>>  commercial MXFTk software (at least version V 2.8.0.0.1). It exists a
>>>>  lot a MXF files with this problem.
>>>
>>>  Please share a sample. Or better yet, open a ticket for this issue and
>>>  attach a sample there for future reference.
>>>
>>>  Thanks,
>>>  Marton
>>>
>>>>
>>>>  Best regards,
>>>>
>>>>  Cédric
>>>>
>>>>  -----Message d'origine-----
>>>>  De : ffmpeg-devel <ffmpeg-devel-bounces at ffmpeg.org> De la part de 
>>>> Marton
>>>>  Balint
>>>>  Envoyé : mercredi 8 mars 2023 23:06
>>>>  À : FFmpeg development discussions and patches 
>>>> <ffmpeg-devel at ffmpeg.org>
>>>>  Objet : Re: [FFmpeg-devel] [PATCH] Fix issue when invalid
>>>>  nb_index_entries value is read - SPONSORED BY INA (Institut 
>>>> National de
>>>>  l'Audiovisuel)
>>>>
>>>>
>>>>
>>>>  On Wed, 8 Mar 2023, Cédric Le Barz wrote:
>>>>
>>>>>
>>>>>  Fix issue when invalid nb_index_entries value is read : in case of
>>>>>  false nb_index_entries value, ffmpeg exit. This patch fix this 
>>>>> problem.
>>>>
>>>>  What do you mean invalid? Is the value wrong, or is the file 
>>>> truncated in
>>>>  the middle of the index segment? From the patch it looks like the 
>>>> latter.
>>>>
>>>>  Is there a single unluckily truncated file that you want to fix 
>>>> with this
>>>>  patch, or multiple files can be affected by this fix because e.g. 
>>>> they
>>>>  are written by the same broken muxer?
>>>>
>>>>  Overall I am not sure if we want this applied, the user can also 
>>>> opt to
>>>>  avoid parsing all partitions with -seekable 0 and read / remux the 
>>>> file
>>>>  sequentially ignoring any index, so if somebody wants to rescue 
>>>> the data,
>>>>  it can be done as is.
>>>>
>>>>  Regards,
>>>>  Marton
>>>>
>>>>>
>>>>>
>>>>>  Signed-off-by: Cedric Le Barz <clebarz at ektacom.com>
>>>>>  ---
>>>>>   ffmpeg/libavformat/mxfdec.c | 14 ++++++++++++--
>>>>>   1 file changed, 12 insertions(+), 2 deletions(-)
>>>>>
>>>>>  diff --git a/ffmpeg/libavformat/mxfdec.c 
>>>>> b/ffmpeg/libavformat/mxfdec.c
>>>>>  index 4530617..ffc8987 100644
>>>>>  --- a/ffmpeg/libavformat/mxfdec.c
>>>>>  +++ b/ffmpeg/libavformat/mxfdec.c
>>>>>  @@ -1221,8 +1221,18 @@ static int
>>>>>  mxf_read_index_entry_array(AVIOContext *pb, MXFIndexTableSegment 
>>>>> *seg
>>>>>       }
>>>>>       for (i = 0; i < segment->nb_index_entries; i++) {
>>>>>  -        if(avio_feof(pb))
>>>>>  -            return AVERROR_INVALIDDATA;
>>>>>  +
>>>>>  +        if(avio_feof(pb)) {
>>>>>  +            if (i == 0) {
>>>>>  +                return AVERROR_INVALIDDATA;
>>>>>  +            } else {
>>>>>  +                /* To be more robust to invalid nb_index_entries 
>>>>> value,
>>>>>  +                   fix the index entry number according to read 
>>>>> entries
>>>>>  */
>>>>>  +                segment->nb_index_entries = i;
>>>>>  +                return 0;
>>>>>  +            }
>>>>>  +        }
>>>>>  +
>>>>>           segment->temporal_offset_entries[i] = avio_r8(pb);
>>>>>           avio_r8(pb); /*
>>>>>  KeyFrameOffset */
>>>>>          segment->flag_entries[i] = avio_r8(pb);
>>>>>  --
>>>>>  2.34.1
>>>>>
>>>>>  _______________________________________________
>>>>>  ffmpeg-devel mailing list
>>>>>  ffmpeg-devel at ffmpeg.org
>>>>>  https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>>>
>>>>>  To unsubscribe, visit link above, or email
>>>>>  ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
>>>>>
>>>>>
>>>>  _______________________________________________
>>>>  ffmpeg-devel mailing list
>>>>  ffmpeg-devel at ffmpeg.org
>>>>  https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>>
>>>>  To unsubscribe, visit link above, or email
>>>>  ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
>>>>
>>>>  _______________________________________________
>>>>  ffmpeg-devel mailing list
>>>>  ffmpeg-devel at ffmpeg.org
>>>>  https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>>
>>>>  To unsubscribe, visit link above, or email
>>>>  ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
>>>  _______________________________________________
>>>  ffmpeg-devel mailing list
>>>  ffmpeg-devel at ffmpeg.org
>>>  https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>
>>>  To unsubscribe, visit link above, or email
>>>  ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
>> _______________________________________________
>> ffmpeg-devel mailing list
>> ffmpeg-devel at ffmpeg.org
>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>
>> To unsubscribe, visit link above, or email
>> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
>>
>>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".


More information about the ffmpeg-devel mailing list