diff mbox series

[FFmpeg-devel] libavformat/flac_picture: Don't return AVERROR_INVALIDDATA for errors with flac picture mimetype

Message ID CA+F=P4gTgX20_0gS0owTEkv66KtW_Fix1CWMGsLC084pu6azxw@mail.gmail.com
State New
Headers show
Series [FFmpeg-devel] libavformat/flac_picture: Don't return AVERROR_INVALIDDATA for errors with flac picture mimetype | expand

Checks

Context Check Description
andriy/configure_x86 warning Failed to apply patch

Commit Message

Will Cassella Sept. 9, 2022, 10:44 p.m. UTC
In the case where the FLAC picture MIME type is not understood, fail to
parse the picture silently rather than return AVERROR_INVALIDDATA.

This originated from a bug reported in Chromium: https://crbug.com/1052821

Signed-off-by: Will Cassella <cassew@google.com>
---
 libavformat/flac_picture.c | 4 ----
 1 file changed, 4 deletions(-)

     if (len + 24 > bytestream2_get_bytes_left(&g)) {
@@ -91,8 +89,6 @@ int ff_flac_parse_picture(AVFormatContext *s,
uint8_t **bufp, int buf_size,
     if (id == AV_CODEC_ID_NONE) {
         av_log(s, AV_LOG_ERROR, "Unknown attached picture mimetype: %s.\n",
                mimetype);
-        if (s->error_recognition & AV_EF_EXPLODE)
-            return AVERROR_INVALIDDATA;
         return 0;
     }

Comments

James Almer Sept. 10, 2022, 1:16 a.m. UTC | #1
On 9/9/2022 7:44 PM, Will Cassella wrote:
> In the case where the FLAC picture MIME type is not understood, fail to
> parse the picture silently rather than return AVERROR_INVALIDDATA.
> 
> This originated from a bug reported in Chromium: https://crbug.com/1052821
> 
> Signed-off-by: Will Cassella <cassew@google.com>
> ---
>   libavformat/flac_picture.c | 4 ----
>   1 file changed, 4 deletions(-)
> 
> diff --git a/libavformat/flac_picture.c b/libavformat/flac_picture.c
> index b33fee75b4..1acad9b251 100644
> --- a/libavformat/flac_picture.c
> +++ b/libavformat/flac_picture.c
> @@ -68,8 +68,6 @@ int ff_flac_parse_picture(AVFormatContext *s,
> uint8_t **bufp, int buf_size,
>       if (len <= 0 || len >= sizeof(mimetype)) {
>           av_log(s, AV_LOG_ERROR, "Could not read mimetype from an attached "
>                  "picture.\n");
> -        if (s->error_recognition & AV_EF_EXPLODE)
> -            return AVERROR_INVALIDDATA;

If you don't want to error out, then don't enable explode mode, which is 
meant to abort on the slightest issue?

>           return 0;
>       }
>       if (len + 24 > bytestream2_get_bytes_left(&g)) {
> @@ -91,8 +89,6 @@ int ff_flac_parse_picture(AVFormatContext *s,
> uint8_t **bufp, int buf_size,
>       if (id == AV_CODEC_ID_NONE) {
>           av_log(s, AV_LOG_ERROR, "Unknown attached picture mimetype: %s.\n",
>                  mimetype);
> -        if (s->error_recognition & AV_EF_EXPLODE)
> -            return AVERROR_INVALIDDATA;
>           return 0;
>       }
>
Will Cassella Sept. 20, 2022, 10:01 p.m. UTC | #2
Sorry for the delay, didn't see your reply!

The issue is that we do want to error out most of the time on invalid
input, but for our needs the mime-type of the attached picture being
empty or unknown isn't really relevant. Could there be a way to
classify this error differently so that it could be ignored, while
keeping AV_EF_EXPLODE enabled for everything else?

Thanks,
Will

On Fri, Sep 9, 2022 at 6:16 PM James Almer <jamrial@gmail.com> wrote:
>
> On 9/9/2022 7:44 PM, Will Cassella wrote:
> > In the case where the FLAC picture MIME type is not understood, fail to
> > parse the picture silently rather than return AVERROR_INVALIDDATA.
> >
> > This originated from a bug reported in Chromium: https://crbug.com/1052821
> >
> > Signed-off-by: Will Cassella <cassew@google.com>
> > ---
> >   libavformat/flac_picture.c | 4 ----
> >   1 file changed, 4 deletions(-)
> >
> > diff --git a/libavformat/flac_picture.c b/libavformat/flac_picture.c
> > index b33fee75b4..1acad9b251 100644
> > --- a/libavformat/flac_picture.c
> > +++ b/libavformat/flac_picture.c
> > @@ -68,8 +68,6 @@ int ff_flac_parse_picture(AVFormatContext *s,
> > uint8_t **bufp, int buf_size,
> >       if (len <= 0 || len >= sizeof(mimetype)) {
> >           av_log(s, AV_LOG_ERROR, "Could not read mimetype from an attached "
> >                  "picture.\n");
> > -        if (s->error_recognition & AV_EF_EXPLODE)
> > -            return AVERROR_INVALIDDATA;
>
> If you don't want to error out, then don't enable explode mode, which is
> meant to abort on the slightest issue?
>
> >           return 0;
> >       }
> >       if (len + 24 > bytestream2_get_bytes_left(&g)) {
> > @@ -91,8 +89,6 @@ int ff_flac_parse_picture(AVFormatContext *s,
> > uint8_t **bufp, int buf_size,
> >       if (id == AV_CODEC_ID_NONE) {
> >           av_log(s, AV_LOG_ERROR, "Unknown attached picture mimetype: %s.\n",
> >                  mimetype);
> > -        if (s->error_recognition & AV_EF_EXPLODE)
> > -            return AVERROR_INVALIDDATA;
> >           return 0;
> >       }
> >
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
Anton Khirnov Sept. 28, 2022, 2:17 p.m. UTC | #3
Quoting James Almer (2022-09-10 03:16:32)
> On 9/9/2022 7:44 PM, Will Cassella wrote:
> > In the case where the FLAC picture MIME type is not understood, fail to
> > parse the picture silently rather than return AVERROR_INVALIDDATA.
> > 
> > This originated from a bug reported in Chromium: https://crbug.com/1052821
> > 
> > Signed-off-by: Will Cassella <cassew@google.com>
> > ---
> >   libavformat/flac_picture.c | 4 ----
> >   1 file changed, 4 deletions(-)
> > 
> > diff --git a/libavformat/flac_picture.c b/libavformat/flac_picture.c
> > index b33fee75b4..1acad9b251 100644
> > --- a/libavformat/flac_picture.c
> > +++ b/libavformat/flac_picture.c
> > @@ -68,8 +68,6 @@ int ff_flac_parse_picture(AVFormatContext *s,
> > uint8_t **bufp, int buf_size,
> >       if (len <= 0 || len >= sizeof(mimetype)) {
> >           av_log(s, AV_LOG_ERROR, "Could not read mimetype from an attached "
> >                  "picture.\n");
> > -        if (s->error_recognition & AV_EF_EXPLODE)
> > -            return AVERROR_INVALIDDATA;
> 
> If you don't want to error out, then don't enable explode mode, which is 
> meant to abort on the slightest issue?

IMO failing to recognize the MIME type is a lavf error rather than a
file error and so should not fail, much less with AVERROR_INVALIDDATA
(should be ENOSYS if anything).

THe other error should stay though - then the file actually is broken.
Dale Curtis April 10, 2023, 5:54 p.m. UTC | #4
Will left Google, but I've updated the patch to only skip errors when the
type is unrecognized.

On Wed, Sep 28, 2022 at 7:17 AM Anton Khirnov <anton@khirnov.net> wrote:

> IMO failing to recognize the MIME type is a lavf error rather than a
> file error and so should not fail, much less with AVERROR_INVALIDDATA
> (should be ENOSYS if anything).
>
Dale Curtis March 27, 2024, 8:05 p.m. UTC | #5
Bump on this patch -- it still applies cleanly. We're still seeing files in
the wild like this.

- dale

On Mon, Apr 10, 2023 at 10:54 AM Dale Curtis <dalecurtis@chromium.org>
wrote:

> Will left Google, but I've updated the patch to only skip errors when the
> type is unrecognized.
>
> On Wed, Sep 28, 2022 at 7:17 AM Anton Khirnov <anton@khirnov.net> wrote:
>
>> IMO failing to recognize the MIME type is a lavf error rather than a
>> file error and so should not fail, much less with AVERROR_INVALIDDATA
>> (should be ENOSYS if anything).
>>
>
Michael Niedermayer March 28, 2024, 5:06 p.m. UTC | #6
On Wed, Mar 27, 2024 at 01:05:52PM -0700, Dale Curtis wrote:
> Bump on this patch -- it still applies cleanly. We're still seeing files in
> the wild like this.

will apply

thx

[...]
diff mbox series

Patch

diff --git a/libavformat/flac_picture.c b/libavformat/flac_picture.c
index b33fee75b4..1acad9b251 100644
--- a/libavformat/flac_picture.c
+++ b/libavformat/flac_picture.c
@@ -68,8 +68,6 @@  int ff_flac_parse_picture(AVFormatContext *s,
uint8_t **bufp, int buf_size,
     if (len <= 0 || len >= sizeof(mimetype)) {
         av_log(s, AV_LOG_ERROR, "Could not read mimetype from an attached "
                "picture.\n");
-        if (s->error_recognition & AV_EF_EXPLODE)
-            return AVERROR_INVALIDDATA;
         return 0;
     }