[FFmpeg-devel] [PATCH] fix memory leak of parsing dash MPD

Steven Liu lq at chinaffmpeg.org
Thu Apr 26 08:17:29 EEST 2018



> On 20 Apr 2018, at 11:33, Steven Liu <lq at chinaffmpeg.org> wrote:
> 
> 
> 
>> On 19 Apr 2018, at 20:28, guikunzhi <guikunzhi at 163.com> wrote:
>> 
>> Signed-off-by: guikunzhi <guikunzhi at 163.com>
>> ---
>> libavformat/dashdec.c | 14 +++++++++++---
>> 1 file changed, 11 insertions(+), 3 deletions(-)
>> 
>> diff --git a/libavformat/dashdec.c b/libavformat/dashdec.c
>> index 6304ad933b..b9f1a40dfe 100644
>> --- a/libavformat/dashdec.c
>> +++ b/libavformat/dashdec.c
>> @@ -706,6 +706,7 @@ static int resolve_content_path(AVFormatContext *s, const char *url, int *max_ur
>>    char *baseurl = NULL;
>>    char *root_url = NULL;
>>    char *text = NULL;
>> +    char *tmp = NULL;
>> 
>>    int isRootHttp = 0;
>>    char token ='/';
>> @@ -735,9 +736,11 @@ static int resolve_content_path(AVFormatContext *s, const char *url, int *max_ur
>>        goto end;
>>    }
>>    av_strlcpy(text, url, strlen(url)+1);
>> -    while (mpdName = av_strtok(text, "/", &text))  {
>> +    tmp = text;
>> +    while (mpdName = av_strtok(tmp, "/", &tmp))  {
>>        size = strlen(mpdName);
>>    }
>> +    av_free(text);
>> 
>>    path = av_mallocz(tmp_max_url_size);
>>    tmp_str = av_mallocz(tmp_max_url_size);
>> @@ -796,6 +799,7 @@ end:
>>    }
>>    av_free(path);
>>    av_free(tmp_str);
>> +    xmlFree(baseurl);
>>    return updated;
>> 
>> }
>> @@ -1121,6 +1125,7 @@ static int parse_manifest(AVFormatContext *s, const char *url, AVIOContext *in)
>>    xmlNodePtr root_element = NULL;
>>    xmlNodePtr node = NULL;
>>    xmlNodePtr period_node = NULL;
>> +    xmlNodePtr tmp_node = NULL;
>>    xmlNodePtr mpd_baseurl_node = NULL;
>>    xmlNodePtr period_baseurl_node = NULL;
>>    xmlNodePtr period_segmenttemplate_node = NULL;
>> @@ -1215,8 +1220,10 @@ static int parse_manifest(AVFormatContext *s, const char *url, AVIOContext *in)
>>            xmlFree(val);
>>        }
>> 
>> -        mpd_baseurl_node = find_child_node_by_name(node, "BaseURL");
>> -        if (!mpd_baseurl_node) {
>> +        tmp_node = find_child_node_by_name(node, "BaseURL");
>> +        if (tmp_node) {
>> +            mpd_baseurl_node = xmlCopyNode(tmp_node,1);
>> +        } else {
>>            mpd_baseurl_node = xmlNewNode(NULL, "BaseURL");
>>        }
>> 
>> @@ -1270,6 +1277,7 @@ cleanup:
>>        /*free the document */
>>        xmlFreeDoc(doc);
>>        xmlCleanupParser();
>> +        xmlFreeNode(mpd_baseurl_node);
>>    }
>> 
>>    av_free(new_url);
>> -- 
>> 2.14.3 (Apple Git-98)
>> 
>> 
> 
> LGTM

Applied!

Thanks
Steven







More information about the ffmpeg-devel mailing list