From 64c5c45e2aa4a12d939680b9d51c8b26d61c5e9d Mon Sep 17 00:00:00 2001 From: NIIBE Yutaka Date: Fri, 14 Sep 2018 07:55:20 +0900 Subject: [PATCH] g10: Fix memory leak in enum_secret_keys. * g10/skclist.c (enum_secret_keys): Don't forget to call free_public_key in the error return paths. -- Reported-by: Philippe Antoine GnuPG-bug-id: 4140 Signed-off-by: NIIBE Yutaka --- g10/skclist.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/g10/skclist.c b/g10/skclist.c index fd747fb2b..d23354968 100644 --- a/g10/skclist.c +++ b/g10/skclist.c @@ -345,7 +345,11 @@ enum_secret_keys (ctrl_t ctrl, void **context, PKT_public_key *sk) /* Make a new context. */ c = xtrycalloc (1, sizeof *c); if (!c) - return gpg_error_from_syserror (); + { + err = gpg_error_from_syserror (); + free_public_key (sk); + return err; + } *context = c; } @@ -363,7 +367,10 @@ enum_secret_keys (ctrl_t ctrl, void **context, PKT_public_key *sk) } if (c->eof) - return gpg_error (GPG_ERR_EOF); + { + free_public_key (sk); + return gpg_error (GPG_ERR_EOF); + } for (;;) { @@ -475,6 +482,7 @@ enum_secret_keys (ctrl_t ctrl, void **context, PKT_public_key *sk) default: /* No more names to check - stop. */ c->eof = 1; + free_public_key (sk); return gpg_error (GPG_ERR_EOF); } }