Browse Source

fix memory leak of parsing dash MPD

Signed-off-by: guikunzhi <guikunzhi@163.com>
tags/n4.1
guikunzhi Steven Liu 7 years ago
parent
commit
8ea8be5951
1 changed files with 11 additions and 3 deletions
  1. +11
    -3
      libavformat/dashdec.c

+ 11
- 3
libavformat/dashdec.c View File

@@ -706,6 +706,7 @@ static int resolve_content_path(AVFormatContext *s, const char *url, int *max_ur
char *baseurl = NULL; char *baseurl = NULL;
char *root_url = NULL; char *root_url = NULL;
char *text = NULL; char *text = NULL;
char *tmp = NULL;


int isRootHttp = 0; int isRootHttp = 0;
char token ='/'; char token ='/';
@@ -735,9 +736,11 @@ static int resolve_content_path(AVFormatContext *s, const char *url, int *max_ur
goto end; goto end;
} }
av_strlcpy(text, url, strlen(url)+1); av_strlcpy(text, url, strlen(url)+1);
while (mpdName = av_strtok(text, "/", &text)) {
tmp = text;
while (mpdName = av_strtok(tmp, "/", &tmp)) {
size = strlen(mpdName); size = strlen(mpdName);
} }
av_free(text);


path = av_mallocz(tmp_max_url_size); path = av_mallocz(tmp_max_url_size);
tmp_str = av_mallocz(tmp_max_url_size); tmp_str = av_mallocz(tmp_max_url_size);
@@ -796,6 +799,7 @@ end:
} }
av_free(path); av_free(path);
av_free(tmp_str); av_free(tmp_str);
xmlFree(baseurl);
return updated; return updated;


} }
@@ -1121,6 +1125,7 @@ static int parse_manifest(AVFormatContext *s, const char *url, AVIOContext *in)
xmlNodePtr root_element = NULL; xmlNodePtr root_element = NULL;
xmlNodePtr node = NULL; xmlNodePtr node = NULL;
xmlNodePtr period_node = NULL; xmlNodePtr period_node = NULL;
xmlNodePtr tmp_node = NULL;
xmlNodePtr mpd_baseurl_node = NULL; xmlNodePtr mpd_baseurl_node = NULL;
xmlNodePtr period_baseurl_node = NULL; xmlNodePtr period_baseurl_node = NULL;
xmlNodePtr period_segmenttemplate_node = NULL; xmlNodePtr period_segmenttemplate_node = NULL;
@@ -1215,8 +1220,10 @@ static int parse_manifest(AVFormatContext *s, const char *url, AVIOContext *in)
xmlFree(val); 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"); mpd_baseurl_node = xmlNewNode(NULL, "BaseURL");
} }


@@ -1270,6 +1277,7 @@ cleanup:
/*free the document */ /*free the document */
xmlFreeDoc(doc); xmlFreeDoc(doc);
xmlCleanupParser(); xmlCleanupParser();
xmlFreeNode(mpd_baseurl_node);
} }


av_free(new_url); av_free(new_url);


Loading…
Cancel
Save