From: Timo Sirainen Date: Wed, 10 Sep 2003 02:16:30 +0000 (+0300) Subject: get_header() returned only first line of multiline headers X-Git-Tag: 1.1.alpha1~4335 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8f61542ca70f3f0dda15630447a00877b132efa8;p=thirdparty%2Fdovecot%2Fcore.git get_header() returned only first line of multiline headers --HG-- branch : HEAD --- diff --git a/src/lib-storage/index/index-mail-headers.c b/src/lib-storage/index/index-mail-headers.c index 543f6cba4e..27f7f3bd9b 100644 --- a/src/lib-storage/index/index-mail-headers.c +++ b/src/lib-storage/index/index-mail-headers.c @@ -573,6 +573,7 @@ const char *index_mail_get_header(struct mail *_mail, const char *field) { struct index_mail *mail = (struct index_mail *) _mail; struct cached_header *hdr; + const unsigned char *start, *end, *p; const char *arr[2]; int idx; @@ -600,8 +601,19 @@ const char *index_mail_get_header(struct mail *_mail, const char *field) } } - return hdr->value_idx == 0 ? NULL : - t_strcut(str_c(mail->data.header_data) + hdr->value_idx, '\n'); + if (hdr->value_idx == 0) + return NULL; + + start = str_data(mail->data.header_data); + end = start + str_len(mail->data.header_data); + for (p = start + hdr->value_idx; p != end; p++) { + if (*p == '\n') { + if (p+1 == end || (p[1] != ' ' && p[1] != '\t')) + break; + } + } + + return t_strdup_until(start, p); } struct istream *index_mail_get_headers(struct mail *_mail,