]> granicus.if.org Git - php/commitdiff
Fixed bug #53924 (FILTER_VALIDATE_URL doesn't validate port number).
authorIlia Alshanetsky <iliaa@php.net>
Fri, 4 Feb 2011 21:41:15 +0000 (21:41 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Fri, 4 Feb 2011 21:41:15 +0000 (21:41 +0000)
NEWS
ext/filter/tests/015.phpt
ext/standard/url.c

diff --git a/NEWS b/NEWS
index 77e7dda8db20652a3c532871b61eb9075b638b44..0cc6666920d09d27edbfd6d83e18421eca210318 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -47,6 +47,8 @@
     null default value). (Gustavo, Stas)
 
 - Filter extension:
+  . Fixed bug #53924 (FILTER_VALIDATE_URL doesn't validate port number).
+    (Ilia)
   . Fixed bug #53150 (FILTER_FLAG_NO_RES_RANGE is missing some IP ranges).
     (Ilia)
   . Fixed bug #52209 (INPUT_ENV returns NULL for set variables (CLI)). (Ilia)
 - Phar extension:
   . Fixed bug #53541 (format string bug in ext/phar).
     (crrodriguez at opensuse dot org, Ilia)
+  . Fixed bug #53898 (PHAR reports invalid error message, when the directory 
+    does not exist). (Ilia)
 
 - PHP-FPM SAPI:
   . Enforce security in the fastcgi protocol parsing.
index a9c4a8cf484890d99d2f2088e738c68b90b3a844..7be849e76c3dc68055a80db544d011222061dfbe 100644 (file)
@@ -28,6 +28,7 @@ array(),
 'news:news.php.net',
 'file://foo/bar',
 "http://\r\n/bar",
+"http://example.com:qq"
 );
 foreach ($values as $value) {
        var_dump(filter_var($value, FILTER_VALIDATE_URL));
@@ -70,6 +71,7 @@ string(17) "news:news.php.net"
 string(14) "file://foo/bar"
 bool(false)
 bool(false)
+bool(false)
 string(10) "http://qwe"
 bool(false)
 bool(false)
index 2e29c9dd4dde307122ec6ac696f3a8d3379313f1..00f5694e0756d41dbce5bf398f57f7a7155770a2 100644 (file)
@@ -180,15 +180,20 @@ PHPAPI php_url *php_url_parse_ex(char const *str, int length)
                parse_port:
                p = e + 1;
                pp = p;
-               
+
                while (pp-p < 6 && isdigit(*pp)) {
                        pp++;
                }
-               
+
                if (pp-p < 6 && (*pp == '/' || *pp == '\0')) {
                        memcpy(port_buf, p, (pp-p));
                        port_buf[pp-p] = '\0';
                        ret->port = atoi(port_buf);
+                       if (!ret->port && (pp - p) > 0) {
+                               STR_FREE(ret->scheme);
+                               efree(ret);
+                               return NULL;
+                       }
                } else {
                        goto just_path;
                }
@@ -267,6 +272,13 @@ PHPAPI php_url *php_url_parse_ex(char const *str, int length)
                                memcpy(port_buf, p, (e-p));
                                port_buf[e-p] = '\0';
                                ret->port = atoi(port_buf);
+                               if (!ret->port && (e - p)) {
+                                       STR_FREE(ret->scheme);
+                                       STR_FREE(ret->user);
+                                       STR_FREE(ret->pass);
+                                       efree(ret);
+                                       return NULL;
+                               }
                        }
                        p--;
                }