Browse Source

core/parser: more strict parsing of sip uri host

Juha Heinanen 7 years ago
parent
commit
4994960324
1 changed files with 12 additions and 12 deletions
  1. 12 12
      src/core/parser/parse_uri.c

+ 12 - 12
src/core/parser/parse_uri.c

@@ -528,23 +528,23 @@ int parse_uri(char* buf, int len, struct sip_uri* uri)
 				}
 				}
 				break;
 				break;
 			case URI_HOST:
 			case URI_HOST:
-				switch(*p){
-					case '[':
-						state=URI_HOST6_P;
-						break;
-					case ':':
-					case ';':
-					case '?': /* null host name ->invalid */
-					case '&':
-					case '@': /*chars not allowed in hosts names */
+				if(*p == '[') {
+					state = URI_HOST6_P;
+				} else {
+					if(isalnum(*p)) {
+						state = URI_HOST_P;
+					} else {
 						goto error_bad_host;
 						goto error_bad_host;
-					default:
-						state=URI_HOST_P;
+					}
 				}
 				}
 				break;
 				break;
 			case URI_HOST_P:
 			case URI_HOST_P:
-				switch(*p){
+				switch(*p) {
 					check_host_end;
 					check_host_end;
+					default:
+						if(!isalnum(*p) && (*p != '.') && (*p != '-')) {
+							goto error_bad_host;
+						}
 				}
 				}
 				break;
 				break;
 			case URI_HOST6_END:
 			case URI_HOST6_END: