aboutsummaryrefslogtreecommitdiffstats
path: root/g10/misc.c
diff options
context:
space:
mode:
Diffstat (limited to 'g10/misc.c')
-rw-r--r--g10/misc.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/g10/misc.c b/g10/misc.c
index cbaee08b5..5325faab9 100644
--- a/g10/misc.c
+++ b/g10/misc.c
@@ -1248,6 +1248,17 @@ unescape_percent_string (const unsigned char *s)
}
+/* Check whether the string has characters not valid in an RFC822
+ address. To cope with OpenPGP we ignore allow non-ascii characters
+ so that for example umlauts are legal in an email address. An
+ OpenPGP user ID must be utf-8 encoded and tehre is no strict
+ requirement for RFC-822. Thus to avoid IDNA encoding we put the
+ address verbatim as utf-8 into the user ID under the assumtiopn
+ that mail programs etc handle IDNA at a lower level and take
+ OpenPGP user IDS as utf-8. Note that we can't do an utf-8 encoding
+ checking here becuase in keygen.c this function is called with the
+ native encoding and native to utf-8 encoding is done only after
+ checking. */
int
has_invalid_email_chars (const char *s)
{
@@ -1257,8 +1268,8 @@ has_invalid_email_chars (const char *s)
for ( ; *s; s++ )
{
- if ( *s & 0x80 )
- return 1;
+ if ( (*s & 0x80) )
+ continue; /* We only care about ASCII. */
if ( *s == '@' )
at_seen=1;
else if ( !at_seen && !( !!strchr( valid_chars, *s ) || *s == '+' ) )