about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--blaze822.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/blaze822.c b/blaze822.c
index 9a596b6..a96cd11 100644
--- a/blaze822.c
+++ b/blaze822.c
@@ -151,13 +151,26 @@ blaze822_addr(char *s, char **dispo, char **addro)
 	*addr = 0;
 
 	while (*s) {
+	startover:
 		if (*s == '<') {
 			char *c = addr;
 			char *e = addr + sizeof addr;
 
 			s++;
-			while (*s && c < e && *s != '>')
-				*c++ = *s++;
+			while (*s && c < e && *s != '>') {
+				if (*s == '<') {
+					goto startover;
+				} else if (*s == '"') {
+					// local part may be quoted, allow all
+					s++;
+					while (*s && c < e && *s != '"')
+						*c++ = *s++;
+					if (*s == '"')
+						s++;
+				} else {
+					*c++ = *s++;
+				}
+			}
 			if (*s == '>')
 				s++;
 			*c = 0;