diff options
Diffstat (limited to 'app/src/main/java/com/wireguard/config/InetNetwork.java')
-rw-r--r-- | app/src/main/java/com/wireguard/config/InetNetwork.java | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/app/src/main/java/com/wireguard/config/InetNetwork.java b/app/src/main/java/com/wireguard/config/InetNetwork.java index 9e5e8c64..444af58e 100644 --- a/app/src/main/java/com/wireguard/config/InetNetwork.java +++ b/app/src/main/java/com/wireguard/config/InetNetwork.java @@ -22,19 +22,28 @@ public final class InetNetwork { this.mask = mask; } - public static InetNetwork parse(final String network) { + public static InetNetwork parse(final String network) throws ParseException { final int slash = network.lastIndexOf('/'); + final String maskString; final int rawMask; final String rawAddress; if (slash >= 0) { - rawMask = Integer.parseInt(network.substring(slash + 1), 10); + maskString = network.substring(slash + 1); + try { + rawMask = Integer.parseInt(maskString, 10); + } catch (final NumberFormatException ignored) { + throw new ParseException(Integer.class, maskString); + } rawAddress = network.substring(0, slash); } else { + maskString = ""; rawMask = -1; rawAddress = network; } final InetAddress address = InetAddresses.parse(rawAddress); final int maxMask = (address instanceof Inet4Address) ? 32 : 128; + if (rawMask > maxMask) + throw new ParseException(InetNetwork.class, maskString, "Invalid network mask"); final int mask = rawMask >= 0 && rawMask <= maxMask ? rawMask : maxMask; return new InetNetwork(address, mask); } |