From patchwork Fri Jan 12 22:50:07 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Colin NG X-Patchwork-Id: 7269 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.78.2 with SMTP id r2csp52930jaa; Fri, 12 Jan 2018 14:50:19 -0800 (PST) X-Google-Smtp-Source: ACJfBothTz6b4Xk5p9r1+GJNAAxBSsp3vNlRcQcI3j0M7QqBkwqrhLP2JLbevnGhXiKiCBXp38ln X-Received: by 10.223.169.213 with SMTP id b79mr9801438wrd.86.1515797419231; Fri, 12 Jan 2018 14:50:19 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1515797419; cv=none; d=google.com; s=arc-20160816; b=azP7yYObhw1i7jEFWBb8GFpwocgBV0f782wGQZ3V1XdIYR/KucNcdiH76pJruCuETh jwvSIDl0OVwUuUVN3KxvgAS7c/ufUdaTTMgX2IeNsGbAuo7paPjruugrW5C7BW3nGF10 WqvdDenKvZJiHLPxBcDVlCsFdo3l+c1XhXIuhviOVD8HzLaRzeqw/dmAcVDrX5Ly2pXq AQcg7DFJSLbRVxxpOE3p59Nre2csuu1pd9/WyBWOmS4UhYubW9lgWCMT6TX/ZNy7Po3I TgsT0NGDCEWeULDpyoou+C18a+Dr9rskNCXdFEpy5iSM8M2jQy8/OAXpp4A7TcfHUCWc GuXA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:spamdiagnosticmetadata :spamdiagnosticoutput:content-language:accept-language:message-id :date:thread-index:thread-topic:to:from:dkim-signature:delivered-to :arc-authentication-results; bh=18MTZBFjySk7kSIf/Q0cHytrN109Q8PiNF0AUBj9CXc=; b=YJKni+31F5MMoyCrqfT3wlBcNNahsNGlGRsFTswmwr2H02cccp1yX93u5TqEwD1RM9 UJuhETscSckmQiicVzZcN7lwOK++HcK6RE5YiOj0ugUeQ0ZsooHL5WzYHOofDEOSsKLO UsNZuR4V5mK8qTC/oOYRc7A8oCUWAXGdbjlECOlUHjFYbtYjetxvo2QehxiQvTwxBSV1 uWaRfC41ZnSqTFhUBx98M2UZm/wcUqL5JDfiecSoc2xETI9wAw5ecGw0GfEbap8t8aHu 1BGSDsERlDAsfjN5fkG8b40vpWrR1VtahAZ1pC35qd3pyQRNTOcrWuCkeUeOFTvK813z /yVw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@hotmail.com header.s=selector1 header.b=JJDP9wIz; 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 f30si6662079wrf.249.2018.01.12.14.50.18; Fri, 12 Jan 2018 14:50:19 -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=JJDP9wIz; 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 6592468A254; Sat, 13 Jan 2018 00:50:16 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from NAM02-CY1-obe.outbound.protection.outlook.com (mail-oln040092004088.outbound.protection.outlook.com [40.92.4.88]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0AADB689EB0 for ; Sat, 13 Jan 2018 00:50:10 +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=HDi4zzUJOtbqBeGXZQIXRwISWTQOKqsDQhHAx84aH/E=; b=JJDP9wIzBhDYbbXuyfkGRHGGwv6QYlyUzZxz988ftek3neBgxJ97W+RrAcKfh5M6bEvSTjZXW64ElVREzE3JOft3S8LQiRVA5yXOt+Vfl+6Qi5vJPRi6/0kFn3reMSAw4ocEqqFmObZLkgD+bdjoFkWsaFU2Nkj7LLiKavFRPRT6wKqwnj2YRdYF2vaxRP5rw7hA9MWaKf41mm6q2PAyUlISYJsECJE3yYSHn/kQ9oFjgWQQapmv/MLBFgKSJfPoqh2AgFDl1Gfd5512hAFu/Np5mZwYHVXttZUqIvOptJcVvXkq4NbxpQFicNPMC9OrK1NSMa2bhtJd0zZry52A/g== Received: from BL2NAM02FT039.eop-nam02.prod.protection.outlook.com (10.152.76.54) by BL2NAM02HT096.eop-nam02.prod.protection.outlook.com (10.152.77.59) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.20.345.12; Fri, 12 Jan 2018 22:50:08 +0000 Received: from DM5PR22MB0681.namprd22.prod.outlook.com (10.152.76.60) by BL2NAM02FT039.mail.protection.outlook.com (10.152.77.152) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.20.345.12 via Frontend Transport; Fri, 12 Jan 2018 22:50:08 +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.0386.008; Fri, 12 Jan 2018 22:50:08 +0000 From: Colin NG To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [PATCH] libavformat/dashdec: Fix for ticket 6856 (filename limited to 1024) Thread-Index: AQHTi/exuPZxRUh7f0mBUxq3xHl01A== Date: Fri, 12 Jan 2018 22:50:07 +0000 Message-ID: Accept-Language: en-CA, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-incomingtopheadermarker: OriginalChecksum:3240475A79E661E2F943BB9490DC79CEFE1870DA95F7A6E2BD8A817F4EE8B157; UpperCasedChecksum:ACB01B42006EF9474588A2575F3DB0927D86D24B7F38739ED508DD517773D65D; SizeAsReceived:6962; Count:45 x-ms-exchange-messagesentrepresentingtype: 1 x-tmn: [8D3UOmDsXyXpoe83gqQ8pQJizc2t+fWf] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; BL2NAM02HT096; 6:d6BzoRvwRSCyl4nBThPdsb7WG8Dr374jHX2SW209yjKlSSlsd93ByitphiMPRDejLp4PyJ6GEh9pOxQx8UGSKc0iTomPDm613o5hcKlZu5IkIhEGvDbL9tYzx2JjsyULQ3qqYbbxBw6rwoYtdeofzBD2ZPZrHhiUbrX05NvYNIRP9i/l5iwZo5RACqExin/Ce34nYQXRtlpwV2IL/jByco/V0cY0nVj0EzR9Dx4HETVbtddasUasVficOAPmmX1GlivRa9wMhtZcvFSWgY2kxPRikLXDnq+XXGKR3fGkI4cun6s65hpoMknHDbBeZ/ovLDQkMVIMA/SZGbk2cx76HZAQbLAtTrRL3M/V1GHI6Tk=; 5:7HDdHRVJIkffFQJTbu7esAUwqw5P3hrscyHd4FBFGRaqhF7L9shwAT70gKy7bmrq1fs2DFKrkhcTy3Bh/AcrX9wVKuWOfMvOulJ1L8bp+8jVsRF7JjHe4TJgCGe0q6bVvKdAV+tWE/RgWW4P24ov556tQxYcXGzlTYBdRAP971U=; 24:plRw1MgCC7JCu/RaAD/vsi5k91dL/eVjHDsootyfNMJ5AfnSVCaTd6JClJK7vRvsxgjUmUCjd8HJdCc+oqKXqhOazR7nbJ21T8Ohjg/Hdpg=; 7:aBmmlQ7vSZN7wHL8IBwH33oA+5b+0eBrJzqpHwWAyxm0bN3SL4ktIq9zNGabjMyW6/0tk6Vijt1IptxHEdHHbbBf4TiAGrJkZ9cy7qCZ0FRtIbBfZ0HnDZxBPmRFTuWURXox2lmRlZeX/2tVBJvLy6vYiCb2+LNVNm3qvIBJ+W7tqR8gIrBCmUQUV/nK1ALkgGuDGA4RAYgr9fyIfSgtDp3uy4OI+30WhusrAkDi1OqKV3IdLG/LV6IJXUQ6gSyi x-incomingheadercount: 45 x-eopattributedmessage: 0 x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020088)(201702061074)(5061506573)(5061507331)(1603103135)(2017031320274)(2017031324274)(2017031323274)(201702181274)(2017031322404)(1603101448)(1601125374)(1701031045); SRVR:BL2NAM02HT096; x-ms-exchange-slblob-mailprops: S/btQ8cKWiR6nMXE5xGBKGvrD7E1nO7PZRqBI6ySYauCAyh1q2WvbRqPMn/0gt4lSnVqdslPtpWOgl8+KWn4UxGdGRh5mwaWeHIYB7edF69OsoB6vI962JYTsglSocT0Lde+MCr6RzLTEJ6BkBk8T4osh2Y+71BmINNvZqy/fXVVixt5OSz2ShaX94HW6dT2KsqJ+9VSGmwK9QG6lH1d7UuHkOzzVCYyB4tux2Jmxal0PlBWOqKgwizGrn4U+5LQYHdoUHDkQGX1HAbC1pugBFs71cP2es3GDZEtN83kHL4U9XHLfaeHlyPlDc7t8HzSFgXYCUjlnHxq2m/9mJCRKKPBQuQfASUtPPwoNsdDyb8Stt85dM7Ym84jUs7occIW5/36Uz9bXx7WOadsF4y/GPNyirIlww2+Eo9XIViN/MyIXNqAk86CtbIXiKkup87dU/mdN7AxBk2PgY19vofmPUBIIHxsZjsgniacNtoh+/re8TGlFdp6NJSER0ebZRMLK/gyG1lBKNqddKnRvgQ+zfbpyAEV9wfhJQot7i9OjVaKIQVawVYg4Iew83gmkI5CXZ8c+70C2rFLRXu+18LGpiJwls3kHmh/X6sVfAGYZH+NfaQR3odf29vRKKSbDkFIfp/CMfUuFGmHOSW6RtDoBpFw4j2soFLOJExl2HMkTppFgREzbYUtmChaL9s+RZx3/rDwiMk1chfwRtZpvk7tbDiiAfKeNfQCkcO60ot0RR7UDkC7Rb1OZJ7k8FYosOkl75sI2LPvXaI= x-ms-traffictypediagnostic: BL2NAM02HT096: x-ms-office365-filtering-correlation-id: d68ac381-b2a9-4f5d-7eaa-08d55a0ed36c x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(444000031); SRVR:BL2NAM02HT096; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:BL2NAM02HT096; x-forefront-prvs: 0550778858 x-forefront-antispam-report: SFV:NSPM; SFS:(7070007)(98901004); DIR:OUT; SFP:1901; SCL:1; SRVR:BL2NAM02HT096; 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: d68ac381-b2a9-4f5d-7eaa-08d55a0ed36c X-MS-Exchange-CrossTenant-originalarrivaltime: 12 Jan 2018 22:50:07.9531 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Internet X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL2NAM02HT096 Subject: [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 Cc: Colin NG Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" --- 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);