Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
From: Steven Liu <lingjiujianke@gmail.com>
To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org>
Cc: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Subject: Re: [FFmpeg-devel] [PATCH 1/2] avformat/dashdec: Fix crash on invalid input/ENOMEM, fix leak
Date: Wed, 21 Sep 2022 14:03:34 +0800
Message-ID: <CADxeRw=ZQF=zwrRGT4ndsPr+34-CkE7cMCtR5=BBCDQUY1sd3Q@mail.gmail.com> (raw)
In-Reply-To: <GV1P250MB0737911CD13E56A939FA82E68F4C9@GV1P250MB0737.EURP250.PROD.OUTLOOK.COM>

Andreas Rheinhardt <andreas.rheinhardt@outlook.com> 于2022年9月21日周三 04:25写道:
>
> In case a SupplementalProperty node exists in an adaptationset,
> it is searched for a "schemeIdUri" property via xmlGetProp().
> Whatever xmlGetProp() returns is then compared via av_strcasecmp()
> to a string literal. xmlGetProp() can return NULL, namely in case
> no "schemeIdUri" exists and (given that this string is allocated)
> presumably also on allocation failure. No check for NULL is done,
> so this may crash.
>
> Furthermore, the string returned by xmlGetProp() needs to be freed
> with xmlFree(), but this is not done either.
>
> This commit fixes both of these issues; they existed since this code
> has been added in 10d008f0fd9e713e290f626300d66382ad786c49.
>
> This has been found while investigating ticket #9697. The continuous
> leaks might very well be the reason behind the observed slowdown.
>
> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
> ---
>  libavformat/dashdec.c | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/libavformat/dashdec.c b/libavformat/dashdec.c
> index 63bf7e96a5..2ca91bea8b 100644
> --- a/libavformat/dashdec.c
> +++ b/libavformat/dashdec.c
> @@ -956,7 +956,11 @@ static int parse_manifest_representation(AVFormatContext *s, const char *url,
>              xmlFree(val);
>          }
>          if (adaptionset_supplementalproperty_node) {
> -            if (!av_strcasecmp(xmlGetProp(adaptionset_supplementalproperty_node,"schemeIdUri"), "http://dashif.org/guidelines/last-segment-number")) {
> +            char *scheme_id_uri = xmlGetProp(adaptionset_supplementalproperty_node, "schemeIdUri");
> +            if (scheme_id_uri) {
> +                int is_last_segment_number = !av_strcasecmp(scheme_id_uri, "http://dashif.org/guidelines/last-segment-number");
> +                xmlFree(scheme_id_uri);
> +                if (is_last_segment_number) {
>                  val = xmlGetProp(adaptionset_supplementalproperty_node,"value");
>                  if (!val) {
>                      av_log(s, AV_LOG_ERROR, "Missing value attribute in adaptionset_supplementalproperty_node\n");
> @@ -965,6 +969,7 @@ static int parse_manifest_representation(AVFormatContext *s, const char *url,
>                      xmlFree(val);
>                  }
>              }
> +            }
>          }
>
>          fragment_timeline_node = find_child_node_by_name(representation_segmenttemplate_node, "SegmentTimeline");
> --
> 2.34.1
>
> _______________________________________________
> 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".


patchset lgtm


Thanks
Steven
_______________________________________________
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".

      parent reply	other threads:[~2022-09-21  6:03 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-20 20:25 Andreas Rheinhardt
2022-09-20 20:25 ` [FFmpeg-devel] [PATCH 2/2] avformat/dashdec: Reindent after the previous commit Andreas Rheinhardt
2022-09-21  6:03 ` Steven Liu [this message]

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='CADxeRw=ZQF=zwrRGT4ndsPr+34-CkE7cMCtR5=BBCDQUY1sd3Q@mail.gmail.com' \
    --to=lingjiujianke@gmail.com \
    --cc=andreas.rheinhardt@outlook.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