diff options
author | Milan Crha <mcrha@redhat.com> | 2023-03-20 10:03:36 +0100 |
---|---|---|
committer | Milan Crha <mcrha@redhat.com> | 2023-03-20 10:05:39 +0100 |
commit | d2cc0aa22cf9218f0a90089bc7e0c0755b2d1e5a (patch) | |
tree | 1685ef5d1d5f210fb370a4aa9606ce124ff1f5fd | |
parent | ab7eb5031fef8d88c00567d19714d5cf1c5d5b01 (diff) | |
download | evolution-d2cc0aa22cf9218f0a90089bc7e0c0755b2d1e5a.tar.gz |
I#2293 - Cannot import pkcs12 with empty password
Closes https://gitlab.gnome.org/GNOME/evolution/-/issues/2293
-rw-r--r-- | src/smime/lib/e-pkcs12.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/smime/lib/e-pkcs12.c b/src/smime/lib/e-pkcs12.c index 3fce513ebe..3209a8659a 100644 --- a/src/smime/lib/e-pkcs12.c +++ b/src/smime/lib/e-pkcs12.c @@ -169,7 +169,7 @@ prompt_for_password (gchar *title, #endif if (PORT_UCS2_ASCIIConversion (toUnicode, (unsigned char *) passwd, len, pwd->data, pwd->len, &pwd->len, swapUnicode) == PR_FALSE) { res = FALSE; - } else if ((pwd->len >= 2) && (pwd->data[pwd->len - 1] || pwd->data[pwd->len - 2])) { + } else if ((!pwd->len) || ((pwd->len >= 2) && (pwd->data[pwd->len - 1] || pwd->data[pwd->len - 2]))) { if (pwd->len + 2 > 3 * len) pwd->data = (unsigned char *) PORT_Realloc (pwd->data, pwd->len + 2); if (!pwd->data) { @@ -270,6 +270,17 @@ import_from_file_helper (EPKCS12 *pkcs12, /* First try without password */ dcx = read_with_password (slot, path, &passwd, &srv, &rv, NULL); + if (!dcx) { + /* Second with an empty password */ + passwd.data = (unsigned char *) "\0\0"; + passwd.len = 2; + + dcx = read_with_password (slot, path, &passwd, &srv, &rv, NULL); + + passwd.data = NULL; + passwd.len = 0; + } + /* if failed, ask for password */ if (!dcx) { passwd.data = NULL; |