1
0
Fork 0
mirror of git://git.gnupg.org/gnupg.git synced 2025-07-02 22:46:30 +02:00

Fixed segv in gpg-agent (command marktrusted).

Replaced almost all free by xfree.
Translation fixes.
This commit is contained in:
Werner Koch 2008-05-27 12:03:50 +00:00
parent 3d39dc13d0
commit 138bf2dc15
46 changed files with 194 additions and 114 deletions

View file

@ -1,3 +1,30 @@
2008-05-27 Werner Koch <wk@g10code.com>
* trustlist.c (insert_colons): Fix stupidly wrong allocation
computation.
2008-05-26 Werner Koch <wk@g10code.com>
* gpg-agent.c (main): Re-initialize default assuan log stream if a
log file is used.
* trustlist.c (agent_marktrusted): Use xtryasprintf and xfree.
* gpg-agent.c (main, agent_deinit_default_ctrl): Always use xfree
because our asprintf is mapped to an xmalloc style function in
util.h. Replace xtrdup by xtrystrdup.
* w32main.c (build_argv): Ditto.
* preset-passphrase.c (preset_passphrase): Ditto.
* divert-scd.c (ask_for_card): Ditto.
* command.c (option_handler): Ditto.
* command-ssh.c (ssh_handler_request_identities): Ditto.
* call-pinentry.c (start_pinentry): Ditto.
* gpg-agent.c (start_connection_thread)
(start_connection_thread_ssh): Use pth_thread_id for useful output
under W32.
(pth_thread_id) [!PTH_HAVE_PTH_THREAD_ID]: New.
2008-03-17 Werner Koch <wk@g10code.com>
* agent.h (agent_inq_pinentry_launched): New prototype.

View file

@ -319,7 +319,7 @@ start_pinentry (ctrl_t ctrl)
return unlock_pinentry (out_of_core ());
rc = assuan_transact (entry_ctx, optstr, NULL, NULL, NULL, NULL, NULL,
NULL);
free (optstr);
xfree (optstr);
if (rc)
return unlock_pinentry (rc);
}
@ -373,7 +373,7 @@ start_pinentry (ctrl_t ctrl)
{
assuan_transact (entry_ctx, optstr, NULL, NULL, NULL, NULL, NULL,
NULL);
free (optstr);
xfree (optstr);
}
}

View file

@ -1960,7 +1960,7 @@ ssh_handler_request_identities (ctrl_t ctrl,
if (ctrl_fp)
fclose (ctrl_fp);
free (key_directory);
xfree (key_directory);
xfree (key_path);
xfree (buffer);
xfree (key_type);
@ -2430,7 +2430,7 @@ ssh_identity_register (ctrl_t ctrl, gcry_sexp_t key, int ttl)
xfree (pi);
xfree (buffer);
xfree (comment);
free (description); /* (asprintf allocated, thus regular free.) */
xfree (description);
return err;
}

View file

