*/
int mutt_copy_header(FILE *in, struct Email *e, FILE *out, int flags, const char *prefix)
{
+ char *temp_hdr = NULL;
+
if (e->env)
{
flags |= (e->env->irt_changed ? CH_UPDATE_IRT : 0) |
if ((flags & CH_UPDATE_LABEL) && e->env->x_label)
{
e->xlabel_changed = 0;
+ temp_hdr = e->env->x_label;
+ /* env->x_label isn't currently stored with direct references elsewhere.
+ * Context->label_hash strdups the keys. But to be safe, encode a copy */
if (!(flags & CH_DECODE))
- rfc2047_encode(&e->env->x_label, NULL, sizeof("X-Label:"), SendCharset);
- if (mutt_write_one_header(out, "X-Label", e->env->x_label, flags & CH_PREFIX ? prefix : 0,
+ {
+ temp_hdr = mutt_str_strdup(temp_hdr);
+ rfc2047_encode(&temp_hdr, NULL, sizeof("X-Label:"), SendCharset);
+ }
+ if (mutt_write_one_header(out, "X-Label", temp_hdr, flags & CH_PREFIX ? prefix : 0,
mutt_window_wrap_cols(MuttIndexWindow, Wrap), flags) == -1)
{
return -1;
}
if (!(flags & CH_DECODE))
- rfc2047_decode(&e->env->x_label);
+ FREE(&temp_hdr);
}
if ((flags & CH_NONEWLINE) == 0)