mirror of git://git.gnupg.org/gnupg.git
Assorted memory leak fixes on the error code paths.
-- These are taken from these commits:98c52ae
* card: Intialize pointer to avoid double freefc5fac8
* kbx: Avoid uninitialized readfa0771f
* g10: Avoid memory leaks25aa353
* dirmgr: Avoid double free33a2362
* agent: Fix memory leakse6132bc
* sm: Avoid memory leaks and double double-free2af7bb2
* g10: Fix memory leaks0d2c1e9
* dirmgr: clean up memory on error code paths GnuPG-bug-id: 5393 Signed-off-by: Werner Koch <wk@gnupg.org>
This commit is contained in:
parent
9d63ba2721
commit
b677e2ec98
|
@ -381,7 +381,7 @@ agent_ask_new_passphrase (ctrl_t ctrl, const char *prompt,
|
||||||
if (!pi2)
|
if (!pi2)
|
||||||
{
|
{
|
||||||
err = gpg_error_from_syserror ();
|
err = gpg_error_from_syserror ();
|
||||||
xfree (pi2);
|
xfree (pi);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
pi->max_length = MAX_PASSPHRASE_LEN + 1;
|
pi->max_length = MAX_PASSPHRASE_LEN + 1;
|
||||||
|
|
|
@ -206,7 +206,7 @@ keygripstr_from_pk_file (app_t app, int fid, char *r_gripstr)
|
||||||
|
|
||||||
newlen = 1 + buflen[i] - offset[i];
|
newlen = 1 + buflen[i] - offset[i];
|
||||||
newbuf = xtrymalloc (newlen);
|
newbuf = xtrymalloc (newlen);
|
||||||
if (!newlen)
|
if (!newbuf)
|
||||||
{
|
{
|
||||||
xfree (buffer[0]);
|
xfree (buffer[0]);
|
||||||
xfree (buffer[1]);
|
xfree (buffer[1]);
|
||||||
|
|
|
@ -293,7 +293,6 @@ extract_pss_params (gcry_sexp_t s_sig, int *r_algo, unsigned int *r_saltlen)
|
||||||
if (*r_saltlen < 20)
|
if (*r_saltlen < 20)
|
||||||
{
|
{
|
||||||
log_error ("length of PSS salt too short\n");
|
log_error ("length of PSS salt too short\n");
|
||||||
gcry_sexp_release (s_sig);
|
|
||||||
return gpg_error (GPG_ERR_DIGEST_ALGO);
|
return gpg_error (GPG_ERR_DIGEST_ALGO);
|
||||||
}
|
}
|
||||||
if (!*r_algo)
|
if (!*r_algo)
|
||||||
|
|
|
@ -203,6 +203,7 @@ encrypt_dek (const DEK dek, ksba_cert_t cert, unsigned char **encval)
|
||||||
rc = encode_session_key (dek, &s_data);
|
rc = encode_session_key (dek, &s_data);
|
||||||
if (rc)
|
if (rc)
|
||||||
{
|
{
|
||||||
|
gcry_sexp_release (s_pkey);
|
||||||
log_error ("encode_session_key failed: %s\n", gpg_strerror (rc));
|
log_error ("encode_session_key failed: %s\n", gpg_strerror (rc));
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
25
sm/server.c
25
sm/server.c
|
@ -724,8 +724,13 @@ cmd_export (assuan_context_t ctx, char *line)
|
||||||
|
|
||||||
if (opt_secret)
|
if (opt_secret)
|
||||||
{
|
{
|
||||||
if (!list || !*list->d)
|
if (!list)
|
||||||
return set_error (GPG_ERR_NO_DATA, "No key given");
|
return set_error (GPG_ERR_NO_DATA, "No key given");
|
||||||
|
if (!*list->d)
|
||||||
|
{
|
||||||
|
free_strlist (list);
|
||||||
|
return set_error (GPG_ERR_NO_DATA, "No key given");
|
||||||
|
}
|
||||||
if (list->next)
|
if (list->next)
|
||||||
return set_error (GPG_ERR_TOO_MANY, "Only one key allowed");
|
return set_error (GPG_ERR_TOO_MANY, "Only one key allowed");
|
||||||
}
|
}
|
||||||
|
@ -948,17 +953,27 @@ do_listkeys (assuan_context_t ctx, char *line, int mode)
|
||||||
int outfd = translate_sys2libc_fd (assuan_get_output_fd (ctx), 1);
|
int outfd = translate_sys2libc_fd (assuan_get_output_fd (ctx), 1);
|
||||||
|
|
||||||
if ( outfd == -1 )
|
if ( outfd == -1 )
|
||||||
return set_error (GPG_ERR_ASS_NO_OUTPUT, NULL);
|
{
|
||||||
|
free_strlist (list);
|
||||||
|
return set_error (GPG_ERR_ASS_NO_OUTPUT, NULL);
|
||||||
|
}
|
||||||
fp = es_fdopen_nc (outfd, "w");
|
fp = es_fdopen_nc (outfd, "w");
|
||||||
if (!fp)
|
if (!fp)
|
||||||
return set_error (gpg_err_code_from_syserror (), "es_fdopen() failed");
|
{
|
||||||
|
free_strlist (list);
|
||||||
|
return set_error (gpg_err_code_from_syserror (),
|
||||||
|
"es_fdopen() failed");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
fp = es_fopencookie (ctx, "w", data_line_cookie_functions);
|
fp = es_fopencookie (ctx, "w", data_line_cookie_functions);
|
||||||
if (!fp)
|
if (!fp)
|
||||||
return set_error (GPG_ERR_ASS_GENERAL,
|
{
|
||||||
"error setting up a data stream");
|
free_strlist (list);
|
||||||
|
return set_error (GPG_ERR_ASS_GENERAL,
|
||||||
|
"error setting up a data stream");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ctrl->with_colons = 1;
|
ctrl->with_colons = 1;
|
||||||
|
|
Loading…
Reference in New Issue