{
const uschar * list = rblock->extra_headers;
int sep = '\n';
- uschar * s;
+ uschar * s, * t;
int slen;
while ((s = string_nextinlist(&list, &sep, NULL, 0)))
- if (!(s = expand_string(s)))
+ if (!(s = expand_string(t = s)))
{
if (!f.expand_string_forcedfail)
{
addr->message = string_sprintf(
"%s router failed to expand add_headers item \"%s\": %s",
- rblock->name, s, expand_string_message);
+ rblock->name, t, expand_string_message);
return DEFER;
}
}
shared with other addresses. The output function outputs them in reverse
order. */
- header_line * h = store_get(sizeof(header_line));
+ header_line * h = store_get(sizeof(header_line), FALSE);
/* We used to use string_sprintf() to add the newline if needed, but that
causes problems if the header line is exceedingly long (e.g. adding
h->text = s;
else
{
- h->text = store_get(slen+2);
+ h->text = store_get(slen+2, is_tainted(s));
memcpy(h->text, s, slen);
h->text[slen++] = '\n';
h->text[slen] = 0;
{
const uschar * list = rblock->remove_headers;
int sep = ':';
- uschar * s;
+ uschar * s, * t;
gstring * g = NULL;
if (*remove_headers)
g = string_cat(NULL, *remove_headers);
while ((s = string_nextinlist(&list, &sep, NULL, 0)))
- if (!(s = expand_string(s)))
+ if (!(s = expand_string(t = s)))
{
if (!f.expand_string_forcedfail)
{
addr->message = string_sprintf(
"%s router failed to expand remove_headers item \"%s\": %s",
- rblock->name, s, expand_string_message);
+ rblock->name, t, expand_string_message);
return DEFER;
}
}