@ -1422,8 +1422,8 @@ option_handler (assuan_context_t ctx, const char *key, const char *value)
if (!strcmp (key, "display"))
{
if (ctrl->display)
free (ctrl->display);
ctrl->display = strdup (value);
xfree (ctrl->display);
ctrl->display = xtrystrdup (value);
if (!ctrl->display)
return out_of_core ();
}
@ -1432,8 +1432,8 @@ option_handler (assuan_context_t ctx, const char *key, const char *value)
if (!opt.keep_tty)
{
if (ctrl->ttyname)
free (ctrl->ttyname);
ctrl->ttyname = strdup (value);
xfree (ctrl->ttyname);
ctrl->ttyname = xtrystrdup (value);
if (!ctrl->ttyname)
return out_of_core ();
}
@ -1443,8 +1443,8 @@ option_handler (assuan_context_t ctx, const char *key, const char *value)
if (!opt.keep_tty)
{
if (ctrl->ttytype)
free (ctrl->ttytype);
ctrl->ttytype = strdup (value);
xfree (ctrl->ttytype);
ctrl->ttytype = xtrystrdup (value);
if (!ctrl->ttytype)
return out_of_core ();
}
@ -1452,32 +1452,32 @@ option_handler (assuan_context_t ctx, const char *key, const char *value)
else if (!strcmp (key, "lc-ctype"))
{
if (ctrl->lc_ctype)
free (ctrl->lc_ctype);
ctrl->lc_ctype = strdup (value);
xfree (ctrl->lc_ctype);
ctrl->lc_ctype = xtrystrdup (value);
if (!ctrl->lc_ctype)
return out_of_core ();
}
else if (!strcmp (key, "lc-messages"))
{
if (ctrl->lc_messages)
free (ctrl->lc_messages);
ctrl->lc_messages = strdup (value);
xfree (ctrl->lc_messages);
ctrl->lc_messages = xtrystrdup (value);
if (!ctrl->lc_messages)
return out_of_core ();
}
else if (!strcmp (key, "xauthority"))
{
if (ctrl->xauthority)
free (ctrl->xauthority);
ctrl->xauthority = strdup (value);
xfree (ctrl->xauthority);
ctrl->xauthority = xtrystrdup (value);
if (!ctrl->xauthority)
return out_of_core ();
}
else if (!strcmp (key, "pinentry-user-data"))
{
if (ctrl->pinentry_user_data)
free (ctrl->pinentry_user_data);
ctrl->pinentry_user_data = strdup (value);
xfree (ctrl->pinentry_user_data);
ctrl->pinentry_user_data = xtrystrdup (value);
if (!ctrl->pinentry_user_data)
return out_of_core ();
}
@ -1515,7 +1515,7 @@ io_monitor (assuan_context_t ctx, int direction,
const char *line, size_t linelen)
{
ctrl_t ctrl = assuan_get_pointer (ctx);
/* Note that we only check for the uppercase name. This allows to
see the logging for debugging if using a non-upercase command
name. */

View file

@ -120,7 +120,7 @@ ask_for_card (ctrl_t ctrl, const unsigned char *shadow_info, char **r_kid)
else
{
rc = agent_get_confirmation (ctrl, desc, NULL, NULL);
free (desc);
xfree (desc);
}
}
if (rc)
@ -293,7 +293,7 @@ getpin_cb (void *opaque, const char *info, char *buf, size_t maxbuf)
info? "')":"") < 0)
desc = NULL;
rc = agent_askpin (ctrl, desc?desc:info, prompt, NULL, pi);
free (desc);
xfree (desc);
}
if (!rc)

View file

