aboutsummaryrefslogtreecommitdiffstats
path: root/scd/command.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2002-04-15 10:11:11 +0000
committerWerner Koch <[email protected]>2002-04-15 10:11:11 +0000
commit4e5bda76552e31195db58052bc670cb7049d3002 (patch)
treed5d3cddb98886b3933fd602433063b8d8f332e4f /scd/command.c
parent* cryptmiss.c: New. (diff)
downloadgnupg-4e5bda76552e31195db58052bc670cb7049d3002.tar.gz
gnupg-4e5bda76552e31195db58052bc670cb7049d3002.zip
* command.c (cmd_pksign, cmd_pkdecrypt): Use a copy of the key ID.
Diffstat (limited to 'scd/command.c')
-rw-r--r--scd/command.c17
1 files changed, 15 insertions, 2 deletions
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));