From patchwork Wed Jan 17 03:02:29 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Colin NG X-Patchwork-Id: 7308 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.78.2 with SMTP id r2csp5003709jaa; Tue, 16 Jan 2018 19:02:40 -0800 (PST) X-Google-Smtp-Source: ACJfBovZTXB7vVyTlg5Z68OWa2x1LqvE8p69yo9okYody9vbl6igbeOXdL85VVy5mfgFpElaztMW X-Received: by 10.223.160.231 with SMTP id n36mr1172415wrn.82.1516158160460; Tue, 16 Jan 2018 19:02:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1516158160; cv=none; d=google.com; s=arc-20160816; b=zXWVursXcN8b2lLKV+260qlE9aTIhpxPW6pnsWag/7YwyhiSkp+0pK+zOtmFzU0GxP cui/Ij8o0naSowf/teYGh9wjFqlhuZU6gMd0h/O/BmPXmLMTJxXAEBkyip0k0Sjr5hCZ Eyu/3VrZ+wxJuYkz+3oujB1wiQIFPhyyDqMddt38uSXGn7XPsJkxx7XZIEod9OMNDlKH aQrcD9/mxl4sk4v9f4qgbvgLsl6vTqx4aDuKy0ARgGYanPphM78XfzOLUUMekkSWqzF3 8KCTcg6jXiG2CDymVwrHyMiDZMY+uqQ+9RmOMWmp1M5uxwKoRoXVa2AJyXUU2zUKj/WB 9dVA== 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=XS6aRvgK3/DSBvHGiGWYngRyZBXnW4qaoTI6xfHGcjU=; b=eITUglEJWG9jU/MLRhTeykZc9ivvnlW/mdfAkFBOJOS7uWOhwXjIKsWdqZrNlxMl9e zYnh0HK5qGS1nki7eqtRsJmaIhTEQOQk8nGJnR3aD8Ut0xBSB9OTJHxaoIFVhLGjRNBl IjkWF7YzW+HzTUXb04Cbzg/5p5SUHOn7ZejjLAeHXF8dkuckvffOzaGzO2B4HFj7J0p6 hRwyUhbexQVcs6YfZvfyDmRFvhoBPajdasMLlVL1J6VVXVICbVfbbYTmY0+awS+2jh0r ZE8n6DzU2k9PvEEeQkwViZRYfOLyP4BRxiHaCx1kCs1VnI1s7FOqNEwAr6AOF+4X+tRT xYtA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@hotmail.com header.s=selector1 header.b=TqvadVY3; 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 n21si2669934wmc.81.2018.01.16.19.02.40; Tue, 16 Jan 2018 19:02:40 -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=TqvadVY3; 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 80882689E70; Wed, 17 Jan 2018 05:02:36 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from NAM01-SN1-obe.outbound.protection.outlook.com (mail-oln040092002091.outbound.protection.outlook.com [40.92.2.91]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 91B2468825B for ; Wed, 17 Jan 2018 05:02:29 +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=nuo69xyAwayu1aS2GUnwjAKdmbdgpky9iKT8TGWl3JM=; b=TqvadVY3XwROlqvtkNzTTWUn2Xrw/byx7gV2jrL5002OBG265iIosoBTwFLBoO+vAIQ7fHhXcz8K642yLksSXdVqCg1uRr02A/js+5T3m7PtYbLSH86lW0v0iJFQPC9RhxcJ+nyeK3khukQSa5EUu5e7PZ7tD7k/PlTmLPDGitUTNUm6scQQqcRxBBT6eYoaCbw4nbYbAU8nZjNa4QW1UvfZoVMqzr/LZvfRWEiCMcRZdP+5aJ4zPPqIsbL/rdjey5GD/bA9fUYMjWZm/28KKlbSvfMAjLADU491H70mlEaj+EAF/Kze4f8zgC1H58VbP/nIyn6UFD13O2ozjki9RA== Received: from BY2NAM01FT018.eop-nam01.prod.protection.outlook.com (10.152.68.57) by BY2NAM01HT245.eop-nam01.prod.protection.outlook.com (10.152.69.59) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.20.345.12; Wed, 17 Jan 2018 03:02:30 +0000 Received: from DM5PR22MB0681.namprd22.prod.outlook.com (10.152.68.53) by BY2NAM01FT018.mail.protection.outlook.com (10.152.69.210) 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; Wed, 17 Jan 2018 03:02:29 +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; Wed, 17 Jan 2018 03:02:29 +0000 From: Colin NG To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [PATCH 3/3] libavformat/dashdec: Fix for ticket 6856 (filename limited to 1024) Thread-Index: AQHTjz+cqFOVo1qrX0mXWR84esRhZA== Date: Wed, 17 Jan 2018 03:02:29 +0000 Message-ID: Accept-Language: en-CA, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-incomingtopheadermarker: OriginalChecksum:3143EDFC5A344A3FA59ED04D6EA6E2C001903E6839AF72FA25CECFA013870FC8; UpperCasedChecksum:A2D4BD61848444F5A0ECBC88B81FD03C5FEF75099C3E2DF425852EA5DFA1BBA5; SizeAsReceived:6982; Count:45 x-ms-exchange-messagesentrepresentingtype: 1 x-tmn: [qgKjDFSGS+SKbg7ap9+z/MlyLcVRrDIu] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; BY2NAM01HT245; 6:5BN80BNa3BpFm+r4IzaVZp6gFelwQT6y65su3P5NjUqp357qqlAGDIbO19jEzyXL0SiCXaOm0ENC5abCltP/guVRnq0uahXAwiAqnRgHNRAhI2ZEX0OQJL5dJwr9p1SxgAvk07ybgmOUkPpM8xxFrtMIkPx+gf/0Ttjwc505qvk9Jadbuq4fOkoW+2YYhrQ3e5+vXHamRNxpp7l0aSg7fZmAVwcvhjHGLuQeMgqQrf8Pscv8l0+hozwW0lFT776Mt4Zwga57wu3bxRSf1eNLikyRherHTKc1JutEzYsgVgKmhxoTex38kHtsEiUYAFB7SKsPf2OKevz0+e9c4afAXzb+1RffLYGJL/7XJbTIktg=; 5:NrTD86WJ9u/jlqLr5OwAwWQ8kaT3P1rpHkLGzZemThVky4MmJCdJj9J+35IjL77uLQHoXXRAJ9a7d+XttRovVZefPYeCAtT4MwPZRWzMtr5OmEJOivzw9cbfYbt3gn49fw2R0MaE8S3xJ95NQtPu7zO3GagtACUfXHjEKhioGRg=; 24:knLmlTqc8H5EJ8khuzp+SDj7k1xVRyOJU0VEiOsA7AN26PJEhwKqreINdvoAWoUuvLAaunErXqdaZJyzf9juWnprVxIR+6SvaL4EX+7S2AM=; 7:zYdXJQF1Kwiy6dz5igqmmwEpGtwNa1Insjl6hKEGQalExAtbSe/5/Gdvq1Jt16vSoQ8E8ubb1rELXc0wnTLi3CbcvCzhwZQSOXl407t/cy+8+AbT4o8MKfIqV9taBFgOxYJi4CMpVRyRpCGnmtjqMFK+UmnRg24ij0SGFLNMeHb+TXDz/KI0niyMz0NiOwpzcLDT6zDad+7nRdKvnn9GwwFtWwEzFXES+16xr5Iqd1Ykknx902VS170SopMZQ9hv x-incomingheadercount: 45 x-eopattributedmessage: 0 x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(201702061074)(5061506573)(5061507331)(1603103135)(2017031320274)(2017031324274)(2017031323274)(201702181274)(2017031322404)(1603101448)(1601125374)(1701031045); SRVR:BY2NAM01HT245; x-ms-exchange-slblob-mailprops: S/btQ8cKWiS44Wqn27sBXA2Sd/cNisrgUF0QeYnPkSERXm658vk2RWw+1VAWIKQzT/N9XfDbKitK00DhB4zV9ZcTCggjs5VLQ+aV8KS3W/yQeQn+sexsAXlhWE+DwROvZb7hqx8DNbIFvV/stBzvIGOZeRSbV6A19xlWhwRYKFoEmDTRWI1E5gvjHRxjnG/f7smgfEdzRJnVNpw/ZyQSN1dfVXDezOni44zZ2CLZWeDAt0NKEJVluB/PmANv52SUg+lSJ5uf8+AbRDJF6VSAOJl+O4z4NgOMVpoC/M7uq8jLsxu4h5w17rpoyT2USEurxmO0lFBD6GgjLrBqjAqsNosfkh1o6eOXRUVu3D1Rm5f50rO6+L3zmRiPflc2HA8p/4dq7BAENYkWkgHBjpizoq+SJumL82eNnvgIgFojAZRtryPI86i5+qQ3YFthumdQvQq2YI2/CHnJbgTdoxZUa0cN6JSZVGYBdjDZ9kTS8Js96lVCZGfJX6XMPABi2YAW3gPNyTQRBbDH8TmbXS+d9KbTph8hDW5hpIm0D8atMeHuLU6FjnmVrfCx5LPHjdFj4pcLkX2H1F9QgMwg43CUoE3GVCM3mkK/z0T9p6eQydN6xvuu0+T4K/bq6cA7K1UaAoW7l4ju4ZnFfHjIm38MYx7TDMX5C08mjGSfMZF89MjzHCvwlARPVu2Ynca4ontQTGHI/4JeaS3Fk41TOKGt5xgqVqUmy5qF24dn+rDL3nS/gZK6XHfyI6Zn7RlKXub+yYM0lxPevhk= x-ms-traffictypediagnostic: BY2NAM01HT245: x-ms-office365-filtering-correlation-id: 1c674f76-32a0-47bd-7a9a-08d55d56be8b x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(444000031); SRVR:BY2NAM01HT245; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:BY2NAM01HT245; x-forefront-prvs: 0555EC8317 x-forefront-antispam-report: SFV:NSPM; SFS:(7070007)(98901004); DIR:OUT; SFP:1901; SCL:1; SRVR:BY2NAM01HT245; 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: 1c674f76-32a0-47bd-7a9a-08d55d56be8b X-MS-Exchange-CrossTenant-originalarrivaltime: 17 Jan 2018 03:02:29.5363 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Internet X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2NAM01HT245 Subject: [FFmpeg-devel] [PATCH 3/3] 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 | 88 +++++++++++++++++++++++++++++++++------------------ 1 file changed, 58 insertions(+), 30 deletions(-) diff --git a/libavformat/dashdec.c b/libavformat/dashdec.c index 1d520d4..9d5986d 100644 --- a/libavformat/dashdec.c +++ b/libavformat/dashdec.c @@ -147,6 +147,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 int ishttp(char *url) { @@ -154,6 +155,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_current_time_in_sec(void) { return av_gettime() / 1000000; @@ -452,6 +457,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) @@ -459,43 +465,47 @@ 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] && baseurl_nodes[i]->children && 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; } @@ -580,9 +590,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"); @@ -595,6 +607,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); @@ -619,6 +632,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); @@ -673,7 +687,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; @@ -690,13 +704,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; @@ -704,7 +718,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; @@ -714,8 +729,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; @@ -758,7 +773,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); @@ -766,6 +781,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; @@ -834,8 +852,9 @@ 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); - if (ret == AVERROR(ENOMEM) || (ret == 0)) { + 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; } if (representation_segmenttemplate_node || fragment_template_node || period_segmenttemplate_node) { @@ -859,7 +878,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); @@ -871,7 +891,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); } @@ -914,7 +935,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); @@ -1449,19 +1470,22 @@ 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); + if (!tmpfilename) { + return NULL; + } + 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; } @@ -1500,9 +1524,12 @@ 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; + if (!url) { + goto cleanup; + } set_httpheader_options(c, &opts); if (seg->size >= 0) { /* try to restrict the HTTP request to the part we want @@ -1511,7 +1538,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); @@ -1520,6 +1547,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;