"@" parsing within autority when it's valid hierarchical part character 2.2_release submit/tizen_2.2/20130714.150822
authorJihoon Chung <jihoon.chung@samsung.com>
Thu, 6 Jun 2013 11:35:34 +0000 (20:35 +0900)
committerJihoon Chung <jihoon.chung@samsung.com>
Thu, 6 Jun 2013 11:35:34 +0000 (20:35 +0900)
Change-Id: I0dd6456eb43984e0e8ec8847da8b90ddf50721de

libiri/parse.c

index ea12de7..2ed3e2f 100644 (file)
@@ -428,7 +428,7 @@ iri_parse(const char *src)
 {
        iri_t *p;
        char *bufstart, *endp, *bufp, **sl;
-       const char *at, *colon, *slash, *t;
+    const char *at, *colon, *slash, *t, *slash3rd;
        size_t buflen, sc, cp;
        
        if(NULL == (p = (iri_t *) calloc(1, sizeof(iri_t))))
@@ -450,6 +450,24 @@ iri_parse(const char *src)
                /* We can disregard the colon if a slash appears before it */
                colon = NULL;
        }
+    // "@" is valid character in hierarchical part of IRI
+    if(slash && colon && (colon[1] != '/' || colon[2] != '/'))
+    {
+        //if scheme not suffixed with ://, there is not autority
+        //therefore autority(and user within) is not set
+        at = NULL;
+    }
+    else if(at && slash && slash[1] && slash[2])
+    {
+        slash3rd = strchr(slash + 2, '/');
+        //here we know scheme suffix is "://" so autority can exist
+        //3rd slash should match start of hierarchical part if exists
+        //@ after that is valid character
+        if(slash3rd && slash3rd < at)
+        {
+            at = NULL;
+        }
+    }
        if(colon && !at)
        {
                /* Definitely a scheme */