From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 5D53749F14 for ; Fri, 23 May 2025 21:36:59 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id D5BAC68DF91; Sat, 24 May 2025 00:36:55 +0300 (EEST) Received: from NAM04-DM6-obe.outbound.protection.outlook.com (mail-dm6nam04olkn2079.outbound.protection.outlook.com [40.92.45.79]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id 7AAF168DA46 for ; Sat, 24 May 2025 00:36:49 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=QepWx2ViVsmjNESwfvuIGc4wLDa8Y9WZJgZx2+whG67GAyAQ8YuoyBi/SEv/hHYkPVuNymAo97PLkLtyqvZnELDbTOdf8SdqGN8O1xPLGb/Otfl1QjdvCGUK1kNpmZQ7oIklb3EQeYVTa1B1yJv50roSq0qvM5BFLwTFVZMjqK8g0FqcB9tz+D7wig5H/JCjCGSy6wXIXH9+ARe/JxJbS2KF3uEXDsEBxCRS/Oa62tXj6r8vKVe9nKa6cnz4S2f55NRncfh+WgkPWd5nOhNyVgs7U+Tcjs4q6ttYKfbYcCq3VwEQwaY1d8uOztyFqbwtjFfadrko+XKNdigi3GFvOw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=NGMR3hvU1Ecg5p+eWoHiBDfQKWiisKbx87eeQ5LeMKk=; b=fUljA4d6joBHYOIYcJmSYs1iDqHGIYd5lGwE1RV2eUt04HUm3vvTqCV4i5F/PiLrM5tvSnQmtV12Nqc0IU0xzp2YYo1rlnaIEYUgs/tY3RvEh9JkccC1s46t/p001XE2kgBD4W1/0Vdg5FnCeB0kVDk0k95df4WGMJ9oWMsVCSz+xSYISJ+Lk9ntJ2I360ZXu5B4ZZcFZnPFvx63JjHLk3KQorYZRXTXIE0vjzqr/bWIavygP4zKMQe2RrUkn5osui5mlKLQSOPVzPshGX1/C/PyNkaxNo+BlYqShor3jGjY7W8aS/q/Uo1HIz1QTvfkiBTbffbjuoj29z0ZxcZTEw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none 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:X-MS-Exchange-SenderADCheck; bh=NGMR3hvU1Ecg5p+eWoHiBDfQKWiisKbx87eeQ5LeMKk=; b=ToaMGxCEq5CgJ7MI2ZU04D/AX+NGFtXgOU2J57NBpDfnVGuZhpw5ZY8XFBgtIsHRHH1sk2IFua1HH+i97r9Mt55DwtRZ9gUANrWJIzJCPDfsZ6heRfAiZppxGobpnYTAz8ledIeD4ZU1+fx6TTjUC4s3ztw7Kos1yytQD4l8Dys/UNZrCu73zSzHRzDtdXwoidE+KcMV3yPQRdslQKljZO3A1boI/i7YPX4yB+40b17j9yc/Km7yC7CT5MPMOD1L6oMl3p4cpkrg041SDbMeY64fkozMkZIVwLvDAjGoKWaWD7Qt+9DFl7yD8rUz8fK4Ievthqkrp0H1QxHOzy0F3A== Received: from DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM (2603:10b6:8:b::20) by MN0P223MB1255.NAMP223.PROD.OUTLOOK.COM (2603:10b6:208:4bf::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.22; Fri, 23 May 2025 21:36:45 +0000 Received: from DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM ([fe80::bf09:8e9:b07f:98a7]) by DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM ([fe80::bf09:8e9:b07f:98a7%4]) with mapi id 15.20.8769.019; Fri, 23 May 2025 21:36:45 +0000 From: "softworkz ." To: FFmpeg development discussions and patches Thread-Topic: [FFmpeg-devel] [PATCH] Percent-encode URL paths in HLS playlists Thread-Index: AQHby/Jt+j0aMVzwlkW02b59s3rNGbPguJeQ Date: Fri, 23 May 2025 21:36:45 +0000 Message-ID: References: <04d464cf3931b2ebda4915b341317bc8ff1cc7e2.camel@treehouse.org.za> In-Reply-To: <04d464cf3931b2ebda4915b341317bc8ff1cc7e2.camel@treehouse.org.za> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DM8P223MB0365:EE_|MN0P223MB1255:EE_ x-ms-office365-filtering-correlation-id: d8d11e69-3f66-4280-8027-08dd9a41eaaf x-microsoft-antispam: BCL:0; ARA:14566002|461199028|8060799009|8062599006|15080799009|7092599006|41001999006|19110799006|3412199025|440099028|102099032|12091999003; x-microsoft-antispam-message-info: =?us-ascii?Q?9dsfw5ncAZAztNY/6Wf1izXAsDDjt5+jepeCAjzFUa5v6EAt1R/Vbo1HLbZS?= =?us-ascii?Q?JOetEE3aoScfquAGCB89XM019Zaxl7k1ztnMf+2f7idmuj8dUnlcbwfX2VzW?= =?us-ascii?Q?+5pXNeP97z5qNKl8Ql2uUAc2PDJ7nTci0+kZzp6I0hun82bkp7shlL0CNhVP?= =?us-ascii?Q?D1qir0b9XzUZnIU8ibPUyGyXD5rwL0yvuG4eX2sg87Ae71mVgWxpM66haywl?= =?us-ascii?Q?UNoauYcmaJBD5fJ2PSAyfCVMPKj53dJ8sON9Tohs+Lz07qCMgO6FoJ9FrXMD?= =?us-ascii?Q?BikE4PUBYI4uDoNFAHdIlQph8haPw5x4+jKP461vbN7GuUlZn6T8u/LuX4DX?= =?us-ascii?Q?PXRkHa41po7sILBmIsentqBqtvOd6/WqOMU7mZLcF0iWUaHzFvTC0aKU4/+E?= =?us-ascii?Q?XmQ9bR+/jakuH451LMbQK7m71iMZ+hmGk0N9MNo3IxcjfFZqoy9L7C5tNMOo?= =?us-ascii?Q?TafdZxcrma7GwTUbztk7yEn6LLvOsaKzVlnXiAPuYM13LhPPZ6+o70l3vPHT?= =?us-ascii?Q?OtyP4vY0nOfZmboHvXWyAl2cTJxOfy5jvOipNlFQZ6rfcZINWKlI+soVPH7g?= =?us-ascii?Q?bM32AgyEgBzFQQryb5hgt+VlLuO/4Npp2MVHkRiBPaDQfoBcEe1g4KP/Wn9h?= =?us-ascii?Q?VCl662cp0mO/5gcs/PpC6Q8pkearLGzSmu45S//wQq4ei5AoRdVrKwbEp0dU?= =?us-ascii?Q?eg03rPBOok+n9kxLF1sC7g8pbT5/mcSdYmKwKsSdV10XS+d4ame0cysSTimh?= =?us-ascii?Q?Dxka7uC7wmLQoJ3H6e1y8tshAYeaMqZkW3Yi1vQNvwkNY8xbCOQnY/8eWOS6?= =?us-ascii?Q?ceyxsdBJ51ypG68RVWLw3GjzcpPrEGiqsuokU0N7qF3+Ks4XFoJcmmsxBCHk?= =?us-ascii?Q?eOx+F2bhweappsBSLXvZQNT/WXBNje0+DtJWjxPkaJTFTUqN7YATaEImaUNL?= =?us-ascii?Q?IEMbHApmECX3+SYA3VzR0p4XqEDviDHuysBTwo+IQHZvOOOjIVOcLwsh3GTc?= =?us-ascii?Q?L+YROxrzcXDvXBU7O7dPKrz4DJcN0s8GVQD5yixiWv+qCel87DSqaY5SQePh?= =?us-ascii?Q?LDEaMwQxjcKX0kNPX7Jn1NpD5rF55K5NWp1yVi3VjKaYqq7mCnp2D6sjU2FI?= =?us-ascii?Q?cb9ZLMn9gI1p/TOYkWYLmC9KfPwNVXsIKZmvR3xSZ1qvww/XKab8F6U=3D?= x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?e5+f4tB00ClXqjlVi/8FVE/acQ2RZqGAjkeTV1yUZL9ipYUsXhyUG7HgsGqG?= =?us-ascii?Q?nbTQ+UX/ciBkH/nzjvqVCHfVMe5D6XA0LLhNP8kbfDUDDMB940b8AHoMwY2B?= =?us-ascii?Q?WWZG3Yh3XvzR6lkl/OQC0laFENg/bZeg3RE64PRVgsuEFRlPWfXs9CBZv517?= =?us-ascii?Q?lhb7mVkchh2SJ8/42i5MkTFWtXj/bZYCGhQzBqFxAUkUOOTuqA1WjRN7W3zH?= =?us-ascii?Q?rSKlKmBw8p+Jflnr+/rv32cjw+Xv/fUB8PoP4ThalYJx5oCammXJ1ALSVB2H?= =?us-ascii?Q?7RVzACrA/YddslviAAX9zdIr77QdQITk2Lx4G2Hv3OXxmQ9jLx8xNwoYXwMD?= =?us-ascii?Q?baVizJlyoxDh/eOmQBTPd1Q6GkrdZPherAbdU9+ovoLC2bH6Fu/snZ78BHK7?= =?us-ascii?Q?/H1XiymK/PJ5hoydDMcSVXjFyclLQB/Ud08wT7UiYRHlXrE7PQ+ZC4p8i6C5?= =?us-ascii?Q?4yVatspi3AmXvac7OXyHYK9Qii1Shbniqwz4A9gzl7u3oLSnEtm3qPl8asBu?= =?us-ascii?Q?pp7k8voViCmV72B/XUVac7TvmURI0baygaaT3GDGF3WUWgrlM6QB6MK4sgLc?= =?us-ascii?Q?pVoGdvhEzMhAyz5X91LKgqc9Va8m6yUXB2gM5yZ66/kjaRGUpw6QOpgFNZyi?= =?us-ascii?Q?h4j5WTsudvDaCo/FchSZ999jz0Ipp0nwk/YKdTjPqA8WhOoJRbUSt/UELoj3?= =?us-ascii?Q?23NWnKIOh3BzBRTzpJsrnd4b7ttU4BaUwVsbLPxTrzfC/CstoFR2urUgIb5a?= =?us-ascii?Q?K1oa+JqHIaqYxJhFRT6oFjpmOFtrjsYE6riaGYsDPii7xJJXcxDLOSsDv5rP?= =?us-ascii?Q?9xoB+BZ2HEmrT4UXBd0Wtauk8jJZu55xpnv18YCpMZyhTPX78Hp2usC0+yXy?= =?us-ascii?Q?2TjAb5517rzJLEvkUKuaBbwmtAZiEZTt8lsRpzYzaeav3A+XMG4rFy6dafFC?= =?us-ascii?Q?YhWxbjCB5ISxLaLZzP6++tejSeeSwDaR8bDwKV9DCy5vGWZTVkyE0ii7bIpF?= =?us-ascii?Q?Eiu30chEFR5a/+FAGbN4By7TetVQRy7fJOdW7glGyYEBC7XMverHZ2qh0u8M?= =?us-ascii?Q?ZlFxBPhdUwYwefKYkRD+LGRWCtriKPJHuqwB+w9Hw7l9aU5xMKe/YNqTJCp1?= =?us-ascii?Q?K3ixtzc0m/O1453i5dEPJCvyqzZG3NZ+TiskiJwaQ5AZEIYQyjXzg+dHKig0?= =?us-ascii?Q?W8XqjiHI215OOCK3qc2sFoKvhcn8rXzWOb8yxhiH8U+PmkMNW84bm3de8pw?= =?us-ascii?Q?=3D?= MIME-Version: 1.0 X-OriginatorOrg: sct-15-20-8534-20-msonline-outlook-c7cf3.templateTenant X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-Network-Message-Id: d8d11e69-3f66-4280-8027-08dd9a41eaaf X-MS-Exchange-CrossTenant-originalarrivaltime: 23 May 2025 21:36:45.7238 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN0P223MB1255 Subject: Re: [FFmpeg-devel] [PATCH] Percent-encode URL paths in HLS playlists X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: Timothy Allen Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: > -----Original Message----- > From: ffmpeg-devel On Behalf Of Timothy > Allen via ffmpeg-devel > Sent: Freitag, 23. Mai 2025 16:53 > To: ffmpeg-devel@ffmpeg.org > Cc: Timothy Allen > Subject: [FFmpeg-devel] [PATCH] Percent-encode URL paths in HLS playlists > > This commit closes trac ticket 10679. > > Signed-off-by: Timothy Allen > --- > libavformat/hls.c | 9 +++++++++ > libavformat/url.c | 35 +++++++++++++++++++++++++++++++++++ > libavformat/url.h | 9 +++++++++ > 3 files changed, 53 insertions(+) > > diff --git a/libavformat/hls.c b/libavformat/hls.c > index c7b655c83c..49436d8184 100644 > --- a/libavformat/hls.c > +++ b/libavformat/hls.c > @@ -1021,6 +1021,15 @@ static int parse_playlist(HLSContext *c, const char > *url, > seg->key = NULL; > } > > + ff_percent_encode_url(tmp_str, sizeof(tmp_str), line); > + if (!tmp_str[0]) { > + ret = AVERROR_INVALIDDATA; > + if (seg->key) > + av_free(seg->key); > + av_free(seg); > + goto fail; > + } > + strcpy(line, av_strdup(tmp_str)); > ff_make_absolute_url(tmp_str, sizeof(tmp_str), url, line); > if (!tmp_str[0]) { > ret = AVERROR_INVALIDDATA; > diff --git a/libavformat/url.c b/libavformat/url.c > index d5dd6a4666..69d68d4248 100644 > --- a/libavformat/url.c > +++ b/libavformat/url.c > @@ -324,6 +324,41 @@ int ff_make_absolute_url(char *buf, int size, const char > *base, > return ff_make_absolute_url2(buf, size, base, rel, HAVE_DOS_PATHS); > } > > +int ff_percent_encode_url(char *buf, int size, const char *url) > +{ > + const char *hex = "0123456789abcdef"; > + > + av_assert0(url); > + > + int p = 0; > + int len = strlen(url); > + for (int i = 0; i < len; i++) { What about the slash: > + if (i + 1 < len && ':' == url[i] && '/' == url[i+1]) > + buf[p++] = url[i]; > + else if (('a' <= url[i] && url[i] <= 'z') > + || ('A' <= url[i] && url[i] <= 'Z') > + || ('0' <= url[i] && url[i] <= '9') > + || '/' == url[i] || '.' == url[i] || '~' == url[i] > + || '-' == url[i] || '_' == url[i] || '+' == url[i] > + || '?' == url[i] || '=' == url[i] || '&' == url[i] > + || '#' == url[i]) > + { > + buf[p++] = url[i]; > + } else if (' ' == url[i]) > + { Space must be %20. The plus sign is only used for encoding form fields. > + buf[p++] = '+'; > + } else > + { Check buffer size: > + buf[p++] = '%'; Use HEX for upper case: > + buf[p++] = hex[url[i] >> 4]; > + buf[p++] = hex[url[i] & 15]; > + } > + } Check buffer size: > + buf[p] = '\0'; > + > + return 0; > +} > + Please also check behavior with signed/unsigned char, I'm not sure whether the shifts are always right. As a tip: using AVBPrint for building the string might be easier. HLS URLs can be pretty long sometimes. Regards sw _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".