From patchwork Tue Jan 16 22:52:03 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Colin NG X-Patchwork-Id: 7299 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.78.2 with SMTP id r2csp4792806jaa; Tue, 16 Jan 2018 14:52:14 -0800 (PST) X-Google-Smtp-Source: ACJfBotqEfeB2PGtUlBFVbWmEjQNsn57Ct/xtudi/sLPtso55aMIuqVBwHs5z6McGc54MsfIO9UZ X-Received: by 10.223.135.2 with SMTP id a2mr635616wra.126.1516143134719; Tue, 16 Jan 2018 14:52:14 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1516143134; cv=none; d=google.com; s=arc-20160816; b=RUow694ZUXMIoZrSz4Ut/fTXv9lZftNXg8xYmhCaF3cP3KSjTuUXoW96N/CQnW72+i 1uEU32twUzS/McrXoYtsZ+OsbOOBtqTy4SQU+czUDaWc0lWz5ATb4aq1FrSNB7zDtdyD PAN/99363iwWm5aTuibFUqx+RndttBM2hQE+k9to7UEIzc7Ua/pNuzNkRyji8FJbTyBC 4y2/TXBXP1tS/666uYDN7Sbof4HV0rMf13T5yPWJwuztTG6EWPonti2KNcp5aqoXV1Gr iFQ4oW1YEnRuZD3BPgVnmDeUDP2sKtsm1H/7xuvjuFOrbDpkVii6hLAZJlgsbzutM+d3 O/uQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence:subject :mime-version:spamdiagnosticmetadata:spamdiagnosticoutput :content-language:accept-language:in-reply-to:references:message-id :date:thread-index:thread-topic:to:from:dkim-signature:delivered-to :arc-authentication-results; bh=bBKCkcBya7KF9UupMOQ3b16T2jljuL0vE/0j3NobG3w=; b=FUqgpzOmsBWZW/ZTKdUEzJnbPqApcv0VNMq7d/TwoXnf0Qgv5e0LioV7itdwuvYI1p OBLIiQ4xEz1m0Twk9FB5wCjNq8l9z9Y8bEirLnSbmln3X+8usG92fKuDpFfWY1J69Pot P8XpL1whxmcQYGSe1KvN3/QS1OQLn0HicDs79CZ7DHyssOarvCzE02fk4LY3sAy5s5Et WrvJ+22tg5q2f2F+Y/Y3pnCK8wnvUWp4+s7QAWMwH4roQuaDZkNYfiXLTwxwfFQhbZwA ENEaapzZDCwfjVvkblitv/gzNft6j00d5Qfd72CHXzxgB/OtdzAi90QwXU8hIEFKWVYL DHJw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@hotmail.com header.s=selector1 header.b=Ulu7F397; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=hotmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 62si2963627wrc.215.2018.01.16.14.52.14; Tue, 16 Jan 2018 14:52:14 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@hotmail.com header.s=selector1 header.b=Ulu7F397; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=hotmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C269E689AFD; Wed, 17 Jan 2018 00:52:10 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from NAM03-CO1-obe.outbound.protection.outlook.com (mail-oln040092007043.outbound.protection.outlook.com [40.92.7.43]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9FAA2689AB3 for ; Wed, 17 Jan 2018 00:52:03 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hotmail.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=hwxZkbs4m2tgKvRuDY9c4aK6/p8JKBdbWlFOUgNnuKU=; b=Ulu7F397odiYceFoRjg4vkqKw8ketDoKnYt76GgKde0mYHBgPxnYT7iVk1Efl7Z+mOfr6ev+IRpAUwrL6wlEFL1sw3DQI/Ka4I+hjY2zUlIpVK+qnCUa3N1r8xUG/IDghRfSTSL12F8hWg0sioKf9sOj0nE8EFr3mFHhl9LOAKK0jPBmBsKv71zLu8OW7wQXGUkk1u2cXMsRVHXx/gEJ5PLaTpPQUaum8iC03I5zVG8kQ9pVrtl3eWBDdn4HXkHCHuT7mUS4yLg0dCzsBUyrNxuLGxGTXoSit9U8lIEsVg/w2FjN/FC5hzHs07OSbj4JMvat6+mYYDQBKc/1M/uQuw== Received: from BY2NAM03FT062.eop-NAM03.prod.protection.outlook.com (10.152.84.53) by BY2NAM03HT111.eop-NAM03.prod.protection.outlook.com (10.152.84.166) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.345.19; Tue, 16 Jan 2018 22:52:03 +0000 Received: from DM5PR22MB0681.namprd22.prod.outlook.com (10.152.84.60) by BY2NAM03FT062.mail.protection.outlook.com (10.152.85.62) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.345.19 via Frontend Transport; Tue, 16 Jan 2018 22:52:03 +0000 Received: from DM5PR22MB0681.namprd22.prod.outlook.com ([10.172.189.151]) by DM5PR22MB0681.namprd22.prod.outlook.com ([10.172.189.151]) with mapi id 15.20.0407.012; Tue, 16 Jan 2018 22:52:03 +0000 From: Colin NG To: FFmpeg development discussions and patches Thread-Topic: [FFmpeg-devel] [PATCH] libavformat/dashdec: Fix for ticket 6856 (filename limited to 1024) Thread-Index: AQHTjMoxhHJsuwgcLEC7ZgxNQG5bf6N3GSlm Date: Tue, 16 Jan 2018 22:52:03 +0000 Message-ID: References: , <20180113235644.GY4926@michaelspb> In-Reply-To: <20180113235644.GY4926@michaelspb> Accept-Language: en-CA, en-US Content-Language: en-CA X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-incomingtopheadermarker: OriginalChecksum:09DA6A950866383323442A8C92F7853820F849E77BE2EFC9DE81125171EC9FD1; UpperCasedChecksum:C8C1E9C7D93E8FA1CADC3FF071C99833DEB4E0227AA1F135CBD62A8F53E9A7F2; SizeAsReceived:7159; Count:46 x-ms-exchange-messagesentrepresentingtype: 1 x-tmn: [KlzJlmxI6Q9+lstuo0yxfdaqnICL/QFP] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; BY2NAM03HT111; 6:8OGcPuNxz0N0tGd/0Oj5u0/00W9qJmPKpUUaPy3eeCaNphrQcL8APURuMa4fh8PzIYgEvy7sWYdlSURjU/MIdkL6vjuCj+9+Uk7AQ0Ro+n9J9KpRvOuopzO8jj/W6x6XDVcjQgrdQE3YP5dpHoRQO4l53R2N1agq03RfF1JArX7ySW8bbHs4LNrGMVbADD+GmbuRoTUv/zrm4p0flJw2ADrO7/85wRpIzPzspFXE7npo8ABmx4wEgWFQLgtL57GunTQG3Jc+bMT9esBfUmqstI1Gpv1YFBVpgDRQnecD5Wx9ZQmm3knADTef4e/JO+i/H8BKu31Qmvgoyy3Jz6If1Junsm8ocGr0A8PJxZEI4jI=; 5:ZcCMx/uberznpmLLXjDGBfN6KSepV7pl+EwRp33Q7Kory7cgom2UMIqTYXzjF1RzVf2L1/2UiIBv3c6akqJAuJk1eQ4IJeFSe0cOT+F3HQ/xcGnpJGS7iCWPo+iwh69UZ8b/Ptg26C98f4VLAvwHxgpYcbkbK52TNm1RMVbGiJA=; 24:XJglSe/16ys+grvCzda5J46wVmwtB1q3UtHGmiGitcjX4zRwXTPgVmUQkCnLKE2i2gVW+MuvbTIm8d9xYqQUHAe6vJkTlz3bQ/8Omvg/23w=; 7:cmvjKVoDbCMPny6Ho/vaaBjJ4zosMiSxEAP1UKmPX8qpTOws9TRrmfkFlfr+E5TSy4noYtaQhM6ybYoTo702S+khG1aaj+fXXdOtFDK7is9s5Hfd4Cs/tA4h6gbNIFKEJyDHkf0BK3TpjoUDgRrPJZ42kjnfCIRyTNcYg1VDz0YCAhhOjvwHVyfG9yxTZiyPQKIft07mzllzIe3MfbR9LROC89psiJQ8IJMIOAOYTiYPrSMKD2qfbdfRC+V3GQJJ x-incomingheadercount: 46 x-eopattributedmessage: 0 x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(201702061074)(5061506573)(5061507331)(1603103135)(2017031320274)(2017031324274)(2017031323274)(2017031322404)(1603101448)(1601125374)(1701031045); SRVR:BY2NAM03HT111; x-ms-traffictypediagnostic: BY2NAM03HT111: x-ms-office365-filtering-correlation-id: 8ab85da2-bcd3-4391-6d9d-08d55d33c2df x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(444000031); SRVR:BY2NAM03HT111; BCL:0; PCL:0; RULEID:(100000803126)(100110400120); SRVR:BY2NAM03HT111; x-forefront-prvs: 0554B1F54F x-forefront-antispam-report: SFV:NSPM; SFS:(7070007)(98901004); DIR:OUT; SFP:1901; SCL:1; SRVR:BY2NAM03HT111; H:DM5PR22MB0681.namprd22.prod.outlook.com; FPR:; SPF:None; LANG:; spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: hotmail.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8ab85da2-bcd3-4391-6d9d-08d55d33c2df X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Jan 2018 22:52:03.6305 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Internet X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2NAM03HT111 X-Content-Filtered-By: Mailman/MimeDel 2.1.20 Subject: Re: [FFmpeg-devel] [PATCH] libavformat/dashdec: Fix for ticket 6856 (filename limited to 1024) X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" O. I forgot to include on other patches the ticket 6856 fix depended on. Colin PS: the depended patches are 0001-libavformat-dashdec-Fix-for-ticket-6658-Dash-demuxer.patch 0001-Download-dash-content-with-byte-range-info.patch (not necessary for compilation but needed for the complete solution) From 2cae06348d0a1bb58eb8c05258d1430808b19e1a Mon Sep 17 00:00:00 2001 From: Colin Ng Date: Fri, 12 Jan 2018 14:43:04 -0800 Subject: [PATCH] libavformat/dashdec: Fix for ticket 6856 (filename limited to 1024) --- libavformat/dashdec.c | 87 +++++++++++++++++++++++++++++++++------------------ 1 file changed, 56 insertions(+), 31 deletions(-) diff --git a/libavformat/dashdec.c b/libavformat/dashdec.c index 5345f91..7316213 100644 --- a/libavformat/dashdec.c +++ b/libavformat/dashdec.c @@ -141,6 +141,7 @@ typedef struct DASHContext { char *headers; ///< holds HTTP headers set as an AVOption to the HTTP protocol context char *allowed_extensions; AVDictionary *avio_opts; + int max_url_size; } DASHContext; static uint64_t get_current_time_in_sec(void) @@ -153,6 +154,10 @@ static int ishttp(char *url) { return av_strstart(proto_name, "http", NULL); } +static int aligned(int val) { + return ((val + 0x3F) >> 6) << 6; +} + static uint64_t get_utc_date_time_insec(AVFormatContext *s, const char *datetime) { struct tm timeinfo; @@ -424,6 +429,7 @@ static int open_url(AVFormatContext *s, AVIOContext **pb, const char *url, static char *get_content_url(xmlNodePtr *baseurl_nodes, int n_baseurl_nodes, + int max_url_size, char *rep_id_val, char *rep_bandwidth_val, char *val) @@ -431,10 +437,13 @@ static char *get_content_url(xmlNodePtr *baseurl_nodes, int i; char *text; char *url = NULL; - char tmp_str[MAX_URL_SIZE]; - char tmp_str_2[MAX_URL_SIZE]; - memset(tmp_str, 0, sizeof(tmp_str)); + char *tmp_str = av_mallocz(max_url_size); + char *tmp_str_2 = av_mallocz(max_url_size); + + if (!tmp_str || !tmp_str_2) { + return NULL; + } for (i = 0; i < n_baseurl_nodes; ++i) { if (baseurl_nodes[i] && @@ -442,32 +451,35 @@ static char *get_content_url(xmlNodePtr *baseurl_nodes, baseurl_nodes[i]->children->type == XML_TEXT_NODE) { text = xmlNodeGetContent(baseurl_nodes[i]->children); if (text) { - memset(tmp_str, 0, sizeof(tmp_str)); - memset(tmp_str_2, 0, sizeof(tmp_str_2)); - ff_make_absolute_url(tmp_str_2, MAX_URL_SIZE, tmp_str, text); - av_strlcpy(tmp_str, tmp_str_2, sizeof(tmp_str)); + memset(tmp_str, 0, max_url_size); + memset(tmp_str_2, 0, max_url_size); + ff_make_absolute_url(tmp_str_2, max_url_size, tmp_str, text); + av_strlcpy(tmp_str, tmp_str_2, max_url_size); xmlFree(text); } } } if (val) - av_strlcat(tmp_str, (const char*)val, sizeof(tmp_str)); - + av_strlcat(tmp_str, (const char*)val, max_url_size); if (rep_id_val) { url = av_strireplace(tmp_str, "$RepresentationID$", (const char*)rep_id_val); if (!url) { - return NULL; + goto end; } - av_strlcpy(tmp_str, url, sizeof(tmp_str)); + av_strlcpy(tmp_str, url, max_url_size); av_free(url); } if (rep_bandwidth_val && tmp_str[0] != '\0') { url = av_strireplace(tmp_str, "$Bandwidth$", (const char*)rep_bandwidth_val); if (!url) { - return NULL; + goto end; } } + +end: + av_free(tmp_str); + av_free(tmp_str_2); return url; } @@ -540,7 +552,7 @@ static struct fragment * get_Fragment(char *range) char *str_end_offset; char *str_offset = av_strtok(range, "-", &str_end_offset); seg->url_offset = strtoll(str_offset, NULL, 10); - seg->size = strtoll(str_end_offset, NULL, 10) -seg->url_offset; + seg->size = strtoll(str_end_offset, NULL, 10) - seg->url_offset; } return seg; @@ -552,9 +564,11 @@ static int parse_manifest_segmenturlnode(AVFormatContext *s, struct representati char *rep_id_val, char *rep_bandwidth_val) { + DASHContext *c = s->priv_data; char *initialization_val = NULL; char *media_val = NULL; char *range_val = NULL; + int max_url_size = c ? c->max_url_size: MAX_URL_SIZE; if (!av_strcasecmp(fragmenturl_node->name, (const char *)"Initialization")) { initialization_val = xmlGetProp(fragmenturl_node, "sourceURL"); @@ -567,6 +581,7 @@ static int parse_manifest_segmenturlnode(AVFormatContext *s, struct representati return AVERROR(ENOMEM); } rep->init_section->url = get_content_url(baseurl_nodes, 4, + max_url_size, rep_id_val, rep_bandwidth_val, initialization_val); @@ -591,6 +606,7 @@ static int parse_manifest_segmenturlnode(AVFormatContext *s, struct representati return AVERROR(ENOMEM); } seg->url = get_content_url(baseurl_nodes, 4, + max_url_size, rep_id_val, rep_bandwidth_val, media_val); @@ -645,7 +661,7 @@ static int parse_manifest_segmenttimeline(AVFormatContext *s, struct representat return 0; } -static int resolve_content_path(AVFormatContext *s, const char *url, xmlNodePtr *baseurl_nodes, int n_baseurl_nodes) { +static int resolve_content_path(AVFormatContext *s, const char *url, int *max_url_size, xmlNodePtr *baseurl_nodes, int n_baseurl_nodes) { char *tmp_str = NULL; char *path = NULL; @@ -662,13 +678,13 @@ static int resolve_content_path(AVFormatContext *s, const char *url, xmlNodePtr int updated = 0; int size = 0; int i; - int max_url_size = strlen(url); + int tmp_max_url_size = strlen(url); for (i = n_baseurl_nodes-1; i >= 0 ; i--) { text = xmlNodeGetContent(baseurl_nodes[i]); if (!text) continue; - max_url_size += strlen(text); + tmp_max_url_size += strlen(text); if (ishttp(text)) { xmlFree(text); break; @@ -676,7 +692,8 @@ static int resolve_content_path(AVFormatContext *s, const char *url, xmlNodePtr xmlFree(text); } - text = av_mallocz(max_url_size); + tmp_max_url_size = aligned(tmp_max_url_size); + text = av_mallocz(tmp_max_url_size); if (!text) { updated = AVERROR(ENOMEM); goto end; @@ -686,8 +703,8 @@ static int resolve_content_path(AVFormatContext *s, const char *url, xmlNodePtr size = strlen(mpdName); } - path = av_mallocz(max_url_size); - tmp_str = av_mallocz(max_url_size); + path = av_mallocz(tmp_max_url_size); + tmp_str = av_mallocz(tmp_max_url_size); if (!tmp_str || !path) { updated = AVERROR(ENOMEM); goto end; @@ -708,6 +725,7 @@ static int resolve_content_path(AVFormatContext *s, const char *url, xmlNodePtr root_url = (av_strcasecmp(baseurl, "")) ? baseurl : path; if (node) { xmlNodeSetContent(node, root_url); + updated = 1; } size = strlen(root_url); @@ -729,7 +747,7 @@ static int resolve_content_path(AVFormatContext *s, const char *url, xmlNodePtr av_strlcpy(tmp_str, root_url, size + 1); } start = (text[0] == token); - av_strlcat(tmp_str, text + start, max_url_size); + av_strlcat(tmp_str, text + start, tmp_max_url_size); xmlNodeSetContent(baseurl_nodes[i], tmp_str); updated = 1; xmlFree(text); @@ -737,6 +755,9 @@ static int resolve_content_path(AVFormatContext *s, const char *url, xmlNodePtr } end: + if (tmp_max_url_size > *max_url_size) { + *max_url_size = tmp_max_url_size; + } av_free(path); av_free(tmp_str); return updated; @@ -801,7 +822,8 @@ static int parse_manifest_representation(AVFormatContext *s, const char *url, baseurl_nodes[2] = adaptionset_baseurl_node; baseurl_nodes[3] = representation_baseurl_node; - ret = resolve_content_path(s, url, baseurl_nodes, 4); + ret = resolve_content_path(s, url, &c->max_url_size, baseurl_nodes, 4); + c->max_url_size = aligned(c->max_url_size + strlen(rep_id_val) + strlen(rep_bandwidth_val)); if (ret == AVERROR(ENOMEM) || ret == 0) { goto end; } @@ -825,7 +847,8 @@ static int parse_manifest_representation(AVFormatContext *s, const char *url, ret = AVERROR(ENOMEM); goto end; } - rep->init_section->url = get_content_url(baseurl_nodes, 4, rep_id_val, rep_bandwidth_val, initialization_val); + c->max_url_size = aligned(c->max_url_size + strlen(initialization_val)); + rep->init_section->url = get_content_url(baseurl_nodes, 4, c->max_url_size, rep_id_val, rep_bandwidth_val, initialization_val); if (!rep->init_section->url) { av_free(rep->init_section); av_free(rep); @@ -837,7 +860,8 @@ static int parse_manifest_representation(AVFormatContext *s, const char *url, } if (media_val) { - rep->url_template = get_content_url(baseurl_nodes, 4, rep_id_val, rep_bandwidth_val, media_val); + c->max_url_size = aligned(c->max_url_size + strlen(media_val)); + rep->url_template = get_content_url(baseurl_nodes, 4, c->max_url_size, rep_id_val, rep_bandwidth_val, media_val); xmlFree(media_val); } @@ -878,7 +902,7 @@ static int parse_manifest_representation(AVFormatContext *s, const char *url, ret = AVERROR(ENOMEM); goto end; } - seg->url = get_content_url(baseurl_nodes, 4, rep_id_val, rep_bandwidth_val, NULL); + seg->url = get_content_url(baseurl_nodes, 4, c->max_url_size, rep_id_val, rep_bandwidth_val, NULL); if (!seg->url) { av_free(seg); ret = AVERROR(ENOMEM); @@ -1384,19 +1408,19 @@ static struct fragment *get_current_fragment(struct representation *pls) } } if (seg) { - char tmpfilename[MAX_URL_SIZE]; - - ff_dash_fill_tmpl_params(tmpfilename, sizeof(tmpfilename), pls->url_template, 0, pls->cur_seq_no, 0, get_segment_start_time_based_on_timeline(pls, pls->cur_seq_no)); + char *tmpfilename= av_mallocz(c->max_url_size); + ff_dash_fill_tmpl_params(tmpfilename, c->max_url_size, pls->url_template, 0, pls->cur_seq_no, 0, get_segment_start_time_based_on_timeline(pls, pls->cur_seq_no)); seg->url = av_strireplace(pls->url_template, pls->url_template, tmpfilename); if (!seg->url) { av_log(pls->parent, AV_LOG_WARNING, "Unable to resolve template url '%s', try to use origin template\n", pls->url_template); seg->url = av_strdup(pls->url_template); if (!seg->url) { av_log(pls->parent, AV_LOG_ERROR, "Cannot resolve template url '%s'\n", pls->url_template); + av_free(tmpfilename); return NULL; } } - + av_free(tmpfilename); seg->size = -1; } @@ -1436,7 +1460,7 @@ static int read_from_url(struct representation *pls, struct fragment *seg, static int open_input(DASHContext *c, struct representation *pls, struct fragment *seg) { AVDictionary *opts = NULL; - char url[MAX_URL_SIZE]; + char *url = av_mallocz(c->max_url_size); int ret; set_httpheader_options(c, &opts); @@ -1447,7 +1471,7 @@ static int open_input(DASHContext *c, struct representation *pls, struct fragmen av_dict_set_int(&opts, "end_offset", seg->url_offset + seg->size, 0); } - ff_make_absolute_url(url, MAX_URL_SIZE, c->base_url, seg->url); + ff_make_absolute_url(url, c->max_url_size, c->base_url, seg->url); av_log(pls->parent, AV_LOG_VERBOSE, "DASH request for url '%s', offset %"PRId64", playlist %d\n", url, seg->url_offset, pls->rep_idx); ret = open_url(pls->parent, &pls->input, url, c->avio_opts, opts, NULL); @@ -1456,6 +1480,7 @@ static int open_input(DASHContext *c, struct representation *pls, struct fragmen } cleanup: + av_free(url); av_dict_free(&opts); pls->cur_seg_offset = 0; pls->cur_seg_size = seg->size; @@ -1839,7 +1864,7 @@ static int dash_close(AVFormatContext *s) if (c->cur_video) { free_representation(c->cur_video); } - + c->max_url_size = 0; av_freep(&c->cookies); av_freep(&c->user_agent); av_dict_free(&c->avio_opts); -- 2.7.4