Browse Source

Merge pull request #8125 from somaopensource/8102-fix

Check whether net.ParseIP returned nil or not
Alexandr Morozov 10 years ago
parent
commit
4778d7d52d
2 changed files with 39 additions and 0 deletions
  1. 3 0
      daemon/networkdriver/bridge/driver.go
  2. 36 0
      daemon/networkdriver/bridge/driver_test.go

+ 3 - 0
daemon/networkdriver/bridge/driver.go

@@ -401,6 +401,9 @@ func AllocatePort(job *engine.Job) engine.Status {
 
 	if hostIP != "" {
 		ip = net.ParseIP(hostIP)
+		if ip == nil {
+			return job.Errorf("Bad parameter: invalid host ip %s", hostIP)
+		}
 	}
 
 	// host ip, proto, and host port

+ 36 - 0
daemon/networkdriver/bridge/driver_test.go

@@ -39,6 +39,17 @@ func newPortAllocationJob(eng *engine.Engine, port int) (job *engine.Job) {
 	return
 }
 
+func newPortAllocationJobWithInvalidHostIP(eng *engine.Engine, port int) (job *engine.Job) {
+	strPort := strconv.Itoa(port)
+
+	job = eng.Job("allocate_port", "container_id")
+	job.Setenv("HostIP", "localhost")
+	job.Setenv("HostPort", strPort)
+	job.Setenv("Proto", "tcp")
+	job.Setenv("ContainerPort", strPort)
+	return
+}
+
 func TestAllocatePortDetection(t *testing.T) {
 	eng := engine.New()
 	eng.Logging = false
@@ -66,3 +77,28 @@ func TestAllocatePortDetection(t *testing.T) {
 		t.Fatal("Duplicate port allocation granted by AllocatePort")
 	}
 }
+
+func TestHostnameFormatChecking(t *testing.T) {
+	eng := engine.New()
+	eng.Logging = false
+
+	freePort := findFreePort(t)
+
+	// Init driver
+	job := eng.Job("initdriver")
+	if res := InitDriver(job); res != engine.StatusOK {
+		t.Fatal("Failed to initialize network driver")
+	}
+
+	// Allocate interface
+	job = eng.Job("allocate_interface", "container_id")
+	if res := Allocate(job); res != engine.StatusOK {
+		t.Fatal("Failed to allocate network interface")
+	}
+
+	// Allocate port with invalid HostIP, expect failure with Bad Request http status
+	job = newPortAllocationJobWithInvalidHostIP(eng, freePort)
+	if res := AllocatePort(job); res == engine.StatusOK {
+		t.Fatal("Failed to check invalid HostIP")
+	}
+}