[BUG] clf logs segfault when capturing a non existant header

Hi Willy,

Please find a small patch to prevent haproxy segfaulting when logging captured headers in CLF format.

Example config to reproduce the bug :
listen test :10080
	log 127.0.0.1 local7 debug err
	mode	http
	option	httplog clf
	capture request header NonExistantHeader len 16

--
Cyril Bont
This commit is contained in:
Cyril Bont 2010-03-13 15:15:07 +01:00 committed by Willy Tarreau
parent 296897f2c6
commit 7f2c53938c
1 changed files with 20 additions and 10 deletions

View File

@ -1018,11 +1018,16 @@ void http_sess_clflog(struct session *s)
for (hdr = 0; hdr < fe->nb_req_cap; hdr++) {
if (h >= sizeof (tmpline) + tmpline - 4)
goto trunc;
*(h++) = ' ';
*(h++) = '\"';
h = encode_string(h, tmpline + sizeof(tmpline) - 2,
'#', hdr_encode_map, txn->req.cap[hdr]);
*(h++) = '\"';
if (txn->req.cap[hdr] != NULL) {
*(h++) = ' ';
*(h++) = '\"';
h = encode_string(h, tmpline + sizeof(tmpline) - 2,
'#', hdr_encode_map, txn->req.cap[hdr]);
*(h++) = '\"';
} else {
memcpy(h, " \"-\"", 4);
h += 4;
}
}
}
@ -1030,11 +1035,16 @@ void http_sess_clflog(struct session *s)
for (hdr = 0; hdr < fe->nb_rsp_cap; hdr++) {
if (h >= sizeof (tmpline) + tmpline - 4)
goto trunc;
*(h++) = ' ';
*(h++) = '\"';
h = encode_string(h, tmpline + sizeof(tmpline) - 2,
'#', hdr_encode_map, txn->rsp.cap[hdr]);
*(h++) = '\"';
if (txn->rsp.cap[hdr] != NULL) {
*(h++) = ' ';
*(h++) = '\"';
h = encode_string(h, tmpline + sizeof(tmpline) - 2,
'#', hdr_encode_map, txn->rsp.cap[hdr]);
*(h++) = '\"';
} else {
memcpy(h, " \"-\"", 4);
h += 4;
}
}
}