From 4e5bda76552e31195db58052bc670cb7049d3002 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Mon, 15 Apr 2002 10:11:11 +0000 Subject: [PATCH] * command.c (cmd_pksign, cmd_pkdecrypt): Use a copy of the key ID. --- scd/ChangeLog | 4 ++++ scd/command.c | 17 +++++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/scd/ChangeLog b/scd/ChangeLog index bda647334..488b2fe29 100644 --- a/scd/ChangeLog +++ b/scd/ChangeLog @@ -1,3 +1,7 @@ +2002-04-15 Werner Koch + + * command.c (cmd_pksign, cmd_pkdecrypt): Use a copy of the key ID. + 2002-04-12 Werner Koch * scdaemon.c: New option --debug-sc N. diff --git a/scd/command.c b/scd/command.c index 8f005a329..f62baae98 100644 --- a/scd/command.c +++ b/scd/command.c @@ -430,15 +430,23 @@ cmd_pksign (ASSUAN_CONTEXT ctx, char *line) int rc; void *outdata; size_t outdatalen; + char *keyidstr; if ((rc = open_card (ctrl))) return rc; + /* We have to use a copy of the key ID because the function may use + the pin_cb which in turn uses the assuan line buffer and thus + overwriting the original line with the keyid */ + keyidstr = xtrystrdup (line); + if (!keyidstr) + return ASSUAN_Out_Of_Core; rc = card_sign (ctrl->card_ctx, - line, GCRY_MD_SHA1, + keyidstr, GCRY_MD_SHA1, pin_cb, ctx, ctrl->in_data.value, ctrl->in_data.valuelen, &outdata, &outdatalen); + xfree (keyidstr); if (rc) { log_error ("card_sign failed: %s\n", gnupg_strerror (rc)); @@ -464,15 +472,20 @@ cmd_pkdecrypt (ASSUAN_CONTEXT ctx, char *line) int rc; void *outdata; size_t outdatalen; + char *keyidstr; if ((rc = open_card (ctrl))) return rc; + keyidstr = xtrystrdup (line); + if (!keyidstr) + return ASSUAN_Out_Of_Core; rc = card_decipher (ctrl->card_ctx, - line, + keyidstr, pin_cb, ctx, ctrl->in_data.value, ctrl->in_data.valuelen, &outdata, &outdatalen); + xfree (keyidstr); if (rc) { log_error ("card_create_signature failed: %s\n", gnupg_strerror (rc));