From 2b843be5ac9f37c9faf2d9ab720eafceb3d534ad Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Mon, 13 Jan 2020 12:18:53 +0100 Subject: 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 --- scd/app.c | 1 - scd/command.c | 11 +++++++++-- 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; } -- cgit v1.2.3