]> granicus.if.org Git - php/commitdiff
MFB: Fixed bug #39898 (FILTER_VALIDATE_URL validates \r\n\t etc).
authorIlia Alshanetsky <iliaa@php.net>
Wed, 20 Dec 2006 19:20:22 +0000 (19:20 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Wed, 20 Dec 2006 19:20:22 +0000 (19:20 +0000)
ext/filter/logical_filters.c
ext/filter/tests/015.phpt
ext/filter/tests/033.phpt

index 300ffcb2aa0536776dc26434766cd52490d7b87a..58a87b437e2a50aae676ca998e211b12b07dc7e5 100644 (file)
@@ -481,6 +481,13 @@ void php_filter_validate_regexp(PHP_INPUT_FILTER_PARAM_DECL) /* {{{ */
 void php_filter_validate_url(PHP_INPUT_FILTER_PARAM_DECL) /* {{{ */
 {
        php_url *url;
+       int old_len = Z_STRLEN_P(value);
+       
+       php_filter_url(value, flags, option_array, charset TSRMLS_DC);
+
+       if (Z_TYPE_P(value) != IS_STRING || old_len != Z_STRLEN_P(value)) {
+               RETURN_VALIDATION_FAILED
+       }
 
        /* Use parse_url - if it returns false, we return NULL */
        url = php_url_parse_ex(Z_STRVAL_P(value), Z_STRLEN_P(value));
@@ -490,10 +497,10 @@ void php_filter_validate_url(PHP_INPUT_FILTER_PARAM_DECL) /* {{{ */
        }
 
        if (
-               ((flags & FILTER_FLAG_SCHEME_REQUIRED) && url->scheme == NULL) ||
-               ((flags & FILTER_FLAG_HOST_REQUIRED) && url->host == NULL) ||
-               ((flags & FILTER_FLAG_PATH_REQUIRED) && url->path == NULL) ||
-               ((flags & FILTER_FLAG_QUERY_REQUIRED) && url->query == NULL)
+               url->scheme == NULL || 
+               /* some schemas allow the host to be empty */
+               (url->host == NULL && (strcmp(url->scheme, "mailto") && strcmp(url->scheme, "news") && strcmp(url->scheme, "file"))) ||
+               ((flags & FILTER_FLAG_PATH_REQUIRED) && url->path == NULL) || ((flags & FILTER_FLAG_QUERY_REQUIRED) && url->query == NULL)
        ) {
                php_url_free(url);
                RETURN_VALIDATION_FAILED
index 7024df4e24d3a2b9db8a74e5d3a72fce143470ce..a9c4a8cf484890d99d2f2088e738c68b90b3a844 100644 (file)
@@ -24,6 +24,10 @@ $values = Array(
 '',    
 -1,    
 array(),       
+'mailto:foo@bar.com',
+'news:news.php.net',
+'file://foo/bar',
+"http://\r\n/bar",
 );
 foreach ($values as $value) {
        var_dump(filter_var($value, FILTER_VALIDATE_URL));
@@ -48,18 +52,22 @@ string(32) "http://www.example.com/index.php"
 string(31) "http://www.example/img/test.png"
 string(27) "http://www.example/img/dir/"
 string(26) "http://www.example/img/dir"
-string(28) "http//www.example/wrong/url/"
-string(17) "http:/www.example"
+bool(false)
+bool(false)
 string(18) "file:///tmp/test.c"
 string(26) "ftp://ftp.example.com/tmp/"
-string(11) "/tmp/test.c"
-string(1) "/"
 bool(false)
-string(6) "http:/"
-string(5) "http:"
-string(4) "http"
-string(0) ""
-string(2) "-1"
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+string(18) "mailto:foo@bar.com"
+string(17) "news:news.php.net"
+string(14) "file://foo/bar"
 bool(false)
 bool(false)
 string(10) "http://qwe"
@@ -70,4 +78,4 @@ bool(false)
 string(42) "http://www.example.com/path/at/the/server/"
 bool(false)
 string(40) "http://www.example.com/index.php?a=b&c=d"
-Done
+Done
\ No newline at end of file
index fc0bd2687d3cb290656d7dba515204acd06c01ab..18a3616903e649d4404ff8dec001610054f84fed 100644 (file)
@@ -11,7 +11,7 @@ int                      1                                               123
 boolean                  1                                                                                                 
 float                    1                                               123                                               
 validate_regexp                                                                                   O'Henry                  
-validate_url        PHP  1  foo@bar.com    http://a.b.c        1.2.3.4   123  123abc<>()          O'Henry        하퍼    
+validate_url                               http://a.b.c                                                                    
 validate_email              foo@bar.com                                                                                    
 validate_ip                                                    1.2.3.4                                                     
 string              PHP  1  foo@bar.com    http://a.b.c        1.2.3.4   123  123abc()            O&#39;Henry    하퍼