git://git.exim.org
/
exim.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
GSASL channel-binding: TLS resumption checks
[exim.git]
/
src
/
src
/
header.c
diff --git
a/src/src/header.c
b/src/src/header.c
index 19dbcc15d789e4b260ff62b246ecc507602a44e7..a6c44fac82d9b383b3881a36a3ada5b79f2a361a 100644
(file)
--- a/
src/src/header.c
+++ b/
src/src/header.c
@@
-93,27
+93,29
@@
static header_line *
header_add_backend(BOOL after, uschar *name, BOOL topnot, int type,
const char *format, va_list ap)
{
header_add_backend(BOOL after, uschar *name, BOOL topnot, int type,
const char *format, va_list ap)
{
-header_line *h, *new;
+header_line *h, *new
= NULL
;
header_line **hptr;
uschar *p, *q;
header_line **hptr;
uschar *p, *q;
-uschar
buffer[HEADER_ADD_BUFFER_SIZE]
;
-gstring gs = { .size = HEADER_ADD_BUFFER_SIZE, .ptr = 0, .s = buf
fer
};
+uschar
* buf = store_get(HEADER_ADD_BUFFER_SIZE, FALSE)
;
+gstring gs = { .size = HEADER_ADD_BUFFER_SIZE, .ptr = 0, .s = buf };
if (!header_last) return NULL;
if (!header_last) return NULL;
-if (!string_vformat(&gs,
FALSE
, format, ap))
+if (!string_vformat(&gs,
SVFMT_REBUFFER
, format, ap))
log_write(0, LOG_MAIN|LOG_PANIC_DIE, "string too long in header_add: "
"%.100s ...", string_from_gstring(&gs));
log_write(0, LOG_MAIN|LOG_PANIC_DIE, "string too long in header_add: "
"%.100s ...", string_from_gstring(&gs));
+
+if (gs.s != buf) store_release_above(buf);
+gstring_release_unused(&gs);
string_from_gstring(&gs);
/* Find where to insert this header */
if (!name)
string_from_gstring(&gs);
/* Find where to insert this header */
if (!name)
- {
if (after)
{
if (after)
{
- hptr = &
(header_last->next)
;
+ hptr = &
header_last->next
;
h = NULL;
}
else
h = NULL;
}
else
@@
-128,7
+130,6
@@
if (!name)
hptr = &header_list->next;
h = *hptr;
}
hptr = &header_list->next;
h = *hptr;
}
- }
else
{
else
{
@@
-159,7
+160,7
@@
else
for (;;)
{
if (!h->next || !header_testname(h, name, len, FALSE)) break;
for (;;)
{
if (!h->next || !header_testname(h, name, len, FALSE)) break;
- hptr = &
(h->next)
;
+ hptr = &
h->next
;
h = h->next;
}
}
h = h->next;
}
}
@@
-168,7
+169,7
@@
else
point, we have hptr pointing to the link field that will point to the new
header, and h containing the following header, or NULL. */
point, we have hptr pointing to the link field that will point to the new
header, and h containing the following header, or NULL. */
-for (p = q =
buffer; *p != 0;
)
+for (p = q =
gs.s; *p; p = q
)
{
for (;;)
{
{
for (;;)
{
@@
-177,17
+178,16
@@
for (p = q = buffer; *p != 0; )
if (*(++q) != ' ' && *q != '\t') break;
}
if (*(++q) != ' ' && *q != '\t') break;
}
- new = store_get(sizeof(header_line));
+ new = store_get(sizeof(header_line)
, FALSE
);
new->text = string_copyn(p, q - p);
new->slen = q - p;
new->type = type;
new->next = h;
*hptr = new;
new->text = string_copyn(p, q - p);
new->slen = q - p;
new->type = type;
new->next = h;
*hptr = new;
- hptr = &
(new->next)
;
+ hptr = &
new->next
;
if (!h) header_last = new;
if (!h) header_last = new;
- p = q;
}
return new;
}
}
return new;
}
@@
-228,7
+228,6
@@
void
header_add_at_position(BOOL after, uschar *name, BOOL topnot, int type,
const char *format, ...)
{
header_add_at_position(BOOL after, uschar *name, BOOL topnot, int type,
const char *format, ...)
{
-header_line * h;
va_list ap;
va_start(ap, format);
(void) header_add_backend(after, name, topnot, type, format, ap);
va_list ap;
va_start(ap, format);
(void) header_add_backend(after, name, topnot, type, format, ap);