]> granicus.if.org Git - php/commitdiff
Fixed bug #32813 (parse_url() does not handle scheme-only urls properly).
authorIlia Alshanetsky <iliaa@php.net>
Mon, 25 Apr 2005 23:47:37 +0000 (23:47 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Mon, 25 Apr 2005 23:47:37 +0000 (23:47 +0000)
ext/standard/tests/strings/url_t.phpt
ext/standard/url.c

index dd323ffc235ca67b4f1ed59e7a89685bc56d41d7..1e4dd3566df84bbd7089761a731df9efde86020a 100644 (file)
@@ -67,7 +67,8 @@ $sample_urls = array (
 'file://path/to/file',
 'file:/path/to/file',
 'http://1.2.3.4:/abc.asp?a=1&b=2',
-'http://foo.com#bar'
+'http://foo.com#bar',
+'scheme:'
 );
 
     foreach ($sample_urls as $url) {
@@ -657,3 +658,7 @@ array(3) {
   ["fragment"]=>
   string(3) "bar"
 }
+array(1) {
+  ["scheme"]=>
+  string(6) "scheme"
+}
index 1c2091f9fe08d7e6d519ed4a7a4ccd5b30c20c67..63c5f60dd516be578ba44ab23451d8a44b3fd0e9 100644 (file)
@@ -104,6 +104,12 @@ PHPAPI php_url *php_url_parse_ex(char const *str, int length)
 
        /* parse scheme */
        if ((e = memchr(s, ':', length)) && (e - s)) {
+               if (*(e + 1) == '\0') { /* only scheme is available */
+                       ret->scheme = estrndup(s, (e - s));
+                       php_replace_controlchars_ex(ret->scheme, (e - s));
+                       goto end;
+               }
+
                /* 
                 * certain schemas like mailto: and zlib: may not have any / after them
                 * this check ensures we support those.
@@ -303,7 +309,7 @@ PHPAPI php_url *php_url_parse_ex(char const *str, int length)
                ret->path = estrndup(s, (ue-s));
                php_replace_controlchars_ex(ret->path, (ue - s));
        }
-
+end:
        return ret;
 }
 /* }}} */