From: Soft Works <softworkz@hotmail.com> To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org> Subject: Re: [FFmpeg-devel] [PATCH v2 01/11] libavformat/asf: fix handling of byte array length values Date: Sun, 8 May 2022 02:27:46 +0000 Message-ID: <DM8P223MB0365C28678AA647B3A84C61CBAC79@DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM> (raw) In-Reply-To: <20220507184833.GI396728@pb2> > -----Original Message----- > From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of > Michael Niedermayer > Sent: Saturday, May 7, 2022 8:49 PM > To: FFmpeg development discussions and patches <ffmpeg- > devel@ffmpeg.org> > Subject: Re: [FFmpeg-devel] [PATCH v2 01/11] libavformat/asf: fix > handling of byte array length values > > On Sat, May 07, 2022 at 09:36:34AM +0000, softworkz wrote: > > From: softworkz <softworkz@hotmail.com> > > > > The spec allows attachment sizes of up to UINT32_MAX while > > we can handle only sizes up to INT32_MAX (in downstream > > code) > > > > The debug.assert in get_tag didn't really address this, > > and truncating the value_len in calling methods cannot > > be used because the length value is required in order to > > continue parsing. This adds a check with log message in > > ff_asf_handle_byte_array to handle those (rare) cases. > > > > Signed-off-by: softworkz <softworkz@hotmail.com> > > --- > > libavformat/asf.c | 12 +++++++++--- > > libavformat/asf.h | 2 +- > > 2 files changed, 10 insertions(+), 4 deletions(-) > > > > diff --git a/libavformat/asf.c b/libavformat/asf.c > > index 1ac8b5f078..179b66a2b4 100644 > > --- a/libavformat/asf.c > > +++ b/libavformat/asf.c > > @@ -267,12 +267,18 @@ static int get_id3_tag(AVFormatContext *s, int > len) > > } > > > > int ff_asf_handle_byte_array(AVFormatContext *s, const char *name, > > - int val_len) > > + uint32_t val_len) > > { > > + if (val_len > INT32_MAX) { > > + av_log(s, AV_LOG_VERBOSE, "Unable to handle byte arrays > > INT32_MAX in tag %s.\n", name); > > + return 1; > > + } > > + > > > if (!strcmp(name, "WM/Picture")) // handle cover art > > - return asf_read_picture(s, val_len); > > + return asf_read_picture(s, (int)val_len); > > else if (!strcmp(name, "ID3")) // handle ID3 tag > > - return get_id3_tag(s, val_len); > > + return get_id3_tag(s, (int)val_len); > > unneeded Hi Michael, thanks a lot for reviewing! I think we had talked about this a while ago. From my point of view, that explicit cast to int, tells me, every other reader of the code as well as any static analysis or linting tools that the developer has been aware of the data type mismatch between supplied variable and the parameter type and that the conversion is intended rather than accidental. But I don't want to insist - I have removed it. > > > > + av_log(s, AV_LOG_VERBOSE, "Unsupported byte array in tag > %s.\n", name); > > Probably this should be DEBUG The problem with DEBUG is that some components are spitting out so many lines with log level DEBUG that you'd hardly ever see it unless you'd explicitly search for that exact line, while that line is rather of the kind that you don't expect it. I've changed it to DEBUG, though. > > if (!strcmp(name, "AspectRatioX")){ > > - int aspect_x = get_value(s->pb, value_type, 16); > > + const uint64_t aspect_x = get_value(s->pb, value_type, > 16); > > + if (aspect_x > INT32_MAX) { > > + av_log(s, AV_LOG_DEBUG, "Unsupported AspectRatioX > value: %"PRIu64"\n", aspect_x); > > + return AVERROR(ENOTSUP); > > + } > > if(stream_num < 128) > > - asf->dar[stream_num].num = aspect_x; > > + asf->dar[stream_num].num = (int)aspect_x; > > } else if(!strcmp(name, "AspectRatioY")){ > > - int aspect_y = get_value(s->pb, value_type, 16); > > + const uint64_t aspect_y = get_value(s->pb, value_type, > 16); > > + if (aspect_y > INT32_MAX) { > > + av_log(s, AV_LOG_DEBUG, "Unsupported AspectRatioY > value: %"PRIu64"\n", aspect_y); > > + return AVERROR(ENOTSUP); > > + } > > if(stream_num < 128) > > - asf->dar[stream_num].den = aspect_y; > > + asf->dar[stream_num].den = (int)aspect_y; > > } else { > > If you go to the length to do something with oddly huge aspect > components > maybe change dar to 2 uint64_t and check it in one place instead of 2 > also the av_reduce() can handle a wider range than int32 Good idea, didn't know that av_reduce() can take larger numbers. Done. Thanks again, softworkz _______________________________________________ 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".
next prev parent reply other threads:[~2022-05-08 2:27 UTC|newest] Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-12-22 15:13 [PATCH 00/11] " ffmpegagent 2021-12-22 15:13 ` [PATCH 01/11] " ffmpegagent 2021-12-22 15:13 ` [PATCH 02/11] libavformat/asfdec: fix get_value return type and add checks for ffmpegagent 2021-12-22 15:13 ` [PATCH 03/11] libavformat/asfdec: fix type of value_len ffmpegagent 2021-12-22 15:13 ` [PATCH 04/11] libavformat/asfdec: fixing get_tag ffmpegagent 2021-12-22 15:13 ` [PATCH 05/11] libavformat/asfdec: implement parsing of GUID values ffmpegagent 2021-12-22 15:13 ` [PATCH 06/11] libavformat/asfdec: remove unused parameters ffmpegagent 2021-12-22 18:16 ` Soft Works 2021-12-22 15:13 ` [PATCH 07/11] libavformat/asfdec: fix macro definition and use ffmpegagent 2021-12-22 16:23 ` Soft Works 2021-12-22 15:13 ` [PATCH 08/11] libavformat/asfdec: remove variable redefinition in inner scope ffmpegagent 2021-12-22 15:13 ` [PATCH 09/11] libavformat/asfdec: ensure variables are initialized ffmpegagent 2021-12-22 15:13 ` [PATCH 10/11] libavformat/asfdec: fix parameter type in asf_read_stream_propertie() ffmpegagent 2021-12-22 15:13 ` [PATCH 11/11] libavformat/asfdec: fix variable types and add checks for unsupported values ffmpegagent 2022-05-07 9:36 ` [FFmpeg-devel] [PATCH v2 00/11] libavformat/asf: fix handling of byte array length values ffmpegagent 2022-05-07 9:36 ` [FFmpeg-devel] [PATCH v2 01/11] " softworkz 2022-05-07 18:48 ` Michael Niedermayer 2022-05-08 2:27 ` Soft Works [this message] 2022-05-07 9:36 ` [FFmpeg-devel] [PATCH v2 02/11] libavformat/asfdec: fix get_value return type and add checks for softworkz 2022-05-07 18:57 ` Michael Niedermayer 2022-05-07 9:36 ` [FFmpeg-devel] [PATCH v2 03/11] libavformat/asfdec: fix type of value_len softworkz 2022-05-07 9:36 ` [FFmpeg-devel] [PATCH v2 04/11] libavformat/asfdec: fixing get_tag softworkz 2022-05-07 9:36 ` [FFmpeg-devel] [PATCH v2 05/11] libavformat/asfdec: implement parsing of GUID values softworkz 2022-05-07 9:36 ` [FFmpeg-devel] [PATCH v2 06/11] libavformat/asfdec: remove unused parameters softworkz 2022-05-07 9:36 ` [FFmpeg-devel] [PATCH v2 07/11] libavformat/asfdec: fix macro definition and use softworkz 2022-05-07 9:36 ` [FFmpeg-devel] [PATCH v2 08/11] libavformat/asfdec: remove variable redefinition in inner scope softworkz 2022-05-07 9:36 ` [FFmpeg-devel] [PATCH v2 09/11] libavformat/asfdec: ensure variables are initialized softworkz 2022-05-07 9:36 ` [FFmpeg-devel] [PATCH v2 10/11] libavformat/asfdec: fix parameter type in asf_read_stream_propertie() softworkz 2022-05-07 9:36 ` [FFmpeg-devel] [PATCH v2 11/11] libavformat/asfdec: fix variable types and add checks for unsupported values softworkz 2022-05-08 3:01 ` [FFmpeg-devel] [PATCH v3 00/11] libavformat/asf: fix handling of byte array length values ffmpegagent 2022-05-08 3:01 ` [FFmpeg-devel] [PATCH v3 01/11] " softworkz 2022-05-08 3:01 ` [FFmpeg-devel] [PATCH v3 02/11] libavformat/asfdec: fix get_value return type and add checks for softworkz 2022-05-08 3:01 ` [FFmpeg-devel] [PATCH v3 03/11] libavformat/asfdec: fix type of value_len softworkz 2022-05-08 3:01 ` [FFmpeg-devel] [PATCH v3 04/11] libavformat/asfdec: fixing get_tag softworkz 2022-05-08 3:01 ` [FFmpeg-devel] [PATCH v3 05/11] libavformat/asfdec: implement parsing of GUID values softworkz 2022-05-08 3:01 ` [FFmpeg-devel] [PATCH v3 06/11] libavformat/asfdec: remove unused parameters softworkz 2022-05-08 18:50 ` Michael Niedermayer 2022-05-08 3:01 ` [FFmpeg-devel] [PATCH v3 07/11] libavformat/asfdec: fix macro definition and use softworkz 2022-05-08 3:01 ` [FFmpeg-devel] [PATCH v3 08/11] libavformat/asfdec: remove variable redefinition in inner scope softworkz 2022-05-08 3:01 ` [FFmpeg-devel] [PATCH v3 09/11] libavformat/asfdec: ensure variables are initialized softworkz 2022-05-08 3:01 ` [FFmpeg-devel] [PATCH v3 10/11] libavformat/asfdec: fix parameter type in asf_read_stream_propertie() softworkz 2022-05-08 3:01 ` [FFmpeg-devel] [PATCH v3 11/11] libavformat/asfdec: fix variable types and add checks for unsupported values softworkz 2022-05-14 20:55 ` [FFmpeg-devel] [PATCH v4 00/10] libavformat/asf: fix handling of byte array length values ffmpegagent 2022-05-14 20:55 ` [FFmpeg-devel] [PATCH v4 01/10] " softworkz 2022-05-14 20:55 ` [FFmpeg-devel] [PATCH v4 02/10] libavformat/asfdec: fix get_value return type and add checks for softworkz 2022-05-14 20:55 ` [FFmpeg-devel] [PATCH v4 03/10] libavformat/asfdec: fix type of value_len softworkz 2022-05-14 20:55 ` [FFmpeg-devel] [PATCH v4 04/10] libavformat/asfdec: fixing get_tag softworkz 2022-05-14 20:55 ` [FFmpeg-devel] [PATCH v4 05/10] libavformat/asfdec: implement parsing of GUID values softworkz 2022-05-14 20:55 ` [FFmpeg-devel] [PATCH v4 06/10] libavformat/asfdec: fix macro definition and use softworkz 2022-05-15 18:12 ` Andreas Rheinhardt 2022-05-15 22:51 ` Soft Works 2022-05-16 8:48 ` Andreas Rheinhardt 2022-05-16 22:03 ` Soft Works 2022-05-14 20:55 ` [FFmpeg-devel] [PATCH v4 07/10] libavformat/asfdec: remove variable redefinition in inner scope softworkz 2022-05-14 20:55 ` [FFmpeg-devel] [PATCH v4 08/10] libavformat/asfdec: ensure variables are initialized softworkz 2022-05-14 20:55 ` [FFmpeg-devel] [PATCH v4 09/10] libavformat/asfdec: fix parameter type in asf_read_stream_propertie() softworkz 2022-05-14 20:55 ` [FFmpeg-devel] [PATCH v4 10/10] libavformat/asfdec: fix variable types and add checks for unsupported values softworkz 2022-05-21 5:21 ` [FFmpeg-devel] [PATCH v5 00/10] libavformat/asf: fix handling of byte array length values ffmpegagent 2022-05-21 5:21 ` [FFmpeg-devel] [PATCH v5 01/10] " softworkz 2022-05-21 5:21 ` [FFmpeg-devel] [PATCH v5 02/10] libavformat/asfdec: fix get_value return type and add checks for softworkz 2022-05-21 5:21 ` [FFmpeg-devel] [PATCH v5 03/10] libavformat/asfdec: fix type of value_len softworkz 2022-05-21 5:21 ` [FFmpeg-devel] [PATCH v5 04/10] libavformat/asfdec: fixing get_tag softworkz 2022-05-21 5:21 ` [FFmpeg-devel] [PATCH v5 05/10] libavformat/asfdec: implement parsing of GUID values softworkz 2022-05-21 5:21 ` [FFmpeg-devel] [PATCH v5 06/10] libavformat/asfdec: avoid clang warnings softworkz 2022-05-21 5:21 ` [FFmpeg-devel] [PATCH v5 07/10] libavformat/asfdec: remove variable redefinition in inner scope softworkz 2022-05-21 5:21 ` [FFmpeg-devel] [PATCH v5 08/10] libavformat/asfdec: ensure variables are initialized softworkz 2022-05-21 5:21 ` [FFmpeg-devel] [PATCH v5 09/10] libavformat/asfdec: fix parameter type in asf_read_stream_propertie() softworkz 2022-05-21 5:21 ` [FFmpeg-devel] [PATCH v5 10/10] libavformat/asfdec: fix variable types and add checks for unsupported values softworkz
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=DM8P223MB0365C28678AA647B3A84C61CBAC79@DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM \ --to=softworkz@hotmail.com \ --cc=ffmpeg-devel@ffmpeg.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel This inbox may be cloned and mirrored by anyone: git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \ ffmpegdev@gitmailbox.com public-inbox-index ffmpegdev Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git