From 077063c21209ad3019e1da5b731294607fe6550f Mon Sep 17 00:00:00 2001 From: Vasiliy Tolstov Date: Sat, 7 Mar 2020 21:05:00 +0300 Subject: [PATCH] util/addr: check ip addrs before return Signed-off-by: Vasiliy Tolstov --- util/addr/addr.go | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/util/addr/addr.go b/util/addr/addr.go index fafe8b56..2fa52b25 100644 --- a/util/addr/addr.go +++ b/util/addr/addr.go @@ -79,8 +79,8 @@ func Extract(addr string) (string, error) { } addrs = append(addrs, loAddrs...) - var ipAddr []byte - var publicIP []byte + var ipAddr string + var publicIP string for _, rawAddr := range addrs { var ip net.IP @@ -94,22 +94,30 @@ func Extract(addr string) (string, error) { } if !isPrivateIP(ip.String()) { - publicIP = ip + publicIP = ip.String() continue } - ipAddr = ip + ipAddr = ip.String() break } // return private ip - if ipAddr != nil { - return net.IP(ipAddr).String(), nil + if len(ipAddr) > 0 { + a := net.ParseIP(ipAddr) + if a == nil { + return "", fmt.Errorf("ip addr %s is invalid", ipAddr) + } + return a.String(), nil } // return public or virtual ip - if publicIP != nil { - return net.IP(publicIP).String(), nil + if len(publicIP) > 0 { + a := net.ParseIP(publicIP) + if a == nil { + return "", fmt.Errorf("ip addr %s is invalid", publicIP) + } + return a.String(), nil } return "", fmt.Errorf("No IP address found, and explicit IP not provided")