diff --git a/Gopkg.lock b/Gopkg.lock index 6958e18af5..323cedba93 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -1254,7 +1254,7 @@ [[projects]] branch = "master" - digest = "1:201bff9d99a538dd71fd8e55bbbfda8a301fd89676d0668a2cedc574e1aeaa03" + digest = "1:2dd5cfa0e15bc1351229c0be3b09b0b7fe47d23e99d19edfba5b2402ddb1cf7b" name = "yunion.io/x/pkg" packages = [ "gotypes", @@ -1288,7 +1288,7 @@ "utils", ] pruneopts = "UT" - revision = "122c7d4ce76b4611b63d86af8e9bb2610ab55c20" + revision = "194153d51e1c1bd8a3b9545ee0bc1504ddcdcb4d" [[projects]] branch = "master" diff --git a/vendor/yunion.io/x/pkg/util/regutils/regutils.go b/vendor/yunion.io/x/pkg/util/regutils/regutils.go index 19fbb24f0f..b196f2772f 100644 --- a/vendor/yunion.io/x/pkg/util/regutils/regutils.go +++ b/vendor/yunion.io/x/pkg/util/regutils/regutils.go @@ -1,7 +1,9 @@ package regutils import ( + "net" "regexp" + "strings" ) var FUNCTION_REG *regexp.Regexp @@ -11,9 +13,6 @@ var INTEGER_REG *regexp.Regexp var FLOAT_REG *regexp.Regexp var MACADDR_REG *regexp.Regexp var COMPACT_MACADDR_REG *regexp.Regexp -var IPADDR_REG_PATTERN *regexp.Regexp -var IP6ADDR_REG *regexp.Regexp -var CIDR_REG_PATTERN *regexp.Regexp var NSPTR_REG *regexp.Regexp var NAME_REG *regexp.Regexp var DOMAINNAME_REG *regexp.Regexp @@ -43,9 +42,6 @@ func init() { FLOAT_REG = regexp.MustCompile(`^\d+(\.\d*)?$`) MACADDR_REG = regexp.MustCompile(`^([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}$`) COMPACT_MACADDR_REG = regexp.MustCompile(`^[0-9a-fA-F]{12}$`) - IPADDR_REG_PATTERN = regexp.MustCompile(`^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$`) - CIDR_REG_PATTERN = regexp.MustCompile(`^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(\/\d{1,2})?$`) - IP6ADDR_REG = regexp.MustCompile(`^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3}))|:)))(%.+)?\s*$`) NSPTR_REG = regexp.MustCompile(`^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\.in-addr\.arpa$`) NAME_REG = regexp.MustCompile(`^[a-zA-Z][a-zA-Z0-9._@-]*$`) DOMAINNAME_REG = regexp.MustCompile(`^[a-zA-Z0-9-.]+$`) @@ -97,19 +93,26 @@ func MatchCompactMacAddr(str string) bool { } func MatchIP4Addr(str string) bool { - return IPADDR_REG_PATTERN.MatchString(str) + ip := net.ParseIP(str) + return ip != nil && !strings.Contains(str, ":") } func MatchCIDR(str string) bool { - return CIDR_REG_PATTERN.MatchString(str) + ip, _, err := net.ParseCIDR(str) + if err != nil { + return false + } + return ip != nil && !strings.Contains(str, ":") } func MatchIP6Addr(str string) bool { - return IP6ADDR_REG.MatchString(str) + ip := net.ParseIP(str) + return ip != nil && strings.Contains(str, ":") } func MatchIPAddr(str string) bool { - return MatchIP4Addr(str) || MatchIP6Addr(str) + ip := net.ParseIP(str) + return ip != nil } func MatchPtr(str string) bool {