Aleksander Machniak
2015-08-13 7a42173a16fcf7c53023aee4610ac42523e86226
Simplify rcube_utils::check_ip()
2 files modified
39 ■■■■ changed files
program/lib/Roundcube/rcube_utils.php 34 ●●●●● patch | view | raw | blame | history
tests/Framework/Utils.php 5 ●●●●● patch | view | raw | blame | history
program/lib/Roundcube/rcube_utils.php
@@ -143,39 +143,7 @@
     */
    public static function check_ip($ip)
    {
        // IPv6, but there's no build-in IPv6 support
        if (strpos($ip, ':') !== false && !defined('AF_INET6')) {
            $parts = explode(':', $ip);
            $count = count($parts);
            if ($count > 8 || $count < 2) {
                return false;
            }
            foreach ($parts as $idx => $part) {
                $length = strlen($part);
                if (!$length) {
                    // there can be only one ::
                    if ($found_empty && $idx > 2) {
                        return false;
                    }
                    $found_empty = true;
                }
                // last part can be an IPv4 address
                else if ($idx == $count - 1) {
                    if (!preg_match('/^[0-9a-f]{1,4}$/i', $part)) {
                        return @inet_pton($part) !== false;
                    }
                }
                else if (!preg_match('/^[0-9a-f]{1,4}$/i', $part)) {
                    return false;
                }
            }
            return true;
        }
        return @inet_pton($ip) !== false;
        return filter_var($ip, FILTER_VALIDATE_IP) !== false;
    }
    /**
tests/Framework/Utils.php
@@ -95,6 +95,8 @@
            array('::1'),
            array('::1.2.3.4'),
            array('2001:2d12:c4fe:5afe::1'),
            array('2001::'),
            array('2001::1'),
        );
    }
@@ -110,7 +112,10 @@
            array('1.1.1.1.1'),
            array('::1.2.3.260'),
            array('::1.0'),
            array(':::1'),
            array('2001:::1'),
            array('2001::c4fe:5afe::1'),
            array(':c4fe:5afe:1'),
        );
    }