From: Tobias Stoeckmann Date: Fri, 23 May 2025 16:59:05 +0000 (+0200) Subject: Fix archive_wincrypt_version compilation X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=38ac49553d430f1b28c7624e5e9788125fdad187;p=thirdparty%2Flibarchive.git Fix archive_wincrypt_version compilation Cast address of "version" to BYTE pointer for CryptGetProvParam. Fix "major" variable assignment for picky compilers like MSVC. The "length" variable is an in/out variable. It must be set to the size of available memory within "version". Right now it is undefined behavior and 0 would crash during runtime. Fixes https://github.com/libarchive/libarchive/issues/2628 Signed-off-by: Tobias Stoeckmann --- diff --git a/libarchive/archive_version_details.c b/libarchive/archive_version_details.c index 186e53e50..0bd566473 100644 --- a/libarchive/archive_version_details.c +++ b/libarchive/archive_version_details.c @@ -439,11 +439,11 @@ archive_wincrypt_version(void) if (!CryptAcquireContext(&prov, NULL, NULL, PROV_RSA_FULL, CRYPT_NEWKEYSET)) return NULL; } - DWORD length, version; - if (!CryptGetProvParam(prov, PP_VERSION, &version, &length, 0)) { + DWORD version, length = sizeof(version); + if (!CryptGetProvParam(prov, PP_VERSION, (BYTE *)&version, &length, 0)) { return NULL; } else { - char major = version >> 8; + char major = (version >> 8) & 0xFF; char minor = version & 0xFF; static char wincrypt_version[6]; snprintf(wincrypt_version, 6, "%hhd.%hhd", major, minor);