From 81d7fbc7cb18153822f20af225c26d5acbaea389 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Thu, 16 Jul 2009 07:40:16 +0000 Subject: [PATCH] Fix bug#1087. --- g10/ChangeLog | 7 ++++++- g10/misc.c | 12 +++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/g10/ChangeLog b/g10/ChangeLog index 3e3d6dbe7..1691b5800 100644 --- a/g10/ChangeLog +++ b/g10/ChangeLog @@ -1,3 +1,8 @@ +2009-07-16 Werner Koch + + * misc.c (has_invalid_email_chars): Let non-ascii characters pass + through. Fixes bug#1087. + 2009-06-24 Werner Koch * 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, - 2007 Free Software Foundation, Inc. + 2007, 2008, 2009 Free Software Foundation, Inc. This file is free software; as a special exception the author gives unlimited permission to copy and/or distribute it, with or without diff --git a/g10/misc.c b/g10/misc.c index 11af251e1..8bc144a58 100644 --- a/g10/misc.c +++ b/g10/misc.c @@ -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 has_invalid_email_chars (const char *s) { @@ -1142,7 +1152,7 @@ has_invalid_email_chars (const char *s) for ( ; *s; s++ ) { if ( *s & 0x80 ) - return 1; + continue; /* We only care about ASCII. */ if ( *s == '@' ) at_seen=1; else if ( !at_seen && !( !!strchr( valid_chars, *s ) || *s == '+' ) )