From 73f914bdc1a681f827ed2375820c2d171e31bb0b Mon Sep 17 00:00:00 2001 From: Arne Schwabe Date: Mon, 30 Apr 2012 04:51:43 +0200 Subject: Version 0.4.4 Fix parsing of certain netmasks Fix custom Routes parsing --- src/de/blinkt/openvpn/OpenVpnService.java | 27 +++++++++++++++++++-------- src/de/blinkt/openvpn/VpnProfile.java | 4 ++++ 2 files changed, 23 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/de/blinkt/openvpn/OpenVpnService.java b/src/de/blinkt/openvpn/OpenVpnService.java index 031f2a14..644b060f 100644 --- a/src/de/blinkt/openvpn/OpenVpnService.java +++ b/src/de/blinkt/openvpn/OpenVpnService.java @@ -65,16 +65,27 @@ public class OpenVpnService extends VpnService implements Handler.Callback { String[] ipt = mask.split("\\."); long netmask=0; - netmask += Integer.parseInt(ipt[0]); - netmask += Integer.parseInt(ipt[1])<< 8; - netmask += Integer.parseInt(ipt[2])<< 16; - netmask += Integer.parseInt(ipt[3])<< 24; - - len =0; - while((netmask & 0x1) == 1) { - len++; + netmask += Long.parseLong(ipt[0])<< 24; + netmask += Integer.parseInt(ipt[1])<< 16; + netmask += Integer.parseInt(ipt[2])<< 8; + netmask += Integer.parseInt(ipt[3]); + + // Add 33. bit to ensure the loop terminates + netmask += 1l << 32; + + int lenZeros = 0; + while((netmask & 0x1) == 0) { + lenZeros++; netmask = netmask >> 1; } + // Check if rest of netmask is only 1s + if(netmask != (0x1ffffffffl >> lenZeros)) { + // Asume no CIDR, set /32 + len=32; + } else { + len =32 -lenZeros; + } + } @Override public String toString() { diff --git a/src/de/blinkt/openvpn/VpnProfile.java b/src/de/blinkt/openvpn/VpnProfile.java index 4028f3d0..a1b7a06f 100644 --- a/src/de/blinkt/openvpn/VpnProfile.java +++ b/src/de/blinkt/openvpn/VpnProfile.java @@ -300,6 +300,10 @@ public class VpnProfile implements Serializable{ private Collection getCustomRoutes() { Vector cidrRoutes=new Vector(); + if(mCustomRoutes==null) { + // No routes set, return empty vector + return cidrRoutes; + } for(String route:mCustomRoutes.split("[\n \t]")) { if(!route.equals("")) { String cidrroute = cidrToIPAndNetmask(route); -- cgit v1.2.3