Package: bug-buddy Version: 2.18.1-2+b1 Severity: normal Tags: patch When the 'bug-buddy' dialogue asks for an email address to use for the bug report's From field, the "Send" button is unavailable until the specified email address is validated. The checking done by the 'check_email' function is too strict, and incorrectly rejects many addresses that are valid.
The attached patch modifies the checks to be more in line with the recommendations in RFC 3696, "Application Techniques for Checking and Transformation of Names" section 3, "Restrictions on email addresses". -- System Information: Debian Release: lenny/sid APT prefers testing APT policy: (500, 'testing') Architecture: powerpc (ppc) Kernel: Linux 2.6.21-2-powerpc Locale: LANG=en_AU.UTF-8, LC_CTYPE=en_AU.UTF-8 (charmap=UTF-8) (ignored: LC_ALL set to en_AU.UTF-8) Shell: /bin/sh linked to /bin/bash Versions of packages bug-buddy depends on: ii gconf2 2.18.0.1-3 GNOME configuration database syste ii gdb 6.4.90.dfsg-1 The GNU Debugger ii libbonobo2-0 2.18.0-2 Bonobo CORBA interfaces library ii libc6 2.6-2 GNU C Library: Shared libraries ii libebook1.2-9 1.10.2-2+b1 Client library for evolution addre ii libgconf2-4 2.18.0.1-3 GNOME configuration database syste ii libglade2-0 1:2.6.1-1 library to load .glade files at ru ii libglib2.0-0 2.12.12-1+b1 The GLib library of C routines ii libgnome-menu2 2.18.3-1 an implementation of the freedeskt ii libgnome2-0 2.18.0-4 The GNOME 2 library - runtime file ii libgnomeui-0 2.18.1-2 The GNOME 2 libraries (User Interf ii libgnomevfs2-0 1:2.18.1-2 GNOME Virtual File System (runtime ii libgtk2.0-0 2.10.13-1 The GTK+ graphical user interface ii libgtop2-7 2.14.9-1 gtop system monitoring library ii liborbit2 1:2.14.7-0.1 libraries for ORBit2 - a CORBA ORB ii libsoup2.2-8 2.2.100-1 an HTTP library implementation in ii libxml2 2.6.29.dfsg-1 GNOME XML library ii scrollkeeper 0.3.14-13 A free electronic cataloging syste bug-buddy recommends no packages. -- no debconf information -- \ "Pinky, are you pondering what I'm pondering?" "I think so, | `\ Brain, but culottes have a tendency to ride up so." -- _Pinky | _o__) and The Brain_ | Ben Finney <[EMAIL PROTECTED]>
diff -ruN bug-buddy-2.18.1/src/bug-buddy.c bug-buddy-2.18.1-email-rfc3696/src/bug-buddy.c --- bug-buddy-2.18.1/src/bug-buddy.c 2007-02-19 04:25:18.000000000 +1100 +++ bug-buddy-2.18.1-email-rfc3696/src/bug-buddy.c 2007-07-19 15:15:49.000000000 +1000 @@ -825,12 +825,9 @@ return FALSE; for (character = local_part; *character; character++) { - /* If character is alphanumeric it is valid. */ - if (g_ascii_isalnum (*character)) - continue; - - /* If character is "-", "_" or "." it is valid. */ - if (*character == '-' || *character == '_' || *character == '.') + /* RFC 3696 says *any* printable ASCII character can + * appear in local-part, subject to quoting rules. */ + if (g_ascii_isprint (*character)) continue; /* Not valid character, not valid local part. */ @@ -905,21 +902,30 @@ { char *local_part; char *domain; - char **parts; + char *address_reversed; + char **parts_reversed; gboolean is_valid; - parts = g_strsplit (address, "@", 2); + /* Split on the *last* '@' character: + * First reverse the address, then split, then reverse each + * part back to normal */ + address_reversed = g_strreverse (address); + parts_reversed = g_strsplit (address_reversed, "@", 2); + domain = g_strreverse (parts_reversed[0]); + local_part = g_strreverse (parts_reversed[1]); + g_strfreev (parts_reversed); + g_strfreev (address_reversed); /* Check we have the 2 parts */ - if (!(local_part = parts[0]) || !(domain = parts[1])) { - g_strfreev (parts); - return FALSE; + if (!(local_part) || !(domain)) { + /* We don't have both parts, address can't be valid */ + is_valid = FALSE; + } else { + /* Check each part is valid */ + is_valid = email_local_part_is_valid (local_part) + && email_domain_is_valid (domain); } - is_valid = email_local_part_is_valid (local_part) - && email_domain_is_valid (domain); - - g_strfreev (parts); return is_valid; }