浏览代码

core: enclose uri in angle brakets for redirect contact header

- safer for uri with parameters and no q
- reported by Dan Bogos
Daniel-Constantin Mierla 12 年之前
父节点
当前提交
74bf08ef30
共有 1 个文件被更改,包括 14 次插入10 次删除
  1. 14 10
      dset.c

+ 14 - 10
dset.c

@@ -461,9 +461,11 @@ char* print_dset(struct sip_msg* msg, int* len)
 
 	if (msg->new_uri.s) {
 		cnt = 1;
-		*len = msg->new_uri.len;
+		*len = msg->new_uri.len + 1 /*'<'*/;
 		if (ruri_q != Q_UNSPECIFIED) {
-			*len += 1 + Q_PARAM_LEN + len_q(ruri_q);
+			*len += Q_PARAM_LEN + len_q(ruri_q);
+		} else {
+			*len += 1 /*'>'*/;
 		}
 	} else {
 		cnt = 0;
@@ -476,9 +478,11 @@ char* print_dset(struct sip_msg* msg, int* len)
 	init_branch_iterator();
 	while ((uri.s = next_branch(&uri.len, &q, 0, 0, 0, 0, 0, 0, 0))) {
 		cnt++;
-		*len += uri.len;
+		*len += uri.len + 1 /*'<'*/;
 		if (q != Q_UNSPECIFIED) {
-			*len += 1 + Q_PARAM_LEN + len_q(q);
+			*len += Q_PARAM_LEN + len_q(q);
+		} else {
+			*len += 1 /*'>'*/;
 		}
 	}
 
@@ -494,9 +498,7 @@ char* print_dset(struct sip_msg* msg, int* len)
 	memcpy(dset, CONTACT, CONTACT_LEN);
 	p = dset + CONTACT_LEN;
 	if (msg->new_uri.s) {
-		if (ruri_q != Q_UNSPECIFIED) {
-			*p++ = '<';
-		}
+		*p++ = '<';
 
 		memcpy(p, msg->new_uri.s, msg->new_uri.len);
 		p += msg->new_uri.len;
@@ -508,6 +510,8 @@ char* print_dset(struct sip_msg* msg, int* len)
 			qbuf = q2str(ruri_q, &qlen);
 			memcpy(p, qbuf, qlen);
 			p += qlen;
+		} else {
+			*p++ = '>';
 		}
 		i = 1;
 	} else {
@@ -521,9 +525,7 @@ char* print_dset(struct sip_msg* msg, int* len)
 			p += CONTACT_DELIM_LEN;
 		}
 
-		if (q != Q_UNSPECIFIED) {
-			*p++ = '<';
-		}
+		*p++ = '<';
 
 		memcpy(p, uri.s, uri.len);
 		p += uri.len;
@@ -534,6 +536,8 @@ char* print_dset(struct sip_msg* msg, int* len)
 			qbuf = q2str(q, &qlen);
 			memcpy(p, qbuf, qlen);
 			p += qlen;
+		} else {
+			*p++ = '>';
 		}
 		i++;
 	}