diff --git a/scd/app-openpgp.c b/scd/app-openpgp.c index 39b390b3e..205d4e579 100644 --- a/scd/app-openpgp.c +++ b/scd/app-openpgp.c @@ -3214,7 +3214,7 @@ do_change_pin (app_t app, ctrl_t ctrl, const char *chvnostr, char *result1 = NULL; char *result2 = NULL; char *buffer = NULL; - size_t resultlen1, resultlen2, bufferlen=0; + size_t resultlen1, resultlen2=0, bufferlen=0; rc = pin2hash_if_kdf (app, 0, resetcode, &result1, &resultlen1); if (!rc) @@ -3240,9 +3240,6 @@ do_change_pin (app_t app, ctrl_t ctrl, const char *chvnostr, } else if (set_resetcode) { - char *buffer = NULL; - size_t bufferlen; - if (strlen (pinvalue) < 8) { log_error (_("Reset Code is too short; minimum length is %d\n"), 8); @@ -3250,13 +3247,16 @@ do_change_pin (app_t app, ctrl_t ctrl, const char *chvnostr, } else { + char *buffer = NULL; + size_t bufferlen; + rc = pin2hash_if_kdf (app, 0, pinvalue, &buffer, &bufferlen); if (!rc) rc = iso7816_put_data (app_get_slot (app), 0, 0xD3, buffer, bufferlen); - } - wipe_and_free (buffer, bufferlen); + wipe_and_free (buffer, bufferlen); + } } else if (reset_mode) { @@ -3319,7 +3319,7 @@ do_change_pin (app_t app, ctrl_t ctrl, const char *chvnostr, { char *buffer1 = NULL; char *buffer2 = NULL; - size_t bufferlen1, bufferlen2; + size_t bufferlen1, bufferlen2 = 0; rc = pin2hash_if_kdf (app, chvno, oldpinvalue, &buffer1, &bufferlen1); if (!rc) diff --git a/scd/command.c b/scd/command.c index 02cf8907f..018058b73 100644 --- a/scd/command.c +++ b/scd/command.c @@ -2497,7 +2497,7 @@ void pincache_put (ctrl_t ctrl, int slot, const char *appname, const char *pinref, const char *pin, unsigned int pinlen) { - gpg_error_t err; + gpg_error_t err = 0; assuan_context_t ctx; char line[950]; gcry_cipher_hd_t cipherhd = NULL;