diff options
author | Gerald Combs <gerald@wireshark.org> | 2019-07-31 12:26:14 -0700 |
---|---|---|
committer | Gerald Combs <gerald@wireshark.org> | 2019-08-01 16:24:14 +0000 |
commit | 1b1de214c40bf3c35414dd01992bbc331663497e (patch) | |
tree | 58eb738fc9a29a62697277dfcd12577e7ca5a7d6 /epan/secrets.c | |
parent | 6b4264cb2677b701e4a4540a5e177624d2c67099 (diff) |
epan: Work around a p11-kit bug on Windows.
The version of p11-kit that we ship with Windows will crash if we feed
gnutls_pkcs11_add_provider an invalid path. Work around this by checking
for the file's existence ourselves.
Bug: 15957
Change-Id: I81484b8bd8f837a49bc17a6c9cb0b10fd33c3f6e
Reviewed-on: https://code.wireshark.org/review/34144
Petri-Dish: Gerald Combs <gerald@wireshark.org>
Tested-by: Petri Dish Buildbot
Reviewed-by: Peter Wu <peter@lekensteyn.nl>
Reviewed-by: Gerald Combs <gerald@wireshark.org>
Diffstat (limited to 'epan/secrets.c')
-rw-r--r-- | epan/secrets.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/epan/secrets.c b/epan/secrets.c index b253f3fa59..bc84ce64a6 100644 --- a/epan/secrets.c +++ b/epan/secrets.c @@ -366,8 +366,18 @@ uat_pkcs11_libs_load_all(void) for (guint i = 0; i < uat_num_pkcs11_libs; i++) { const pkcs11_lib_record_t *rec = &uat_pkcs11_libs[i]; const char *libname = rec->library_path; +#ifdef WIN32 + // Work around a bug in p11-kit < 0.23.16 on Windows + HMODULE provider_lib = LoadLibraryA(libname); + if (! provider_lib || ! GetProcAddress(provider_lib, "C_GetFunctionList")) { + ret = GNUTLS_E_PKCS11_LOAD_ERROR; + } else { +#endif /* Note: should return success for already loaded libraries. */ ret = gnutls_pkcs11_add_provider(libname, NULL); +#ifdef WIN32 + } +#endif if (ret) { if (!err) { err = g_string_new("Error loading PKCS #11 libraries:"); |