diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2017-11-26 23:45:41 +0100 |
---|---|---|
committer | Samuel Holland <samuel@sholland.org> | 2017-11-26 23:45:41 +0100 |
commit | d99545fac0030da66d8639cafb527961675f9ace (patch) | |
tree | cbf3bd8a5893553a9a9841a105a0e19adc05d7c0 /app/src/main | |
parent | db4e5cc2d5198d5f6fd72f6e68391fdf47bd6c98 (diff) |
Config: make parsing stricter
Diffstat (limited to 'app/src/main')
4 files changed, 19 insertions, 6 deletions
diff --git a/app/src/main/java/com/wireguard/android/backends/VpnService.java b/app/src/main/java/com/wireguard/android/backends/VpnService.java index 084a2407..95736de5 100644 --- a/app/src/main/java/com/wireguard/android/backends/VpnService.java +++ b/app/src/main/java/com/wireguard/android/backends/VpnService.java @@ -369,6 +369,11 @@ public class VpnService extends Service config.setName(configName); configs.add(config); } catch (IllegalArgumentException | IOException e) { + try { + file.delete(); + } catch (Exception e2) { + Log.w(TAG, "Could not remove " + fileName, e2); + } Log.w(TAG, "Failed to load config from " + fileName, e); } } diff --git a/app/src/main/java/com/wireguard/config/Attribute.java b/app/src/main/java/com/wireguard/config/Attribute.java index 4ee4e9f5..b2aa0d53 100644 --- a/app/src/main/java/com/wireguard/config/Attribute.java +++ b/app/src/main/java/com/wireguard/config/Attribute.java @@ -17,7 +17,7 @@ enum Attribute { LISTEN_PORT("ListenPort"), MTU("MTU"), PERSISTENT_KEEPALIVE("PersistentKeepalive"), - PRE_SHARED_KEY("PresharedKey"), + PRESHARED_KEY("PresharedKey"), PRIVATE_KEY("PrivateKey"), PUBLIC_KEY("PublicKey"); diff --git a/app/src/main/java/com/wireguard/config/Config.java b/app/src/main/java/com/wireguard/config/Config.java index 2a282d09..d5f0c6e5 100644 --- a/app/src/main/java/com/wireguard/config/Config.java +++ b/app/src/main/java/com/wireguard/config/Config.java @@ -139,19 +139,27 @@ public class Config extends BaseObservable new InputStreamReader(stream, StandardCharsets.UTF_8))) { Peer currentPeer = null; String line; + boolean inInterfaceSection = false; while ((line = reader.readLine()) != null) { - if (line.isEmpty()) + if (line.isEmpty() || line.startsWith("#")) continue; if ("[Interface]".equals(line)) { currentPeer = null; + inInterfaceSection = true; } else if ("[Peer]".equals(line)) { currentPeer = addPeer(); - } else if (currentPeer == null) { + inInterfaceSection = false; + } else if (inInterfaceSection) { iface.parse(line); - } else { + } else if (currentPeer != null) { currentPeer.parse(line); + } else { + throw new IllegalArgumentException("Invalid configuration line: " + line); } } + if (!inInterfaceSection && currentPeer == null) { + throw new IllegalArgumentException("Did not find any config information"); + } } } diff --git a/app/src/main/java/com/wireguard/config/Peer.java b/app/src/main/java/com/wireguard/config/Peer.java index 718a5c3c..ea73155f 100644 --- a/app/src/main/java/com/wireguard/config/Peer.java +++ b/app/src/main/java/com/wireguard/config/Peer.java @@ -104,7 +104,7 @@ public class Peer extends BaseObservable implements Copyable<Peer>, Observable, setEndpoint(key.parseFrom(line)); else if (key == Attribute.PERSISTENT_KEEPALIVE) setPersistentKeepalive(key.parseFrom(line)); - else if (key == Attribute.PRE_SHARED_KEY) + else if (key == Attribute.PRESHARED_KEY) setPreSharedKey(key.parseFrom(line)); else if (key == Attribute.PUBLIC_KEY) setPublicKey(key.parseFrom(line)); @@ -161,7 +161,7 @@ public class Peer extends BaseObservable implements Copyable<Peer>, Observable, if (persistentKeepalive != null) sb.append(Attribute.PERSISTENT_KEEPALIVE.composeWith(persistentKeepalive)); if (preSharedKey != null) - sb.append(Attribute.PRE_SHARED_KEY.composeWith(preSharedKey)); + sb.append(Attribute.PRESHARED_KEY.composeWith(preSharedKey)); if (publicKey != null) sb.append(Attribute.PUBLIC_KEY.composeWith(publicKey)); return sb.toString(); |