if (skip_header(&value_start, value_end - value_start)) {
if (value_start != value_end && value_end[-1] == '\n')
value_end--;
- value = p_strndup(mail->mail.data_pool, value_start,
- value_end - value_start);
+ value = message_header_strdup(mail->mail.data_pool,
+ value_start,
+ value_end - value_start);
array_append(&header_values, &value, 1);
}
}
struct mail *_mail = &mail->mail.mail;
const char *headers[2], *value;
struct mailbox_header_lookup_ctx *headers_ctx;
- unsigned char *data;
+ const unsigned char *data;
unsigned int field_idx;
string_t *dest;
size_t i, len, len2;
field_idx = get_header_field_idx(_mail->box, field,
MAIL_CACHE_DECISION_TEMP);
- dest = str_new(mail->mail.data_pool, 128);
+ dest = t_str_new(128);
if (mail_cache_lookup_headers(_mail->transaction->cache_view, dest,
_mail->seq, &field_idx, 1) <= 0) {
/* not in cache / error - first see if it's already parsed */
return 0;
}
_mail->transaction->stats.cache_hit_count++;
- data = buffer_get_modifiable_data(dest, &len);
+ data = buffer_get_data(dest, &len);
if (len == 0) {
/* cached as nonexistent. */
/* @UNSAFE */
len2 = get_header_size(dest, i);
- data[i + len2] = '\0';
- value = (const char *)data + i;
+ value = message_header_strdup(mail->mail.data_pool,
+ data + i, len2);
i += len2 + 1;
array_append(&header_values, &value, 1);