diff options
Diffstat (limited to '')
-rw-r--r-- | g10/card-util.c | 29 |
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)); |