mirror of
https://github.com/v2fly/v2ray-core.git
synced 2025-07-26 11:44:22 -04:00
Fix: IP length not deterministic (#1267)
The length of IPv4 address in Go standard library could be 16 if it is in IPv6-mapped-IPv4 format. (cherry picked from commit c58a372d93e22f990161da5612a9207dfe0218b2)
This commit is contained in:
parent
389a0585f3
commit
41ae53e60d
@ -1,12 +1,7 @@
|
|||||||
//go:build !confonly
|
|
||||||
// +build !confonly
|
|
||||||
|
|
||||||
package router
|
package router
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/v2fly/v2ray-core/v4/app/router/routercommon"
|
"github.com/v2fly/v2ray-core/v4/app/router/routercommon"
|
||||||
"strconv"
|
|
||||||
|
|
||||||
"inet.af/netaddr"
|
"inet.af/netaddr"
|
||||||
|
|
||||||
"github.com/v2fly/v2ray-core/v4/common/net"
|
"github.com/v2fly/v2ray-core/v4/common/net"
|
||||||
@ -22,16 +17,15 @@ type GeoIPMatcher struct {
|
|||||||
func (m *GeoIPMatcher) Init(cidrs []*routercommon.CIDR) error {
|
func (m *GeoIPMatcher) Init(cidrs []*routercommon.CIDR) error {
|
||||||
var builder4, builder6 netaddr.IPSetBuilder
|
var builder4, builder6 netaddr.IPSetBuilder
|
||||||
for _, cidr := range cidrs {
|
for _, cidr := range cidrs {
|
||||||
ip := net.IP(cidr.GetIp())
|
netaddrIP, ok := netaddr.FromStdIP(net.IP(cidr.GetIp()))
|
||||||
ipStr := ip.String() + "/" + strconv.Itoa(int(cidr.GetPrefix()))
|
if !ok {
|
||||||
ipPrefix, err := netaddr.ParseIPPrefix(ipStr)
|
return newError("invalid IP address ", cidr)
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
switch len(ip) {
|
ipPrefix := netaddr.IPPrefixFrom(netaddrIP, uint8(cidr.GetPrefix()))
|
||||||
case net.IPv4len:
|
switch {
|
||||||
|
case netaddrIP.Is4():
|
||||||
builder4.AddPrefix(ipPrefix)
|
builder4.AddPrefix(ipPrefix)
|
||||||
case net.IPv6len:
|
case netaddrIP.Is6():
|
||||||
builder6.AddPrefix(ipPrefix)
|
builder6.AddPrefix(ipPrefix)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user