aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2020-01-13 11:18:53 +0000
committerWerner Koch <[email protected]>2020-01-13 11:18:53 +0000
commit2b843be5ac9f37c9faf2d9ab720eafceb3d534ad (patch)
tree77d3f671025561be8ca6eba57cb90c702fcec875
parentscd: Make SERIALNO --all work correctly and use it. (diff)
downloadgnupg-2b843be5ac9f37c9faf2d9ab720eafceb3d534ad.tar.gz
gnupg-2b843be5ac9f37c9faf2d9ab720eafceb3d534ad.zip
scd: Fix memory leak in command READKEY.
* scd/command.c (cmd_readcert): Replace xstrdup by xtrystrdup. (cmd_readkey): Ditto. Fix memory leak. Signed-off-by: Werner Koch <[email protected]>
-rw-r--r--scd/app.c1
-rw-r--r--scd/command.c11
2 files changed, 9 insertions, 3 deletions
diff --git a/scd/app.c b/scd/app.c
index 86c153676..cc2a549a5 100644
--- a/scd/app.c
+++ b/scd/app.c
@@ -2046,7 +2046,6 @@ app_do_with_keygrip (ctrl_t ctrl, int action, const char *keygrip_str,
int capability)
{
int locked = 0;
- gpg_error_t err;
card_t c;
app_t a, a_prev;
diff --git a/scd/command.c b/scd/command.c
index 08e790992..5dc0ef6a5 100644
--- a/scd/command.c
+++ b/scd/command.c
@@ -519,7 +519,10 @@ cmd_readcert (assuan_context_t ctx, char *line)
if ((rc = open_card (ctrl)))
return rc;
- line = xstrdup (line); /* Need a copy of the line. */
+ line = xtrystrdup (line); /* Need a copy of the line. */
+ if (!line)
+ return gpg_error_from_syserror ();
+
rc = app_readcert (ctrl->card_ctx, ctrl, line, &cert, &ncert);
if (rc)
log_error ("app_readcert failed: %s\n", gpg_strerror (rc));
@@ -634,7 +637,10 @@ cmd_readkey (assuan_context_t ctx, char *line)
opt_info = opt_nokey = 1;
line = skip_options (line);
- line = xstrdup (line); /* Need a copy of the line. */
+
+ line = xtrystrdup (line); /* Need a copy of the line. */
+ if (!line)
+ return gpg_error_from_syserror ();
if (strlen (line) == 40)
{
@@ -689,6 +695,7 @@ cmd_readkey (assuan_context_t ctx, char *line)
leave:
xfree (pk);
+ xfree (line);
return rc;
}