diff options
author | Werner Koch <[email protected]> | 2020-01-13 11:18:53 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2020-01-13 11:18:53 +0000 |
commit | 2b843be5ac9f37c9faf2d9ab720eafceb3d534ad (patch) | |
tree | 77d3f671025561be8ca6eba57cb90c702fcec875 | |
parent | scd: Make SERIALNO --all work correctly and use it. (diff) | |
download | gnupg-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.c | 1 | ||||
-rw-r--r-- | scd/command.c | 11 |
2 files changed, 9 insertions, 3 deletions
@@ -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; } |