소스 검색

core: safety checks to catch enclosed ipv6 addresses or hostnames in via build

Daniel-Constantin Mierla 7 년 전
부모
커밋
1de15c06b9
1개의 변경된 파일9개의 추가작업 그리고 4개의 파일을 삭제
  1. 9 4
      src/core/msg_translator.c

+ 9 - 4
src/core/msg_translator.c

@@ -2788,10 +2788,15 @@ char* via_builder( unsigned int *len,
 	/* add [] only if ipv6 address is used;
 	 * if using pre-set no check is made */
 	if (send_sock->address.af==AF_INET6) {
-		line_buf[via_prefix_len]='[';
-		line_buf[via_prefix_len+1+address_str->len]=']';
-		extra_len=1;
-		via_len+=2; /* [ ]*/
+		/* lightweight safety checks if brackets set
+		 * or non-ipv6 (e.g., advertised hostname) */
+		if(address_str->s[0] != '['
+				&& memchr(address_str->s, ':', address_str->len)!=NULL) {
+			line_buf[via_prefix_len]='[';
+			line_buf[via_prefix_len+1+address_str->len]=']';
+			extra_len=1;
+			via_len+=2; /* [ ]*/
+		}
 	}
 	memcpy(line_buf+via_prefix_len+extra_len, address_str->s,
 				address_str->len);