aboutsummaryrefslogtreecommitdiffstats
path: root/camel/camel-mime-utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'camel/camel-mime-utils.c')
-rw-r--r--camel/camel-mime-utils.c30
1 files changed, 18 insertions, 12 deletions
diff --git a/camel/camel-mime-utils.c b/camel/camel-mime-utils.c
index f2349b7e92..3163e637e4 100644
--- a/camel/camel-mime-utils.c
+++ b/camel/camel-mime-utils.c
@@ -1694,23 +1694,29 @@ header_references_decode(const char *in)
{
const char *inptr = in, *intmp;
struct _header_references *head = NULL, *node;
- char *id, *last;
+ char *id, *word;
if (in == NULL)
return NULL;
- header_decode_lwsp(&inptr);
- while (*inptr == '<') {
- last = inptr;
- id = header_msgid_decode_internal(&inptr);
- if (id) {
- node = g_malloc(sizeof(*node));
- node->next = head;
- head = node;
- node->id = id;
- }
+ while (*inptr) {
header_decode_lwsp(&inptr);
- } while (*inptr == '<' && last != inptr);
+ if (*inptr == '<') {
+ id = header_msgid_decode_internal(&inptr);
+ if (id) {
+ node = g_malloc(sizeof(*node));
+ node->next = head;
+ head = node;
+ node->id = id;
+ }
+ } else {
+ word = header_decode_word(&inptr);
+ if (word)
+ g_free (word);
+ else
+ break;
+ }
+ }
return head;
}