diff options
author | Richard Levitte <levitte@openssl.org> | 2018-04-25 13:57:39 +0200 |
---|---|---|
committer | Richard Levitte <levitte@openssl.org> | 2018-04-26 10:39:44 +0200 |
commit | 4977b4e9281c981efcf6a8b31378b8bbd6a8a96f (patch) | |
tree | fc879fb7393c71a6521318b8d544f2d3cf61dd45 /crypto/pem | |
parent | e6a833cb97ed762408b57ea3efa83bd10c1d2a78 (diff) |
PEM_def_callback(): don't loop because of too short password given
That error is already caught by EVP_read_pw_string_min, and causes
this function to return -1, so the code detecting too short passwords
in this function is practically dead.
Fixes #5465
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6080)
Diffstat (limited to 'crypto/pem')
-rw-r--r-- | crypto/pem/pem_lib.c | 33 |
1 files changed, 12 insertions, 21 deletions
diff --git a/crypto/pem/pem_lib.c b/crypto/pem/pem_lib.c index 6e66e9d3e9..3be12d661a 100644 --- a/crypto/pem/pem_lib.c +++ b/crypto/pem/pem_lib.c @@ -30,7 +30,7 @@ int pem_check_suffix(const char *pem_str, const char *suffix); int PEM_def_callback(char *buf, int num, int w, void *key) { - int i, j; + int i, min_len; const char *prompt; if (key) { @@ -44,28 +44,19 @@ int PEM_def_callback(char *buf, int num, int w, void *key) if (prompt == NULL) prompt = "Enter PEM pass phrase:"; - for (;;) { - /* - * We assume that w == 0 means decryption, - * while w == 1 means encryption - */ - int min_len = w ? MIN_LENGTH : 0; + /* + * We assume that w == 0 means decryption, + * while w == 1 means encryption + */ + min_len = w ? MIN_LENGTH : 0; - i = EVP_read_pw_string_min(buf, min_len, num, prompt, w); - if (i != 0) { - PEMerr(PEM_F_PEM_DEF_CALLBACK, PEM_R_PROBLEMS_GETTING_PASSWORD); - memset(buf, 0, (unsigned int)num); - return -1; - } - j = strlen(buf); - if (min_len && j < min_len) { - fprintf(stderr, - "phrase is too short, needs to be at least %d chars\n", - min_len); - } else - break; + i = EVP_read_pw_string_min(buf, min_len, num, prompt, w); + if (i != 0) { + PEMerr(PEM_F_PEM_DEF_CALLBACK, PEM_R_PROBLEMS_GETTING_PASSWORD); + memset(buf, 0, (unsigned int)num); + return -1; } - return j; + return strlen(buf); } void PEM_proc_type(char *buf, int type) |