[gmime] Properly deal with obsolete address routing
- From: Jeffrey Stedfast <fejj src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gmime] Properly deal with obsolete address routing
- Date: Thu, 8 Aug 2013 16:22:14 +0000 (UTC)
commit 0583d117f675b86e8229f6d1209460738716de65
Author: Jeffrey Stedfast <fejj gnome org>
Date: Thu Aug 8 12:21:43 2013 -0400
Properly deal with obsolete address routing
2013-08-08 Jeffrey Stedfast <fejj gnome org>
* gmime/internet-address.c (decode_address): Properly deal with
obsolete routing information.
ChangeLog | 5 ++++
gmime/internet-address.c | 55 +++++++++++++++++++++++++++++++++++++++++++--
tests/test-mime.c | 8 ++++++
3 files changed, 65 insertions(+), 3 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index da3312e..f5cf460 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
2013-08-08 Jeffrey Stedfast <fejj gnome org>
+ * gmime/internet-address.c (decode_address): Properly deal with
+ obsolete routing information.
+
+2013-08-08 Jeffrey Stedfast <fejj gnome org>
+
* README: Bumped version
* configure.ac: Bumped version to 2.6.17
diff --git a/gmime/internet-address.c b/gmime/internet-address.c
index 9a29d8a..ad215dc 100644
--- a/gmime/internet-address.c
+++ b/gmime/internet-address.c
@@ -1417,7 +1417,7 @@ decode_address (const char **in)
* / "." / "[" / "]" ; within a word.
*/
if (*inptr == ':') {
- /* group */
+ /* rfc2822 group */
inptr++;
addr = decode_group (&inptr);
decode_lwsp (&inptr);
@@ -1428,12 +1428,54 @@ decode_address (const char **in)
inptr++;
break;
} else if (*inptr == '<') {
- /* mailbox route-addr */
+ /* rfc2822 angle-addr */
inptr++;
+
+ /* check for obsolete routing... */
+ if (*inptr == '@') {
+ GString *route = g_string_new ("");
+
+ do {
+ inptr++;
+
+ g_string_append_c (route, '@');
+ if (!decode_domain (&inptr, route))
+ break;
+
+ decode_lwsp (&inptr);
+ if (*inptr == ',') {
+ g_string_append_c (route, ',');
+ inptr++;
+ decode_lwsp (&inptr);
+
+ /* obs-domain-lists allow commas with nothing between them...
*/
+ while (*inptr == ',') {
+ inptr++;
+ decode_lwsp (&inptr);
+ }
+ }
+ } while (*inptr == '@');
+
+ if (*inptr != ':') {
+ w(g_warning ("Invalid obs-angle-addr, missing ':': %.*s", inptr -
start, start));
+
+ while (*inptr && *inptr != '>' && *inptr != ',')
+ inptr++;
+
+ if (*inptr == '>')
+ inptr++;
+
+ break;
+ }
+
+ inptr++;
+ }
+
+ /* rfc2822 addr-spec */
addr = decode_addrspec (&inptr);
decode_lwsp (&inptr);
if (*inptr != '>') {
- w(g_warning ("Invalid route-addr, missing closing '>': %.*s",
+ w(g_warning ("Invalid rfc2822 angle-addr, missing closing '>': %.*s",
inptr - start, start));
while (*inptr && *inptr != '>' && *inptr != ',')
@@ -1574,6 +1616,13 @@ internet_address_list_parse_string (const char *str)
decode_lwsp (&inptr);
if (*inptr == ',') {
inptr++;
+ decode_lwsp (&inptr);
+
+ /* obs-mbox-list and obs-addr-list allow for empty members (commas with nothing
between them) */
+ while (*inptr == ',') {
+ inptr++;
+ decode_lwsp (&inptr);
+ }
} else if (*inptr) {
w(g_warning ("Parse error at '%s': expected ','", inptr));
/* try skipping to the next address */
diff --git a/tests/test-mime.c b/tests/test-mime.c
index 43f540c..e080293 100644
--- a/tests/test-mime.c
+++ b/tests/test-mime.c
@@ -194,6 +194,14 @@ static struct {
{ "sdfasf wp pl,c tert wp pl,sffdg rtre op pl",
"sdfasf wp pl, c, sffdg rtre op pl",
"sdfasf wp pl, c, sffdg rtre op pl" },
+
+ /* obsolete routing address syntax tests */
+ { "<@route:user domain com>",
+ "user domain com",
+ "user domain com" },
+ { "<@route1,,@route2,,,@route3:user domain com>",
+ "user domain com",
+ "user domain com" },
};
static struct {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]