aboutsummaryrefslogtreecommitdiffstats
path: root/epan/secrets.c
diff options
context:
space:
mode:
authorGerald Combs <gerald@wireshark.org>2019-07-31 12:26:14 -0700
committerGerald Combs <gerald@wireshark.org>2019-08-01 16:24:14 +0000
commit1b1de214c40bf3c35414dd01992bbc331663497e (patch)
tree58eb738fc9a29a62697277dfcd12577e7ca5a7d6 /epan/secrets.c
parent6b4264cb2677b701e4a4540a5e177624d2c67099 (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.c10
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:");