Andreas Rheinhardt <andreas.rheinha...@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.rheinha...@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-requ...@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-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to