From 7a79b514162f954d4a06cc8c7730b1aae3a5af07 Mon Sep 17 00:00:00 2001
From: Erick Hitter <git-contrib@ethitter.com>
Date: Sat, 30 Dec 2017 14:09:08 -0800
Subject: [PATCH] Ensure IPs are valid

---
 dyndnsd-client.go | 26 ++++++++++++++++++++------
 1 file changed, 20 insertions(+), 6 deletions(-)

diff --git a/dyndnsd-client.go b/dyndnsd-client.go
index 602e8ee..a9180d9 100644
--- a/dyndnsd-client.go
+++ b/dyndnsd-client.go
@@ -6,6 +6,7 @@ import (
 	"github.com/joshbetz/config"
 	"io/ioutil"
 	"log"
+	"net"
 	"net/http"
 	"net/url"
 	"os"
@@ -55,9 +56,15 @@ func main() {
 
 	// IPv4 is required
 	if ipv4, err := getUrl(ipv4Endpoint); err == nil {
-		query := endpoint.Query()
-		query.Set("myip", ipv4)
-		endpoint.RawQuery = query.Encode()
+		if ipv4Valid := net.ParseIP(ipv4); ipv4Valid == nil {
+			logger.Println("Invalid IPv4 address")
+			logger.Printf("%s", err)
+			return
+		} else {
+			query := endpoint.Query()
+			query.Set("myip", ipv4Valid.String())
+			endpoint.RawQuery = query.Encode()
+		}
 	} else {
 		logger.Println("Couldn't retrieve IPv4 address")
 		logger.Printf("%s", err)
@@ -66,9 +73,16 @@ func main() {
 
 	// IPv6 is optional
 	if ipv6, err := getUrl(ipv6Endpoint); err == nil {
-		query := endpoint.Query()
-		query.Set("myip6", ipv6)
-		endpoint.RawQuery = query.Encode()
+		if ipv6Valid := net.ParseIP(ipv6); ipv6Valid == nil {
+			logger.Println("Invalid IPv6 address")
+			logger.Printf("%s", err)
+		} else {
+			// TODO: parse to /64, use ::1.
+
+			query := endpoint.Query()
+			query.Set("myip6", ipv6)
+			endpoint.RawQuery = query.Encode()
+		}
 	} else {
 		logger.Println("Couldn't retrieve IPv6 address")
 		logger.Printf("%s", err)
-- 
GitLab