summary refs log tree commit diff stats
path: root/src/common
diff options
context:
space:
mode:
authorDiogo Sousa <diogogsousa@gmail.com>2013-06-17 22:43:18 +0100
committerDiogo Sousa <diogogsousa@gmail.com>2013-06-17 22:43:18 +0100
commit55734baed84e7006e919dc02ac8d352020bfebc0 (patch)
tree5e6015da272857b468c5b59f7c89597c355077c2 /src/common
parente4b6f4b375f292ceb2e8b6c338a746937f058ae5 (diff)
Fix IPv6 addr matching in url: must be enclosed in [].
Diffstat (limited to 'src/common')
-rw-r--r--src/common/url.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/src/common/url.c b/src/common/url.c
index 3d38083c..d3456f5f 100644
--- a/src/common/url.c
+++ b/src/common/url.c
@@ -306,7 +306,7 @@ url_last (int *lstart, int *lend)
 }
 
 static int
-do_an_re(const char *word,int *start, int *end, int *type)
+do_an_re(const char *word, int *start, int *end, int *type)
 {
 	typedef struct func_s {
 		GRegex *(*fn)(void);
@@ -354,6 +354,8 @@ do_an_re(const char *word,int *start, int *end, int *type)
 #define IPV6ADDR "((" IPV6GROUP "(:" IPV6GROUP "){7})"	\
 	         "|(" IPV6GROUP "(:" IPV6GROUP ")*:(:" IPV6GROUP ")+))" /* with :: compression */
 #define HOST "(" DOMAIN TLD "|" IPADDR "|" IPV6ADDR ")"
+/* In urls the IPv6 must be enclosed in square brackets */
+#define HOST_URL "(" DOMAIN TLD "|" IPADDR "|" "\\[" IPV6ADDR "\\]" ")"
 #define OPT_PORT "(:[1-9][0-9]{0,4})?"
 
 GRegex *
@@ -453,7 +455,7 @@ struct
 	{ "gtalk",     "",  URI_PATH },
 	{ "steam",     "",  URI_PATH },
 	{ "file",      "/", URI_PATH },
-	{ NULL, "", 0}
+	{ NULL,        "",  0}
 };
 
 static GRegex *
@@ -469,7 +471,7 @@ re_url (void)
 	grist_gstr = g_string_new (NULL);
 
 	/* Add regex "host/path", representing a "schemeless" url */
-	g_string_append (grist_gstr, "(" HOST OPT_PORT "/" "(" PATH ")?" ")");
+	g_string_append (grist_gstr, "(" HOST_URL OPT_PORT "/" "(" PATH ")?" ")");
 
 	for (i = 0; uri[i].scheme; i++)
 	{
@@ -485,7 +487,7 @@ re_url (void)
 			g_string_append (grist_gstr, USERINFO "?");
 
 		if (uri[i].flags & URI_AUTHORITY)
-			g_string_append (grist_gstr, HOST OPT_PORT);
+			g_string_append (grist_gstr, HOST_URL OPT_PORT);
 		
 		if (uri[i].flags & URI_PATH)
 		{
@@ -500,7 +502,6 @@ re_url (void)
 			g_free(sep_escaped);
 		}
 
-
 		g_string_append(grist_gstr, ")");
 	}
 
@@ -512,7 +513,7 @@ re_url (void)
 }
 
 /*	EMAIL description --- */
-#define EMAIL "[a-z][-_a-z0-9]+@" "(" HOST ")"
+#define EMAIL "[a-z][-_a-z0-9]+@" "(" HOST_URL ")"
 
 static GRegex *
 re_email (void)