diff --git a/scd/app-p15.c b/scd/app-p15.c index 3aa8122f5..0530d377c 100644 --- a/scd/app-p15.c +++ b/scd/app-p15.c @@ -3851,6 +3851,7 @@ send_certinfo (app_t app, ctrl_t ctrl, const char *certtype, labelbuf, strlen (labelbuf), NULL, (size_t)0); xfree (buf); + xfree (labelbuf); } return 0; } @@ -5461,7 +5462,7 @@ do_sign (app_t app, ctrl_t ctrl, const char *keyidstr, int hashalgo, if (err) { log_error ("p15: MSE failed: %s\n", gpg_strerror (err)); - return err; + goto leave; } /* Now that we have all the information available run the actual PIN @@ -5500,7 +5501,7 @@ do_sign (app_t app, ctrl_t ctrl, const char *keyidstr, int hashalgo, if (err) { log_error ("p15: MSE failed: %s\n", gpg_strerror (err)); - return err; + goto leave; } if (prkdf->keyalgo == GCRY_PK_RSA && prkdf->keynbits > 2048) diff --git a/scd/app-piv.c b/scd/app-piv.c index ead1b1974..143cc047a 100644 --- a/scd/app-piv.c +++ b/scd/app-piv.c @@ -2175,7 +2175,7 @@ do_sign (app_t app, ctrl_t ctrl, const char *keyidstr, int hashalgo, unsigned char oidbuf[64]; size_t oidbuflen; unsigned char *outdata = NULL; - size_t outdatalen; + size_t outdatalen = 0; const unsigned char *s; size_t n; int keyref, mechanism; @@ -2357,7 +2357,7 @@ do_sign (app_t app, ctrl_t ctrl, const char *keyidstr, int hashalgo, /* Now verify the Application PIN. */ err = verify_chv (app, ctrl, 0x80, force_verify, pincb, pincb_arg); if (err) - return err; + goto leave; /* Build the Dynamic Authentication Template. */ err = concat_tlv_list (0, &apdudata, &apdudatalen, @@ -2403,7 +2403,7 @@ do_sign (app_t app, ctrl_t ctrl, const char *keyidstr, int hashalgo, goto bad_der; log_assert (n >= (rval-s)+rlen); sval = find_tlv (rval+rlen, n-((rval-s)+rlen), 0x02, &slen); - if (!rval) + if (!sval) goto bad_der; rlenx = slenx = 0; if (rlen > slen) diff --git a/scd/command.c b/scd/command.c index 11d61648b..cb0dd379a 100644 --- a/scd/command.c +++ b/scd/command.c @@ -1438,7 +1438,10 @@ cmd_genkey (assuan_context_t ctx, char *line) line = skip_options (line); if (!*line) - return set_error (GPG_ERR_ASS_PARAMETER, "no key number given"); + { + err = set_error (GPG_ERR_ASS_PARAMETER, "no key number given"); + goto leave; + } keyref = line; while (*line && !spacep (line)) line++; @@ -1448,7 +1451,10 @@ cmd_genkey (assuan_context_t ctx, char *line) goto leave; if (!ctrl->card_ctx) - return gpg_error (GPG_ERR_UNSUPPORTED_OPERATION); + { + err = gpg_error (GPG_ERR_UNSUPPORTED_OPERATION); + goto leave; + } keyref = keyref_buffer = xtrystrdup (keyref); if (!keyref)