*More robust IPv6 validation (exclude ambiguous IPs)
authorAaron Schulz <aaron@users.mediawiki.org>
Tue, 13 Mar 2007 19:25:49 +0000 (19:25 +0000)
committerAaron Schulz <aaron@users.mediawiki.org>
Tue, 13 Mar 2007 19:25:49 +0000 (19:25 +0000)
includes/IP.php

index 883c3ef..80efd1c 100644 (file)
@@ -36,11 +36,13 @@ class IP {
         */
        public static function isIPAddress( $ip ) {
                if ( !$ip ) return false;
-               return preg_match( '/^' . IP_ADDRESS_STRING . '$/', $ip);
+               // IPv6 IPs with two "::" strings are ambiguous and this invalid
+               return preg_match( '/^' . IP_ADDRESS_STRING . '$/', $ip) && ( substr_count($ip, '::') < 2 );
        }
        
        public static function isIPv6( $ip ) {
-               return preg_match( '/^' . RE_IPV6_ADD . '(\/' . RE_IPV6_PREFIX . '|)$/', $ip);
+               // IPv6 IPs with two "::" strings are ambiguous and this invalid
+               return preg_match( '/^' . RE_IPV6_ADD . '(\/' . RE_IPV6_PREFIX . '|)$/', $ip) && ( substr_count($ip, '::') < 2);
        }
        
        public static function isIPv4( $ip ) {