]> granicus.if.org Git - php/commitdiff
Fixed bug #50073 (parse_url() incorrect when ? in fragment).
authorIlia Alshanetsky <iliaa@php.net>
Wed, 4 Nov 2009 13:44:10 +0000 (13:44 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Wed, 4 Nov 2009 13:44:10 +0000 (13:44 +0000)
ext/standard/url.c

index d611e3b60891efe83f955631a1840081d4b51fd6..52566e9b3c713ddf6b69bba8c704884cf9f8a5cc 100644 (file)
@@ -257,10 +257,21 @@ PHPAPI php_url *php_url_parse_ex(char const *str, int length)
        e = ue;
        
        if (!(p = memchr(s, '/', (ue - s)))) {
-               if ((p = memchr(s, '?', (ue - s)))) {
-                       e = p;
-               } else if ((p = memchr(s, '#', (ue - s)))) {
-                       e = p;
+               char *query, *fragment;
+
+               query = memchr(s, '?', (ue - s));
+               fragment = memchr(s, '#', (ue - s));
+
+               if (query && fragment) {
+                       if (query > fragment) {
+                               p = e = fragment;
+                       } else {
+                               p = e = query;
+                       }
+               } else if (query) {
+                       p = e = query;
+               } else if (fragment) {
+                       p = e = fragment;
                }
        } else {
                e = p;
@@ -341,10 +352,10 @@ PHPAPI php_url *php_url_parse_ex(char const *str, int length)
        
        if ((p = memchr(s, '?', (ue - s)))) {
                pp = strchr(s, '#');
-               
+
                if (pp && pp < p) {
                        p = pp;
-                       pp = strchr(pp+2, '#');
+                       goto label_parse;
                }
        
                if (p - s) {