From b60b337e04f41d4b5262cb068f1bef6f827dba27 Mon Sep 17 00:00:00 2001 From: Daniel-Constantin Mierla Date: Sun, 4 Jan 2015 23:55:18 +0100 Subject: [PATCH] tm: safety check for CRLF at end of custom headers for local requests - if hdrs value is not ending in '\n', add '\r\n' --- modules/tm/t_msgbuilder.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/modules/tm/t_msgbuilder.c b/modules/tm/t_msgbuilder.c index f705b90aebb..ded1b473894 100644 --- a/modules/tm/t_msgbuilder.c +++ b/modules/tm/t_msgbuilder.c @@ -1553,7 +1553,13 @@ char* build_uac_req(str* method, str* headers, str* body, dlg_t* dialog, int bra *len += CONTENT_LENGTH_LEN + content_length.len + CRLF_LEN; /* Content-Length */ *len += ((server_signature && user_agent_hdr.len>0) ? (user_agent_hdr.len + CRLF_LEN) : 0); /* Signature */ - *len += (headers ? headers->len : 0); /* Additional headers */ + if(headers && headers->len>2) { + /* Additional headers */ + *len += headers->len; + /* End of header if missing */ + if(headers->s[headers->len - 1] != '\n') + *len += CRLF_LEN; + } *len += (body ? body->len : 0); /* Message body */ *len += CRLF_LEN; /* End of Header */ @@ -1586,7 +1592,11 @@ char* build_uac_req(str* method, str* headers, str* body, dlg_t* dialog, int bra memapp(w, user_agent_hdr.s, user_agent_hdr.len); memapp(w, CRLF, CRLF_LEN); } - if (headers) memapp(w, headers->s, headers->len); + if(headers && headers->len>2) { + memapp(w, headers->s, headers->len); + if(headers->s[headers->len - 1] != '\n') + memapp(w, CRLF, CRLF_LEN); + } memapp(w, CRLF, CRLF_LEN); if (body) memapp(w, body->s, body->len);