瀏覽代碼

Fix out of bound slice access in Delete()

Signed-off-by: Santhosh Manohar <santhosh@docker.com>
Santhosh Manohar 9 年之前
父節點
當前提交
82f3d55fa4
共有 2 個文件被更改,包括 27 次插入0 次删除
  1. 4 0
      libnetwork/etchosts/etchosts.go
  2. 23 0
      libnetwork/etchosts/etchosts_test.go

+ 4 - 0
libnetwork/etchosts/etchosts.go

@@ -159,6 +159,10 @@ func Delete(path string, recs []Record) error {
 loop:
 	for s.Scan() {
 		b := s.Bytes()
+		if len(b) == 0 {
+			continue
+		}
+
 		if b[0] == '#' {
 			buf.Write(b)
 			buf.Write(eol)

+ 23 - 0
libnetwork/etchosts/etchosts_test.go

@@ -331,6 +331,29 @@ func TestDeleteEmpty(t *testing.T) {
 	}
 }
 
+func TestDeleteNewline(t *testing.T) {
+	file, err := ioutil.TempFile("", "")
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer os.Remove(file.Name())
+
+	b := []byte("\n")
+	if _, err := file.Write(b); err != nil {
+		t.Fatal(err)
+	}
+
+	rec := []Record{
+		{
+			Hosts: "prefix",
+			IP:    "2.2.2.2",
+		},
+	}
+	if err := Delete(file.Name(), rec); err != nil {
+		t.Fatal(err)
+	}
+}
+
 func TestDelete(t *testing.T) {
 	file, err := ioutil.TempFile("", "")
 	if err != nil {