From 1084d008d3fe5727726257af642de2e807f2c6f2 Mon Sep 17 00:00:00 2001 From: Jan Grulich Date: Mon, 30 Oct 2023 18:17:33 +0100 Subject: [PATCH] QCryptographicHash: Do not rely on auto-loading of the default provider MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When using OpenSSL implementation, we were assuming the default provider will be automatically loaded, but this is not going to happen after it gets unloaded. Even the documentation says that automatic loading of the default provider occurs max once and if it's explicitly unloaded, it will not be automatically loaded again. In our case we are explicitly loading and unloading the provider after MD4 hash is used so using it afterwards we will always fail. Fixes: QTBUG-118227 Pick-to: 6.5 Change-Id: I8107b9ab02321b57978c3d25a061672fd2a7aee8 Reviewed-by: MÃ¥rten Nordheim (cherry picked from commit ddb1c75afe474e399fe9f5f839a9ac3873dee247) Reviewed-by: Qt Cherry-pick Bot --- src/corelib/tools/qcryptographichash.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/corelib/tools/qcryptographichash.cpp b/src/corelib/tools/qcryptographichash.cpp index 63ed6123c67..2d650f75e3d 100644 --- a/src/corelib/tools/qcryptographichash.cpp +++ b/src/corelib/tools/qcryptographichash.cpp @@ -593,12 +593,15 @@ QCryptographicHashPrivate::EVP::EVP(QCryptographicHash::Algorithm method) * algorithm available. */ legacyProvider = OSSL_PROVIDER_ptr(OSSL_PROVIDER_load(nullptr, "legacy")); - defaultProvider = OSSL_PROVIDER_ptr(OSSL_PROVIDER_load(nullptr, "default")); - if (!legacyProvider || !defaultProvider) + if (!legacyProvider) return; } + defaultProvider = OSSL_PROVIDER_ptr(OSSL_PROVIDER_load(nullptr, "default")); + if (!defaultProvider) + return; + context = EVP_MD_CTX_ptr(EVP_MD_CTX_new()); if (!context) {