1
0
mirror of git://git.gnupg.org/gnupg.git synced 2024-11-04 20:38:50 +01:00

Fix bug#1087.

This commit is contained in:
Werner Koch 2009-07-16 07:40:16 +00:00
parent bdc004bafe
commit 81d7fbc7cb
2 changed files with 17 additions and 2 deletions

View File

@ -1,3 +1,8 @@
2009-07-16 Werner Koch <wk@g10code.com>
* misc.c (has_invalid_email_chars): Let non-ascii characters pass
through. Fixes bug#1087.
2009-06-24 Werner Koch <wk@g10code.com> 2009-06-24 Werner Koch <wk@g10code.com>
* passphrase.c (passphrase_to_dek): Do not deref a PW of NULL. * passphrase.c (passphrase_to_dek): Do not deref a PW of NULL.
@ -13459,7 +13464,7 @@ Thu Feb 12 22:24:42 1998 Werner Koch (wk@frodo)
Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
2007 Free Software Foundation, Inc. 2007, 2008, 2009 Free Software Foundation, Inc.
This file is free software; as a special exception the author gives This file is free software; as a special exception the author gives
unlimited permission to copy and/or distribute it, with or without unlimited permission to copy and/or distribute it, with or without

View File

@ -1132,6 +1132,16 @@ unescape_percent_string (const unsigned char *s)
} }
/* Check whether the string has characters not valid in an RFC-822
address. To cope with OpenPGP we ignore non-ascii characters
so that for example umlauts are legal in an email address. An
OpenPGP user ID must be utf-8 encoded but there 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 assumption
that mail programs 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 because in keygen.c this function is called with the
native encoding and native to utf-8 encoding is only done later. */
int int
has_invalid_email_chars (const char *s) has_invalid_email_chars (const char *s)
{ {
@ -1142,7 +1152,7 @@ has_invalid_email_chars (const char *s)
for ( ; *s; s++ ) for ( ; *s; s++ )
{ {
if ( *s & 0x80 ) if ( *s & 0x80 )
return 1; continue; /* We only care about ASCII. */
if ( *s == '@' ) if ( *s == '@' )
at_seen=1; at_seen=1;
else if ( !at_seen && !( !!strchr( valid_chars, *s ) || *s == '+' ) ) else if ( !at_seen && !( !!strchr( valid_chars, *s ) || *s == '+' ) )