@ -263,6 +263,13 @@ static int fixed_gcry_pth_init (void)
}
#ifndef PTH_HAVE_PTH_THREAD_ID
static unsigned long pth_thread_id (void)
{
return (unsigned long)pth_self ();
}
#endif
/*
@ -840,6 +847,7 @@ main (int argc, char **argv )
|JNLIB_LOG_WITH_TIME
|JNLIB_LOG_WITH_PID));
current_logfile = xstrdup (logfile);
assuan_set_assuan_log_stream (log_get_stream ());
}
/* Make sure that we have a default ttyname. */
@ -1034,11 +1042,11 @@ main (int argc, char **argv )
printf ("%s; export SSH_AGENT_PID;\n", infostr_ssh_pid);
}
}
free (infostr); /* (Note that a vanilla free is here correct.) */
xfree (infostr);
if (opt.ssh_support)
{
free (infostr_ssh_sock);
free (infostr_ssh_pid);
xfree (infostr_ssh_sock);
xfree (infostr_ssh_pid);
}
exit (0);
}
@ -1132,31 +1140,33 @@ agent_init_default_ctrl (ctrl_t ctrl)
and the request will fail anyway shortly after this
initialization. */
if (ctrl->display)
free (ctrl->display);
ctrl->display = default_display? strdup (default_display) : NULL;
xfree (ctrl->display);
ctrl->display = default_display? xtrystrdup (default_display) : NULL;
if (ctrl->ttyname)
free (ctrl->ttyname);
ctrl->ttyname = default_ttyname? strdup (default_ttyname) : NULL;
xfree (ctrl->ttyname);
ctrl->ttyname = default_ttyname? xtrystrdup (default_ttyname) : NULL;
if (ctrl->ttytype)
free (ctrl->ttytype);
ctrl->ttytype = default_ttytype? strdup (default_ttytype) : NULL;
xfree (ctrl->ttytype);
ctrl->ttytype = default_ttytype? xtrystrdup (default_ttytype) : NULL;
if (ctrl->lc_ctype)
free (ctrl->lc_ctype);
ctrl->lc_ctype = default_lc_ctype? strdup (default_lc_ctype) : NULL;
xfree (ctrl->lc_ctype);
ctrl->lc_ctype = default_lc_ctype? xtrystrdup (default_lc_ctype) : NULL;
if (ctrl->lc_messages)
free (ctrl->lc_messages);
ctrl->lc_messages = default_lc_messages? strdup (default_lc_messages) : NULL;
xfree (ctrl->lc_messages);
ctrl->lc_messages = default_lc_messages? xtrystrdup (default_lc_messages)
/**/ : NULL;
if (ctrl->xauthority)
free (ctrl->xauthority);
ctrl->xauthority = default_xauthority? strdup (default_xauthority) : NULL;
xfree (ctrl->xauthority);
ctrl->xauthority = default_xauthority? xtrystrdup (default_xauthority)
/**/: NULL;
if (ctrl->pinentry_user_data)
free (ctrl->pinentry_user_data);
xfree (ctrl->pinentry_user_data);
ctrl->pinentry_user_data = NULL;
}
@ -1165,19 +1175,19 @@ static void
agent_deinit_default_ctrl (ctrl_t ctrl)
{
if (ctrl->display)
free (ctrl->display);
xfree (ctrl->display);
if (ctrl->ttyname)
free (ctrl->ttyname);
xfree (ctrl->ttyname);
if (ctrl->ttytype)
free (ctrl->ttytype);
xfree (ctrl->ttytype);
if (ctrl->lc_ctype)
free (ctrl->lc_ctype);
xfree (ctrl->lc_ctype);
if (ctrl->lc_messages)
free (ctrl->lc_messages);
xfree (ctrl->lc_messages);
if (ctrl->xauthority)
free (ctrl->xauthority);
xfree (ctrl->xauthority);
if (ctrl->pinentry_user_data)
free (ctrl->pinentry_user_data);
xfree (ctrl->pinentry_user_data);
}
/* Reread parts of the configuration. Note, that this function is
@ -1622,12 +1632,12 @@ start_connection_thread (void *arg)
agent_init_default_ctrl (ctrl);
if (opt.verbose)
log_info (_("handler 0x%lx for fd %d started\n"),
(long)pth_self (), FD2INT(ctrl->thread_startup.fd));
pth_thread_id (), FD2INT(ctrl->thread_startup.fd));
start_command_handler (ctrl, GNUPG_INVALID_FD, ctrl->thread_startup.fd);
if (opt.verbose)
log_info (_("handler 0x%lx for fd %d terminated\n"),
(long)pth_self (), FD2INT(ctrl->thread_startup.fd));
pth_thread_id (), FD2INT(ctrl->thread_startup.fd));
agent_deinit_default_ctrl (ctrl);
xfree (ctrl);
@ -1647,12 +1657,12 @@ start_connection_thread_ssh (void *arg)
agent_init_default_ctrl (ctrl);
if (opt.verbose)
log_info (_("ssh handler 0x%lx for fd %d started\n"),
(long)pth_self (), FD2INT(ctrl->thread_startup.fd));
pth_thread_id (), FD2INT(ctrl->thread_startup.fd));
start_command_handler_ssh (ctrl, ctrl->thread_startup.fd);
if (opt.verbose)
log_info (_("ssh handler 0x%lx for fd %d terminated\n"),
(long)pth_self (), FD2INT(ctrl->thread_startup.fd));
pth_thread_id (), FD2INT(ctrl->thread_startup.fd));
agent_deinit_default_ctrl (ctrl);
xfree (ctrl);

View file

@ -205,7 +205,7 @@ preset_passphrase (const char *keygrip)
}
wipememory (line, strlen (line));
free (line);
xfree (line);
}
@ -222,7 +222,7 @@ forget_passphrase (const char *keygrip)
gpg_strerror (gpg_error_from_syserror ()));
return;
}
free (line);
xfree (line);
}

View file

@ -463,8 +463,9 @@ insert_colons (const char *string)
{
char *buffer, *p;
size_t n = strlen (string);
size_t nnew = n + (n+1)/2;
p = buffer = xtrymalloc ( n + (n+2)/3 + 1 );
p = buffer = xtrymalloc ( nnew + 1 );
if (!buffer)
return NULL;
while (*string)
@ -478,6 +479,7 @@ insert_colons (const char *string)
}
}
*p = 0;
assert (strlen (buffer) <= nnew);
return buffer;
}
@ -526,7 +528,7 @@ agent_marktrusted (ctrl_t ctrl, const char *name, const char *fpr, int flag)
fprformatted = insert_colons (fpr);
if (!fprformatted)
return out_of_core ();
if (asprintf (&desc,
desc = xtryasprintf (
/* TRANSLATORS: This prompt is shown by the Pinentry
and has one special property: A "%%0A" is used by
Pinentry to insert a line break. The double
@ -539,7 +541,8 @@ agent_marktrusted (ctrl_t ctrl, const char *name, const char *fpr, int flag)
_("Please verify that the certificate identified as:%%0A"
" \"%s\"%%0A"
"has the fingerprint:%%0A"
" %s"), name, fprformatted) < 0 )
" %s"), name, fprformatted);
if (!desc)
{
xfree (fprformatted);
return out_of_core ();
@ -549,7 +552,7 @@ agent_marktrusted (ctrl_t ctrl, const char *name, const char *fpr, int flag)
be hit if the fingerprint matches the one of the CA. The other
button is "the default "Cancel" of the Pinentry. */
err = agent_get_confirmation (ctrl, desc, _("Correct"), NULL);
free (desc);
xfree (desc);
/* If the user did not confirmed this, we return cancel here so that
gpgsm may stop asking further questions. We won't do this for
the second question of course. */
@ -562,7 +565,7 @@ agent_marktrusted (ctrl_t ctrl, const char *name, const char *fpr, int flag)
if (asprintf (&desc,
desc = xtryasprintf (
/* TRANSLATORS: This prompt is shown by the Pinentry
and has one special property: A "%%0A" is used by
Pinentry to insert a line break. The double
@ -574,14 +577,15 @@ agent_marktrusted (ctrl_t ctrl, const char *name, const char *fpr, int flag)
_("Do you ultimately trust%%0A"
" \"%s\"%%0A"
"to correctly certify user certificates?"),
name) < 0 )
name);
if (!desc)
{
xfree (fprformatted);
return out_of_core ();
}
err = agent_get_confirmation (ctrl, desc, _("Yes"), _("No"));
free (desc);
xfree (desc);
if (err)
{
xfree (fprformatted);

View file

@ -92,10 +92,10 @@ build_argv (char *cmdline_arg, int reserved)
}
}
argv = malloc (argc * sizeof *argv);
argv = xtrymalloc (argc * sizeof *argv);
if (!argv)
{
free (cmdline);
xfree (cmdline);
return NULL;
}