[FFmpeg-devel] [PATCH 2/2] avcodec/mjpegdec: silently ignore APPx stubs
Anton Khirnov
anton at khirnov.net
Tue Nov 26 12:56:28 EET 2024
Quoting Ramiro Polla (2024-10-22 11:25:58)
> On Mon, Oct 21, 2024 at 1:41 AM Michael Niedermayer
> <michael at niedermayer.cc> wrote:
> > On Thu, Oct 17, 2024 at 01:00:12PM +0200, Ramiro Polla wrote:
> > > Consider APPx fields that are too short to contain an id field (32-bit)
> > > as stubs, and silently ignore them.
> > >
> > > This has been seen in the MJPEG output from some webcams (such as the
> > > Logitech C270 and C920) and the JPEG images embedded in DNG images
> > > from the Pentax K-1 camera.
> > > ---
> > > libavcodec/mjpegdec.c | 20 +++++++++++---------
> > > 1 file changed, 11 insertions(+), 9 deletions(-)
> > >
> > > diff --git a/libavcodec/mjpegdec.c b/libavcodec/mjpegdec.c
> > > index a775fdca30..3cd9904595 100644
> > > --- a/libavcodec/mjpegdec.c
> > > +++ b/libavcodec/mjpegdec.c
> > > @@ -1856,20 +1856,22 @@ static int mjpeg_decode_app(MJpegDecodeContext *s)
> > > int len, id, i;
> > >
> > > len = get_bits(&s->gb, 16);
> > > - if (len < 6) {
> > > - if (s->bayer) {
> > > - // Pentax K-1 (digital camera) JPEG images embedded in DNG images contain unknown APP0 markers
> > > - av_log(s->avctx, AV_LOG_WARNING, "skipping APPx (len=%"PRId32") for bayer-encoded image\n", len);
> > > - skip_bits(&s->gb, len);
> > > - return 0;
> > > - } else
> > > - return AVERROR_INVALIDDATA;
> > > + if (len < 2)
> > > + return AVERROR_INVALIDDATA;
> > > + len -= 2;
> > > +
> > > + if (len < 4) {
> > > + /* Silently ignore APPx stubs */
> > > + if (show_bits(&s->gb, 8 * len) == 0)
> > > + goto out;
> > > + return AVERROR_INVALIDDATA;
> >
> > this silently errors on the ones it doesnt ignore, it was more informative
> > before
>
> It still prints the error message after returning AVERROR_INVALIDDATA
> from mjpeg_decode_app():
> [mjpeg @ 0x7fc4a0002dc0] unable to decode APP fields: Invalid data
> found when processing input
>
> I could also add another verbose log before "goto out" to
> not-so-silently ignore the APPx stubs if you want.
The best approach IMO is to check for AV_EF_EXPLODE and error out if
it's set.
--
Anton Khirnov
More information about the ffmpeg-devel
mailing list