mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-03 22:56:33 +02:00
g10: Avoid memory leaks
* g10/call-agent.c (card_keyinfo_cb): free keyinfo. Restructure to avoid backward gotos. * g10/keyedit.c (menu_set_keyserver_url): properly enclose the block * g10/keygen.c (gen_card_key): free pk and pkt -- Signed-off-by: Jakub Jelen <jjelen@redhat.com> GnuPG-bug-id: 5393 Additional changes: - Restructure to avoid backward gotos. Signed-off-by: Werner Koch <wk@gnupg.org>
This commit is contained in:
parent
25aa353bf8
commit
fa0771f609
3 changed files with 30 additions and 18 deletions
|
@ -1709,6 +1709,7 @@ card_keyinfo_cb (void *opaque, const char *line)
|
|||
struct card_keyinfo_parm_s *parm = opaque;
|
||||
const char *keyword = line;
|
||||
int keywordlen;
|
||||
keypair_info_t keyinfo = NULL;
|
||||
|
||||
for (keywordlen=0; *line && !spacep (line); line++, keywordlen++)
|
||||
;
|
||||
|
@ -1719,7 +1720,6 @@ card_keyinfo_cb (void *opaque, const char *line)
|
|||
{
|
||||
const char *s;
|
||||
int n;
|
||||
keypair_info_t keyinfo;
|
||||
keypair_info_t *l_p = &parm->list;
|
||||
|
||||
while ((*l_p))
|
||||
|
@ -1727,23 +1727,13 @@ card_keyinfo_cb (void *opaque, const char *line)
|
|||
|
||||
keyinfo = xtrycalloc (1, sizeof *keyinfo);
|
||||
if (!keyinfo)
|
||||
{
|
||||
alloc_error:
|
||||
if (!parm->error)
|
||||
parm->error = gpg_error_from_syserror ();
|
||||
return 0;
|
||||
}
|
||||
goto alloc_error;
|
||||
|
||||
for (n=0,s=line; hexdigitp (s); s++, n++)
|
||||
;
|
||||
|
||||
if (n != 40)
|
||||
{
|
||||
parm_error:
|
||||
if (!parm->error)
|
||||
parm->error = gpg_error (GPG_ERR_ASS_PARAMETER);
|
||||
return 0;
|
||||
}
|
||||
goto parm_error;
|
||||
|
||||
memcpy (keyinfo->keygrip, line, 40);
|
||||
keyinfo->keygrip[40] = 0;
|
||||
|
@ -1797,6 +1787,18 @@ card_keyinfo_cb (void *opaque, const char *line)
|
|||
}
|
||||
|
||||
return err;
|
||||
|
||||
alloc_error:
|
||||
xfree (keyinfo);
|
||||
if (!parm->error)
|
||||
parm->error = gpg_error_from_syserror ();
|
||||
return 0;
|
||||
|
||||
parm_error:
|
||||
xfree (keyinfo);
|
||||
if (!parm->error)
|
||||
parm->error = gpg_error (GPG_ERR_ASS_PARAMETER);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue