aboutsummaryrefslogtreecommitdiffstats
path: root/g10/card-util.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--g10/card-util.c29
1 files changed, 26 insertions, 3 deletions
diff --git a/g10/card-util.c b/g10/card-util.c
index de445b796..c56ab24aa 100644
--- a/g10/card-util.c
+++ b/g10/card-util.c
@@ -169,8 +169,7 @@ print_sha1_fpr_colon (FILE *fp, const unsigned char *fpr)
static void
print_name (FILE *fp, const char *text, const char *name)
{
- tty_fprintf (fp, text);
-
+ tty_fprintf (fp, "%s", text);
/* FIXME: tty_printf_utf8_string2 eats everything after and
including an @ - e.g. when printing an url. */
@@ -192,7 +191,7 @@ print_isoname (FILE *fp, const char *text, const char *tag, const char *name)
if (opt.with_colons)
fprintf (fp, "%s:", tag);
else
- tty_fprintf (fp, text);
+ tty_fprintf (fp, "%s", text);
if (name && *name)
{
@@ -446,6 +445,14 @@ change_name (void)
if (*p == ' ')
*p = '<';
+ if (strlen (isoname) > 39 )
+ {
+ tty_printf (_("Error: Combined name too long "
+ "(limit is %d characters).\n"), 39);
+ xfree (isoname);
+ return -1;
+ }
+
log_debug ("setting Name to `%s'\n", isoname);
rc = agent_scd_setattr ("DISP-NAME", isoname, strlen (isoname) );
if (rc)
@@ -468,6 +475,14 @@ change_url (void)
trim_spaces (url);
cpr_kill_prompt ();
+ if (strlen (url) > 254 )
+ {
+ tty_printf (_("Error: URL too long "
+ "(limit is %d characters).\n"), 254);
+ xfree (url);
+ return -1;
+ }
+
rc = agent_scd_setattr ("PUBKEY-URL", url, strlen (url) );
if (rc)
log_error ("error setting URL: %s\n", gpg_strerror (rc));
@@ -488,6 +503,14 @@ change_login (void)
trim_spaces (data);
cpr_kill_prompt ();
+ if (strlen (data) > 254 )
+ {
+ tty_printf (_("Error: Login data too long "
+ "(limit is %d characters).\n"), 254);
+ xfree (data);
+ return -1;
+ }
+
rc = agent_scd_setattr ("LOGIN-DATA", data, strlen (data) );
if (rc)
log_error ("error setting login data: %s\n", gpg_strerror (rc));