From fc48041cd7575f1387ebaf9454d21b1e84a1ec7a Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Wed, 22 Aug 2001 03:43:12 +0000 Subject: [PATCH 1/1] * internet_addressing.c: fixed a bug in process_rfc822_addr() that caused the server to jump into an endless loop when an e-mail address contained unbalanced angle brackets. --- citadel/ChangeLog | 6 +++++- citadel/internet_addressing.c | 15 +++++++++------ 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/citadel/ChangeLog b/citadel/ChangeLog index d3baacd9c..6b0623c5b 100644 --- a/citadel/ChangeLog +++ b/citadel/ChangeLog @@ -1,4 +1,9 @@ $Log$ + Revision 580.26 2001/08/22 03:43:11 ajc + * internet_addressing.c: fixed a bug in process_rfc822_addr() that caused the + server to jump into an endless loop when an e-mail address contained + unbalanced angle brackets. + Revision 580.25 2001/08/15 04:26:02 ajc * Added split horizon and delete-after-spool to the new networker @@ -2684,4 +2689,3 @@ Sat Jul 11 00:20:48 EDT 1998 Nathan Bryant Fri Jul 10 1998 Art Cancro * Initial CVS import - diff --git a/citadel/internet_addressing.c b/citadel/internet_addressing.c index 4e9bc434c..2a3e45d64 100644 --- a/citadel/internet_addressing.c +++ b/citadel/internet_addressing.c @@ -145,6 +145,7 @@ void unfold_rfc822_field(char *field) { void process_rfc822_addr(char *rfc822, char *user, char *node, char *name) { int a; + int lb, rb; strcpy(user, ""); strcpy(node, config.c_fqdn); @@ -152,14 +153,16 @@ void process_rfc822_addr(char *rfc822, char *user, char *node, char *name) /* extract full name - first, it's From minus */ strcpy(name, rfc822); + lb = (-1); + rb = (-1); for (a = 0; a < strlen(name); ++a) { - if (name[a] == '<') { - do { - strcpy(&name[a], &name[a + 1]); - } while ((strlen(name) > 0) && (name[a] != '>')); - strcpy(&name[a], &name[a + 1]); - } + if (name[a] == '<') lb = a; + if (name[a] == '>') rb = a; } + if ( (lb > 0) && (rb > lb) ) { + strcpy(&name[lb - 1], &name[rb + 1]); + } + /* strip anything to the left of a bang */ while ((strlen(name) > 0) && (haschar(name, '!') > 0)) strcpy(name, &name[1]); -- 2.39.2