]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Merge pull request #2630 from stoeckmann/wincrypt_casts
authorTim Kientzle <kientzle@acm.org>
Sat, 24 May 2025 17:45:57 +0000 (10:45 -0700)
committerMartin Matuska <martin@matuska.de>
Sat, 31 May 2025 19:25:32 +0000 (21:25 +0200)
Fix archive_wincrypt_version

(cherry picked from commit 42c2f8464962990bf7df0df2f3cbd0ce80121190)

libarchive/archive_cryptor_private.h
libarchive/archive_version_details.c

index 460d38c122a6356666732ddee4d5a10e26a32f88..4b3c6c1614332b54c3edd7af464b131e11e51f22 100644 (file)
@@ -144,6 +144,10 @@ typedef struct {
 
 #else
 
+#if defined(_WIN32) && !defined(__CYGWIN__) && !(defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA)
+#define ARCHIVE_CRYPTOR_USE_WINCRYPT 1
+#endif
+
 #define AES_BLOCK_SIZE 16
 #define AES_MAX_KEY_SIZE 32
 typedef int archive_crypto_ctx;
index 186e53e50c843dc43602404290bf7a91fb545255..0cf92db7319441c4e49497af30fa7c6702f02271 100644 (file)
@@ -134,31 +134,31 @@ archive_libb2_version(struct archive_string* str)
 static void
 archive_crypto_version(struct archive_string* str)
 {
-#if defined(ARCHIVE_CRYPTOR_USE_Apple_CommonCrypto) || defined(ARCHIVE_DIGEST_USE_Apple_CommonCrypto)
+#if defined(ARCHIVE_CRYPTOR_USE_Apple_CommonCrypto)
        archive_strcat(str, " CommonCrypto/");
        archive_strcat(str, archive_commoncrypto_version());
 #endif
-#if defined(ARCHIVE_CRYPTOR_USE_CNG) || defined(ARCHIVE_DIGEST_USE_CNG)
+#if defined(ARCHIVE_CRYPTOR_USE_CNG)
        archive_strcat(str, " cng/");
        archive_strcat(str, archive_cng_version());
 #endif
-#if defined(ARCHIVE_CRYPTOR_USE_MBED) || defined(ARCHIVE_DIGEST_USE_MBED)
+#if defined(ARCHIVE_CRYPTOR_USE_MBED)
        archive_strcat(str, " mbedtls/");
        archive_strcat(str, archive_mbedtls_version());
 #endif
-#if defined(ARCHIVE_CRYPTOR_USE_NETTLE) || defined(ARCHIVE_DIGEST_USE_NETTLE)
+#if defined(ARCHIVE_CRYPTOR_USE_NETTLE)
        archive_strcat(str, " nettle/");
        archive_strcat(str, archive_nettle_version());
 #endif
-#if defined(ARCHIVE_CRYPTOR_USE_OPENSSL) || defined(ARCHIVE_DIGEST_USE_OPENSSL)
+#if defined(ARCHIVE_CRYPTOR_USE_OPENSSL)
        archive_strcat(str, " openssl/");
        archive_strcat(str, archive_openssl_version());
 #endif
-#if defined(ARCHIVE_CRYPTOR_USE_LIBMD) || defined(ARCHIVE_DIGEST_USE_LIBMD)
+#if defined(ARCHIVE_CRYPTOR_USE_LIBMD)
        archive_strcat(str, " libmd/");
        archive_strcat(str, archive_libmd_version());
 #endif
-#if defined(ARCHIVE_CRYPTOR_USE_WINCRYPT) || defined(ARCHIVE_DIGEST_USE_WINCRYPT)
+#if defined(ARCHIVE_CRYPTOR_USE_WINCRYPT)
        archive_strcat(str, " WinCrypt/");
        archive_strcat(str, archive_wincrypt_version());
 #endif
@@ -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);