From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 00297434A2 for ; Mon, 13 Jun 2022 20:17:15 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E73D968B3AB; Mon, 13 Jun 2022 23:17:12 +0300 (EEST) Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12olkn2078.outbound.protection.outlook.com [40.92.21.78]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C11C768B0F9 for ; Mon, 13 Jun 2022 23:17:05 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=IQuO2XZstzmJgKVsct1IW5z5Svc0z+xvasFRCNNpFhyWMkMo2CozLJzLUSsRuoEb8nxRRb0nesK8bLY55lnBxSQx0Y/mBam9y7mPAtNnA3/Iyh0Zz+2Ns7iD53ldFnoUyXwcgZw3oTfxXtH3W76gBy6VOVPpkTjV4adNa+sMXNNrZFPmqDfJMql0dYiuNH80291BpWwjYvyWlVqmSYE9Sy3EI97mMnkIapDHGNdfdFn8pbSwSewsBNC4HaZusECoFQ2Pjx1pFDefzg4pC3icOUlXvcsUVrO0l+G74coSIggcarEm8/8fyIfc4YDgwpGkzjX4q3C2vtxheLK9xWI/Rg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=z154Emr03skLA3wljkfPTDrrP44e/1HEd8pjs9jATho=; b=iholIsea/JM8pirT2VqQFmOb2rFYGEV+zvelbUZzs1wXaf/RrQjMnFHt0kWGulZEFCOeGmp3kCM1vZlKnAahqH4OHugeCMEuSKBuOWFb+bLqWZvNMNYYHEITbPUvjm5J1MTnEHwrbmwbcBwbT5vklrsr/p+ChytjvrILrUvN5tavm9COsPmumd9dReY0pZYxLg9PRTP/9Sz+aDisusCHJgICS+aNMSixDhgvG8UIDvM6LDHQ9XDSjmdGJ3QVUEwsUbJPXtVCTgZY1sy3+dI8d2Ql4TsSfUqwzSs3pffXYwsogfx3CAX3nRzYLy6BOg6vcWwgi+Dy3WAfZPaNhOwNgg== 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=z154Emr03skLA3wljkfPTDrrP44e/1HEd8pjs9jATho=; b=XIO5cQpa37Id9ce33d8gKG3ovSshCgBV6wM4ozYcLTVgpwPl80vQ2UbP/KJ8+n9grCcGzfsuisAVsVvpTaVQyD2U0pADrBmLTCIsSjGO47yvAtNDaeu3iVwv1u3ztxi4xu4S46d99y0INX8LCT7i/QuoF86FF7PovjuprxpZUPhN8sFDBSjIWw9BFaXuVX9ZgxUwShbQ/a2InNKfRk+a/L/jw5FfN1iMkChxgQF6kJFBMYi0hGru4gRYco+fLhp8TTs+P9bdDDM4sEZyaLcJObCk8r4Zsw/CspqDatfVvgzgFKGv4GRgInEEWk72pLCuXmBJkHSGVPs9NIRlBH5g9A== Received: from DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM (2603:10b6:8:b::20) by CY5P223MB0467.NAMP223.PROD.OUTLOOK.COM (2603:10b6:930:28::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5332.20; Mon, 13 Jun 2022 20:17:02 +0000 Received: from DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM ([fe80::f144:21f9:cdb1:5c8a]) by DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM ([fe80::f144:21f9:cdb1:5c8a%9]) with mapi id 15.20.5332.021; Mon, 13 Jun 2022 20:17:02 +0000 From: Soft Works To: FFmpeg development discussions and patches Thread-Topic: [FFmpeg-devel] [PATCH v14 2/5] compat/w32dlfcn.h: Remove MAX_PATH limit and replace LoadLibraryExA with LoadLibraryExW Thread-Index: AQHYf0Jr6qpkXsE9T0+yfFq1DsaMA61Nu4HA Date: Mon, 13 Jun 2022 20:17:02 +0000 Message-ID: References: <20220613162626.11541-1-nil-admirari@mailo.com> <20220613162626.11541-2-nil-admirari@mailo.com> In-Reply-To: <20220613162626.11541-2-nil-admirari@mailo.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-tmn: [rZnxx9JAKICdIWwYRb5yEN8YDbvnplql] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 8fc51293-1ad9-4da2-f9bc-08da4d79adb1 x-ms-traffictypediagnostic: CY5P223MB0467:EE_ x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 43UPYxkp8QMoTFsc1/gRN2ie3jvHK6Z2ODzGmh/eu56a41/mHRK1NUJUgKz4aww3IMzSrXNIQB4F4ZnEjjdvWB6QyVnAwoEE2XaJHBn1Rq5zwLL1ku1CjByuLcQ8AuAtG7h6/sCrtYgXC7p130b+E5EZ4z7tVOBkSP7iWU0pT5KTSg2ocW4RMdwi2szYA91XTiCxOW4nsO7Z1cU7ngYSDvuksNZZAPZRoC/VVBay9xZxEEElB7DAFh3klodhMX0nzwASsGiU6k6ljfvsUdEicIwyRb+0h2zCa/KBx2qlzrZV8bTBtlj32Yn+6fOYeyUoB4evYzcGvG7hnLvUlpkCa1P9X2iZUdB77tm3Gab2iX865uitydO7W13gLirOagPtD5aU1bWn1h5ZqDGl7kBw/VlYVIH9BQ27d7mf1splFr6CO9LEauDFgwCkCiSRCaGxdVtEsTkscP0+gUJax8Z+PbV51wyq0S7NtCiVeYARNeTPmvJ/4/SneZJFa1xJ7JJAPQpp+dp++xDP76GOE8x7HWIScbIzt3o/ZYVJdHK9ocf83ouz0dUtCbae7vjtbuOlcGFYvamQsu8dFr61FQK0wA== x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?RHB3ajhwRXMvN2pOSXI4Sm1jWWhXcmplQmxoK3RBWFQxVEVOelpsd01qTXFM?= =?utf-8?B?eEVLcHR0eTJrLzJhUStueElzQjBWcGVkbDNsU21hSlQrSzJRT1RoRUhBdFdK?= =?utf-8?B?RWNQNXJCR1FXVkFISHl6Z3B0RFBhWUFia1dkL2pFSGY1Tmo5eTVUZHNNdkR3?= =?utf-8?B?MXpyYUtJN0FZRzVmUmllZUR4bE1FYXVsWWJHenFiNTgxSTJmei9EcmZiSUJJ?= =?utf-8?B?NUdxOFlUYVZmVEtxUTh4WXR0UldxK1dKeXkwL29oL2lkYUd5eDlNcnBmZDgx?= =?utf-8?B?dW5PYTMrSDhwaTUzTEdNQkpwSWhZcW1KZWVuaWFscnk1cGFOS09NL2dBa1J2?= =?utf-8?B?YjRHRW9KUHJZYTVvaWFMbXdTRWgxam11b2hwODZ4UTlnYlRoUjM1QnRBaVRs?= =?utf-8?B?Q1M0YjlmRnNOMmRBTVRlYi9TTWFNTFJ0SnVwRW8wVStGN215UHNKNTlCZWZr?= =?utf-8?B?cng2MDBrWDFicE1weUZPTTcxQnMzMUFaMXJ4VXFJdkg1WlB0OU1LakQrMnMw?= =?utf-8?B?dTI4UGMyaFh3aFFwc2FhL0RMWnJ1YVdHeWYyM2hDOGNPbjFoOUNwL1VEYm9M?= =?utf-8?B?UE5sNmlRRTNUSGFkdkhPV21vRGJJZlEzZGFneDdUaTJYQnAyQlplM1pwQTBR?= =?utf-8?B?M3JnanM4QnFVV3pFMGFRRFp3SlFEUFhLaW5EZENrdm9KRlpWVE12OVR6UURw?= =?utf-8?B?WVczWjN4TUdBUzF2UDVzRDBhbVhqTWVidHZDRnhuSDRybHlNWVBnTVl0T3d6?= =?utf-8?B?SURaOVcvcjZwcTJhRHp5RWtITXRxeVYyTTJ3QjVpWitTeUpwYUNyZG1tazZs?= =?utf-8?B?L1RSaThGWGhGaGhLcUlLZFl6UlRvQlIyZmpXeHNINW1OTzFmNGZpaHNaUldZ?= =?utf-8?B?WjJhMndRR0pZemN6bWtldndmMDI0S3YvVStEbzVhdE1YWHc0VVVtZ0VGMjhW?= =?utf-8?B?dkYxR2ZsYzV4bEViWHl6akxvcHI4Z1BDVU1GRmthMkJ1c3pIUFdUTnNQNk5T?= =?utf-8?B?TXZsekhvTUN6bnViQnBKMWhSb2d0a3Vocms4dzlLYmIycDFCWjdnYVNlc2hu?= =?utf-8?B?dU9NaFo0YmRuZldibXJDa0pHRXVZWVF6RDdPVk9hTEg5eFdkcTZzaHZwRnNv?= =?utf-8?B?ZEg4QjJyTkN1K0RvRVk2aTEvR3Jud3p6cURDMm5tZTM3NVkydnUweVVyRzh0?= =?utf-8?B?ZDdpbDZRSHJxN2h0bnI2OEw4V3lOdTFQZVdSOGNtRmhpK1ZDdUw3Mzd0SkZj?= =?utf-8?B?dENoTGFyOGk0NmljME9YNytKbnorZUxYQzlIWHNqQnRaYkxvUFZmNnVxbUFt?= =?utf-8?B?Nnh1Q09ZNG1CSGx0L0QwbHVDT1FpNHE0M0kvTmltSHdobzVFa01JKzZ2YkJM?= =?utf-8?B?MXpZeThjY3ZOWnd6SzEza0lCL09HVG5vQVQ3a3BmOWtkQ2RmRytJSEY5VnNE?= =?utf-8?B?ZXBtU3JCNkFucnJ0SHJPdGZzd09XekoyUlZIcnZrdktMQVlCR2hvbXNIcVFW?= =?utf-8?B?cjN4RVo4c0k0K2lYenlkQzRsNlRkS1psa1kzYURDVklkS01JeVNDMHNZcGZz?= =?utf-8?B?RTEzemlGUk9VM3BsWUtleEVYSzVoU0FTWWI3SGprZldlcGRlRzI3enlDZXcr?= =?utf-8?B?SlFwRmVBcVdWUnZ5OWdqU3NJNmljdk5QL0ZtVHMrVktKSVhXQ1dWbnpnenZ6?= =?utf-8?B?aTRuRGgrRHkydWV3R0FMTjlHSThJb2huU243TFAxZGFJTkN1cFQ1SDQrM3Z0?= =?utf-8?B?QVBaT0dVdlc3azdhVzJnNHJoMjZwQ09zL0J1eTJxYUNQRndJWm5hQUlqTDlh?= =?utf-8?B?YTJMeTYxNUlmdGJld3RZdDhPRlVoSk00QmVBc1hIKzRMTlB5RkZkQ0ZKcEZO?= =?utf-8?B?S0dtNjAzYW9nOGtHOWdKTlpUcXdaK1QwVHBtTmdTWFZRaW1PODF1ZTZWZm9q?= =?utf-8?Q?ml90xWgZcI8=3D?= MIME-Version: 1.0 X-OriginatorOrg: sct-15-20-4755-11-msonline-outlook-1ff67.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: 8fc51293-1ad9-4da2-f9bc-08da4d79adb1 X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Jun 2022 20:17:02.6381 (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: CY5P223MB0467 Subject: Re: [FFmpeg-devel] [PATCH v14 2/5] compat/w32dlfcn.h: Remove MAX_PATH limit and replace LoadLibraryExA with LoadLibraryExW 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 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 Nil > Admirari > Sent: Monday, June 13, 2022 6:26 PM > To: ffmpeg-devel@ffmpeg.org > Subject: [FFmpeg-devel] [PATCH v14 2/5] compat/w32dlfcn.h: Remove > MAX_PATH limit and replace LoadLibraryExA with LoadLibraryExW > > --- > compat/w32dlfcn.h | 80 ++++++++++++++++++++++++++++++++++------- > -- > libavcodec/mf_utils.h | 1 + > 2 files changed, 65 insertions(+), 16 deletions(-) > > diff --git a/compat/w32dlfcn.h b/compat/w32dlfcn.h > index 52a94efafb..e49d3841aa 100644 > --- a/compat/w32dlfcn.h > +++ b/compat/w32dlfcn.h > @@ -22,9 +22,31 @@ > #ifdef _WIN32 > #include > #include "config.h" > -#if (_WIN32_WINNT < 0x0602) || HAVE_WINRT > #include "libavutil/wchar_filename.h" > -#endif > + > +static inline wchar_t *get_module_filename(HMODULE module) > +{ > + wchar_t *path = NULL, *new_path; > + DWORD path_size = 0, path_len; > + > + do { > + path_size = path_size ? 2 * path_size : MAX_PATH; > + new_path = av_realloc_array(path, path_size, sizeof *path); > + if (!new_path) { > + av_free(path); > + return NULL; > + } > + path = new_path; > + path_len = GetModuleFileNameW(module, path, path_size); > + } while (path_len && path_size <= 32768 && path_size <= > path_len); path_size <= INT16_MAX (the edge case is already covered by the equals) > + > + if (!path_len) { > + av_free(path); > + return NULL; > + } > + return path; > +} > + > /** > * Safe function used to open dynamic libs. This attempts to improve > program security > * by removing the current directory from the dll search path. Only > dll's found in the > @@ -34,29 +56,53 @@ > */ > static inline HMODULE win32_dlopen(const char *name) > { > + wchar_t *name_w = NULL; > + if (utf8towchar(name, &name_w)) > + name_w = NULL; > #if _WIN32_WINNT < 0x0602 > // Need to check if KB2533623 is available I know this line existed before your path, but it would be nice to clarify check and condition, like: // On Win7 an earlier we check if KB2533623 is available > if (!GetProcAddress(GetModuleHandleW(L"kernel32.dll"), > "SetDefaultDllDirectories")) { > HMODULE module = NULL; > - wchar_t *path = NULL, *name_w = NULL; > - DWORD pathlen; > - if (utf8towchar(name, &name_w)) > + wchar_t *path = NULL, *new_path; > + DWORD pathlen, pathsize, namelen; > + if (!name_w) > goto exit; > - path = (wchar_t *)av_calloc(MAX_PATH, sizeof(wchar_t)); > + namelen = wcslen(name_w); > // Try local directory first > - pathlen = GetModuleFileNameW(NULL, path, MAX_PATH); > - pathlen = wcsrchr(path, '\\') - path; > - if (pathlen == 0 || pathlen + wcslen(name_w) + 2 > MAX_PATH) > + path = get_module_filename(NULL); > + if (!path) > goto exit; > - path[pathlen] = '\\'; > + new_path = wcsrchr(path, '\\'); > + if (!new_path) > + goto exit; > + pathlen = new_path - path; > + pathsize = pathlen + namelen + 2; > + new_path = av_realloc_array(path, pathsize, sizeof *path); > + if (!new_path) > + goto exit; > + path = new_path; > wcscpy(path + pathlen + 1, name_w); > module = LoadLibraryExW(path, NULL, > LOAD_WITH_ALTERED_SEARCH_PATH); > if (module == NULL) { > // Next try System32 directory > - pathlen = GetSystemDirectoryW(path, MAX_PATH); > - if (pathlen == 0 || pathlen + wcslen(name_w) + 2 > > MAX_PATH) > + pathlen = GetSystemDirectoryW(path, pathsize); > + if (!pathlen) > goto exit; > - path[pathlen] = '\\'; > + // Buffer is not enough in two cases: > + // 1. system directory + \ + module name > + // 2. system directory even without the module name. > + if (pathlen + namelen + 2 > pathsize) { > + pathsize = pathlen + namelen + 2; > + new_path = av_realloc_array(path, pathsize, sizeof > *path); > + if (!new_path) > + goto exit; > + path = new_path; > + // Query again to handle the case #2. > + pathlen = GetSystemDirectoryW(path, pathsize); > + if (!pathlen) > + goto exit; > + } > + path[pathlen] = L'\\'; > wcscpy(path + pathlen + 1, name_w); > module = LoadLibraryExW(path, NULL, > LOAD_WITH_ALTERED_SEARCH_PATH); > } > @@ -73,15 +119,17 @@ exit: > # define LOAD_LIBRARY_SEARCH_SYSTEM32 0x00000800 > #endif > #if HAVE_WINRT > - wchar_t *name_w = NULL; > int ret; > - if (utf8towchar(name, &name_w)) > + if (!name_w) > return NULL; > ret = LoadPackagedLibrary(name_w, 0); > av_free(name_w); > return ret; > #else > - return LoadLibraryExA(name, NULL, > LOAD_LIBRARY_SEARCH_APPLICATION_DIR | LOAD_LIBRARY_SEARCH_SYSTEM32); > + /* filename may be be in CP_ACP */ > + if (!name_w) > + return LoadLibraryExA(name, NULL, > LOAD_LIBRARY_SEARCH_APPLICATION_DIR | LOAD_LIBRARY_SEARCH_SYSTEM32); > + return LoadLibraryExW(name_w, NULL, > LOAD_LIBRARY_SEARCH_APPLICATION_DIR | LOAD_LIBRARY_SEARCH_SYSTEM32); name_w leaks here _______________________________________________ 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".